Introduzione degli automi finiti

Introduzione degli automi finiti

Finite Automata (FA) è la macchina più semplice per riconoscere modelli. Viene utilizzato per caratterizzare un linguaggio regolare, ad esempio: /baa+!/.
Inoltre viene utilizzato per analizzare e riconoscere le espressioni del linguaggio naturale. Gli automi finiti o macchine a stati finiti sono una macchina astratta che ha cinque elementi o tuple. Ha una serie di stati e regole per passare da uno stato all'altro ma dipende dal simbolo di input applicato. In base agli stati e all'insieme di regole la stringa di input può essere accettata o rifiutata. Fondamentalmente, è un modello astratto di un computer digitale che legge una stringa di input e cambia il suo stato interno a seconda del simbolo di input corrente. Ogni automa definisce un linguaggio, cioè l'insieme di stringhe che accetta. La figura seguente mostra alcune caratteristiche essenziali dell'automazione generale.

Figura: Caratteristiche degli automi finiti

La figura sopra mostra le seguenti caratteristiche degli automi:

  1. Ingresso
  2. Produzione
  3. Stati degli automi
  4. Rapporto statale
  5. Relazione di uscita

Un automa finito è costituito da quanto segue:

Q : Finite set of states. ? : set of Input Symbols. q : Initial state. F : set of Final States. ? : Transition Function. 

La specifica formale della macchina è

{ Q, ?, q, F, ? } 

La FA è caratterizzata in due tipologie:

1) Automi finiti deterministici (DFA):

DFA consists of 5 tuples {Q, ?, q, F, ?}. Q : set of all states. ? : set of input symbols. ( Symbols which machine takes as input ) q : Initial state. ( Starting state of a machine ) F : set of final state. ? : Transition Function, defined as ? : Q X ? -->D. 

In un DFA, per un particolare carattere di input, la macchina va in uno solo stato. Una funzione di transizione è definita su ogni stato per ogni simbolo di input. Inoltre in DFA lo spostamento nullo (o ?) non è consentito, ovvero DFA non può cambiare stato senza alcun carattere di input.

Ad esempio, costruisci un DFA che accetti un linguaggio di tutte le stringhe che terminano con 'a'.
Dato: ? = {a,b}, q = {q 0 }, F={q 1 }, Q = {q 0 , Q 1 }

Innanzitutto, considera un insieme linguistico di tutte le possibili stringhe accettabili per costruire un diagramma accurato delle transizioni di stato.
L = {a, aa, aaa, aaaa, aaaaa, ba, bba, bbba, padre, padre, padre, padre}
Sopra c'è un semplice sottoinsieme delle possibili stringhe accettabili, ci possono essere molte altre stringhe che terminano con 'a' e contengono simboli {a,b}.

Fig 1. Diagramma di transizione di stato per DFA con ? = {a, b}

Le stringhe non accettate sono,
ab, bb, aab, abbb, ecc.

Tabella di transizione dello stato per l'automa di cui sopra,

?Stato Simbolo? UN B
Q 0 Q 1 Q 0
Q 1 Q 1 Q 0

Una cosa importante da notare è, possono esserci molti DFA possibili per un modello . In genere è preferibile un DFA con un numero minimo di Stati.

2) Automi finiti non deterministici (NFA): NFA è simile a DFA ad eccezione delle seguenti funzionalità aggiuntive:

  1. È consentita la mossa nulla (o ?), ovvero è possibile avanzare senza leggere i simboli.
  2. Capacità di trasmettere a qualsiasi numero di stati per un particolare input.

Tuttavia, queste funzionalità di cui sopra non aggiungono alcun potere a NFA. Se confrontiamo entrambi in termini di potenza, entrambi sono equivalenti.

A causa delle funzionalità aggiuntive di cui sopra, NFA ha una funzione di transizione diversa, il resto è uguale a DFA.

?: Transition Function ?: Q X (? U ? ) -->2^Q. 

Come puoi vedere nella funzione di transizione per qualsiasi input incluso null (o ?), NFA può andare a qualsiasi numero di stati. Ad esempio, di seguito è riportato un NFA per il problema di cui sopra.

Fig 2. Diagramma di transizione di stato per NFA con ? = {a, b}

Tabella di transizione dello stato per l'automa sopra,

?Stato Simbolo? UN B
Q 0 {Q 0 ,Q 1 } Q 0
Q 1 ? ?

Una cosa importante da notare è, in NFA, se qualsiasi percorso per una stringa di input porta a uno stato finale, allora la stringa di input È accettato . Ad esempio, nell'NFA precedente, sono presenti più percorsi per la stringa di input 00. Poiché uno dei percorsi porta a uno stato finale, 00 viene accettato dall'NFA precedente.

Alcuni punti importanti:

    Giustificazione:
Poiché tutte le tuple in DFA e NFA sono uguali tranne una delle tuple, che è la funzione di transizione (?)

In case of DFA ? : Q X ? -->D In caso di NFA? : QX? --> 2Q 

Ora se osservi scoprirai Q X ? –> Q fa parte di Q X ? –>2 Q .

Sul lato destro, Q è il sottoinsieme di 2 Q che indica che Q è contenuto in 2 Q oppure Q è una parte di 2 Q , tuttavia, non è vero il contrario. Quindi, matematicamente, possiamo concludere questo ogni DFA è NFA ma non viceversa . Eppure esiste un modo per convertire un NFA in DFA, quindi esiste un DFA equivalente per ogni NFA .

  1. Sia NFA che DFA hanno lo stesso potere e ogni NFA può essere tradotto in un DFA.
  2. Possono esserci più stati finali sia in DFA che in NFA.
  3. L'NFA è più un concetto teorico.
  4. DFA viene utilizzato nell'analisi lessicale nel compilatore.
  5. Se il numero di stati nella NFA è N, il suo DFA può averne al massimo 2 N numero di stati.

Vedere Quiz sulle espressioni regolari e sugli automi finiti.