Automa minimo

Per ogni automa esiste un automa minimo che ha lo stesso linguaggio generato e accettato Lm ma un numero di stati inferiore.

L'automa è minimo è unico a parte gli isomorfismi ( diversa disposizione degli stati ).

A cosa serve un automa minimo?

Se un automa G raggiunge un determinato obiettivo con n stati, l'automa G' minimo fa lo stesso ma con m<n stati.

E' quindi più efficiente nell'utilizzo delle risorse e più semplice a parità di risultato.

Nota. Un automa minimo non necessariamente deve essere completo. Ciò che conta è che riduca al minimo il numero di stati a parità di comportamento dell'automa.

Un esempio pratico

Questi due automi G,G' hanno lo stesso linguaggio generato L(G)=L(G') e accettato Lm(G)=Lm(G').

esempio di automa minimo

Il linguaggio accettato dai due automi è lo stesso

$$ L_m(G) = \{ a^n \} \\ L_m(G') = \{ a^n \} $$

Anche il linguaggio generato è lo stesso

$$ L(G) = \{ a^n \} \\ L(G') = \{ a^n \} $$

Quindi, il comportamento degli automi è identico ma il secondo ha un minore numero di stati.

E' più efficiente perché utilizza meno risorse.

Come minimizzare un automa deterministico

Per rendere minimo un automa DFA si cercano gli stati indistinguibili e si sostituiscono con un solo stato rappresentativo per tutti.

Cos'è uno stato indistinguibile?

Due stati x e x' sono indistinguibili se sono raggiungibili con la stessa parola w.

$$ L(G|x) = L(G|x') \\ L_m(G|x) = L_m(G|x') $$

Gli stati indistinguibili sono una classe di equivalenza [x].

Come trovare gli stati indistinguibili? Individuare gli stati indistinguibili è facile se l'automa è semplice ma può diventare difficoltoso quando l'automa ha molti stati e transizioni. In questi casi è meglio usare l'algoritmo di Hopcroft. E' una procedura utile per trovare gli stati indistinguibili in un digrafo complesso. Una volta individuati gli stati indistinguibili posso rimuoverli con la seguente procedura di minimizzazione.

I passi per minimizzare un automa DFA

  1. Scelgo uno stato x' nella classe di equivalenza [x] per rappresentare tutti gli altri stati della classe [x]\{x'}
  2. Elimino le transizioni in uscita dalla classe di equivalenza [x]/{x'}
  3. Sposto le transizioni in entrata nella classe di equivalenza [x]/{x'} verso lo stato x'
  4. Rimuovo tutti gli stati nella classe di equivalenza [x]/{x'}. In questo modo resta soltanto lo stato x'
  5. Se tra gli stati rimossi nella classe [x]/{x'} c'è anche il stato iniziale, marco lo stato x' come nuovo stato iniziale.

Un esempio pratico

In questo automa

un automa da minimizzare

sono presenti due classi di equivalenza

$$ \{ a^n \: | \: n=pari \} = \{ x_0,x_2 \} $$

$$ \{ a^n \: | \: n=dispari \} = \{ x_1,x_3 \} $$

Nella prima classe scelgo x0 come rappresentativo di { x0,x2 }

Elimino le transizioni in uscita da x2 e rimando quelle in entrata da x2 verso x0. Poi elimino x2.

la minimizzazione

Nella seconda classe scelgo x1 come rappresentativo di { x1,x3 }

Elimino le transizioni in uscita da x3 e rimando quelle in entrata da x3 verso x1 (in questo caso non sono più). Poi elimino x3.

la minimizzazione dell'automa

Il nuovo grafo mostra l'automa minimo.

E' composto da due stati e due transizioni.

l'automa minimo

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base