Automi a stati finiti: stati finali


8

Nel nostro corso sui concetti del linguaggio di programmazione, il nostro istruttore ha affermato che va bene che uno stato finale porti a un altro stato in un diagramma a stati finiti.

Ma questo sembra essere un concetto fondamentalmente contraddittorio. Perché uno stato finale per definizione è uno che termina le transizioni, cioè che una volta raggiunto, non c'è nient'altro da fare.

Eppure ha presentato una diapositiva come questa, in cui gli stati finali sono rappresentati da due cerchi ... Come è possibile che B, D, E e H siano stati finali quando così chiaramente non lo sono?

inserisci qui la descrizione dell'immagine


"Una volta raggiunto, non c'è nient'altro da fare." Solo se hai consumato tutto l'input e considerato qualsiasi transizione epsilon.
Andrea Lazzarotto,

Risposte:


17

Sembra che tu abbia un fraintendimento tra modelli generativi e modelli "riconoscenti".

La grammatica che hai sulla destra genera parole applicando regole, partendo dalla variabile iniziale e fermandosi dopo che non ci sono più variabili.

Gli automi, tuttavia, riconoscono una lingua come segue: dai all'automa una parola, lettera per lettera, e l'automa prende delle transizioni in base alle lettere che gli vengono date.

Se, dopo aver letto tutte le lettere, l'automa finisce in uno stato di accettazione (aka finale), allora diciamo che l'automa accetta la parola.

Quindi è meglio pensare a quelli come stati di "accettazione", piuttosto che di "finale", sebbene entrambi i termini siano comunemente usati.


Sono molto d'accordo. Il mio libro di testo li ha anche chiamati stati "finali" e mi ha confuso fino a quando non ho iniziato a costringermi a chiamarli "accettare stati" ahah.
Seankala,

Divertente, non ho mai visto consapevolmente il termine "stato finale" prima, li ho sempre visti chiamare "stato accettante" - e, come spiega questa risposta, "stato finale" è probabilmente sbagliato.
Konrad Rudolph,

7

uno stato finale per definizione è quello che termina le transizioni, cioè che una volta raggiunto non c'è nient'altro da fare.

La fonte della tua confusione è che questa non è la definizione. "Stato finale" è una cattiva scelta del nome e la maggior parte degli autori sembra preferire "accettare lo stato". La definizione è che l'automa accetta se la sua esecuzione termina in uno stato finale / accettante e rifiuta diversamente.


7

Anzi, è confuso! Per risolvere il problema, chiamali stati di "accettazione" anziché di "finale". Perché è quello che sono realmente, solo un marker che ci dice che in questo momento la stringa elaborata appartiene alla lingua.


3

"uno stato finale per definizione è quello che termina le transizioni, cioè che una volta raggiunto non c'è nient'altro da fare."

Nella tradizionale convenzione di lavorare con gli accettori (vale a dire automi a stati finiti che indicano se una determinata stringa appartiene o non appartiene a una lingua), uno stato finale è quello che, quando raggiunto con una stringa vuota (l'input era consumato interamente) significa che la stringa iniziale è accettata, ovvero fa parte del linguaggio dell'automa.


3

Come potete vedere. La grammatica fornita dice A -> a. Pertanto l'automa accetta di terminare sulla stringa "a". Ma consente anche A -> aB -> abD -> abc, quindi anche la stringa "abc" è accettata. Se finiamo la stringa a questo punto, ci troveremo in uno stato finale e quindi la stringa è stata accettata. Ma potremmo ancora voler accettare la stringa "ab". Quindi dobbiamo assicurarci che {"a", "ab", "abc"} siano tutti accettati dall'automa. Non vedere gli stati finali come uno stato tale che se lo entriamo non potremmo mai lasciarlo, vederlo come uno stato per dirci se la nostra stringa corrente è accettata o meno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.