Gli automi a stati finiti, o DFA (Deterministic Finite-state Automaton) sono macchine a stati finiti in grado di accettare o rifiutare stringhe date loro in input carattere per carettere. Sono usati per applicazioni come parser dei compilatori e riconoscimento dei pattern nei dati.
Un automa deterministico è un’automa il cui prossimo stato è noto e unico. I DFA sono deterministici.
Definizione formale
Un DFA è una quintupla tale che:
- è un insieme finito di stati;
- è un insieme finito dei simboli dell’alfabeto che compongono tutti gli input possibili;
- è la funzione di transizione;
- è lo stato iniziale.
- è l’insieme degli stati finali (anche detti di accettazione);
Per un DFA, Riconoscere/accettare una stringa vuol dire trovarsi in uno stato finale al termine dell’esecuzione. Rifiutare una stringa vuol dire terminare l’esecuzione in uno stato non finale.
Nonostante un DFA abbia un numero finito di stati, esso può processare stringhe di lunghezza infinita in tempo finito. Ad esempio, se si dà una stringa infinita a un automa che riconosce le stringhe che iniziano con , l’automa accetterà la stringa appena riceverà .
A ogni DFA corrisponde un linguaggio
Ogni DFA riconosce un linguaggio detto linguaggio regolare, cioé l’insieme di tutte le stringhe che esso può accettare. Formalmente, (per esempio , cioè tutte le stringhe binarie di lunghezza ).
” riconosce ” si scrive .
Esempi di automa
1.

- è l’insieme di tutti gli stati
- è l’alfabeto
- sono le frecce nel diagramma
- è lo stato finale
- è lo stato iniziale
N.B.: Se si disegna un automa incompleto (per semplicità) che raggiunto un carattere non sa che fare, per convenzione allora quella stringa non è contenuta nel linguaggio.
Esempio di esecuzione con input :
L’automa termina il processing in , che è lo stato finale, quindi la stringa viene riconosciuta.
2. progettare un DFA che accetta solo le stringhe che iniziano con “1”

è lo stato finale.
N.B.: Per far rifiutare la stringa, bisogna far andare l’automa in loop su un vicolo cieco, detto stato pozzo.
Correttezza
Bisogna dimostrare entrambe le tesi:
Si può dimostrare sia per induzione che con , ma è scontato e noioso.
3. Esercizio per casa
