✖

Minimizzazione di un automa

Per minimizzazione di un automa intendiamo la ricerca di un automa equivalente che contenga il minor numero possibile di stati. Anche un automa privo di stati inutili può essere semplificato ulteriormente.

Esempio

Prendiamo questo automa:

L’automa accetta solo le parole 01 e 11. Eppure è evidente che esiste un automa più semplice con tre stati che accetta lo stesso linguaggio. Gli stati q1 e q2 si possono fondere in un unico nuovo stato {q1, q2}; le transizioni che entravano negli stati q1 o q2 entreranno nel nuovo stato, e lo stesso vale per le transizioni uscenti da q1 e q2. Otteniamo questo automa:

Questo automa accetta evidentemente lo stesso linguaggio del precedente e ha meno stati.

Equivalenza degli stati

Sia A = ⟨Q, Σ, δ, q0, F⟩ un automa. Definiamo il linguaggio dello stato q ∈ Q, indicato con L(q), come

L(q)=L(⟨Q,Σ,δ,q,F⟩)

Cioè cambiamo lo stato iniziale dell’automa A da q0 a q e calcoliamo il linguaggio accettato da questo automa. In altre parole, nel linguaggio L(q) ci sono tutte le parole w tali che nell’automa A dallo stato q con la parola w si arriva in uno stato finale. Tornando all’automa precedente, L(q1) = {1}.

Diciamo che due stati distinti q1 e q2 sono equivalenti se vale

L(q1)=L(q2)

Che cosa significa? Se gli stati q1, q2 sono equivalenti, se li rendiamo stati iniziali dell’automa, generano lo stesso linguaggio. In altre parole: se l’automa arriva nella configurazione ⟨q1, w⟩ e ⟨q2, w⟩, in entrambi i casi deve accettare oppure in entrambi i casi rifiutare.

Tornando all’automa precedente: gli stati q1 e q2 sono equivalenti, perché se siamo nello stato q1 possiamo ancora accettare la parola in ingresso solo se la parte non letta è uguale a 1. Lo stesso vale se siamo nello stato q2.

Minimizzare un automa significa quindi trovare gli stati equivalenti ed eliminarli fondendoli in un unico nuovo stato, proprio come abbiamo fatto nell’esempio precedente.

Come trovare gli stati equivalenti

Quali stati sicuramente non sono equivalenti? Uno stato finale e uno non finale sicuramente non sono equivalenti, perché il linguaggio di uno stato finale è diverso da quello di uno stato non finale: uno stato finale accetta di sicuro la parola ε, uno non finale no. Mostriamo subito il procedimento su un esempio. Prendiamo questo automa:

Cominciamo creando due insiemi di stati

S1=F={q3,q6},S2=Q∖F={q0,q1,q2,q4,q5}.

Ora creiamo la tabella delle transizioni e conserviamo l’informazione sui gruppi S1 e S2:

gruppostato01S1q3q5q4q6——S2q0q1q2q1—q3q2—q3q4q6—q5q6—

Ora modifichiamo la tabella: invece di scrivere direttamente in quali stati si va per un dato simbolo, annotiamo soltanto il gruppo in cui si arriva. Ad esempio dallo stato q3 con 0 si arriva nello stato q5, che è nel gruppo S2. Al posto di q5 scriviamo quindi nella tabella S2:

gruppostato01S1q3S2S2q6——S2q0S2S2q1—S1q2—S1q4S1—q5S1—

Ora dividiamo ulteriormente entrambi i gruppi. Mettiamo nello stesso gruppo gli stati che per tutti i simboli vanno negli stessi gruppi. Ad esempio gli stati q3 e q6 non staranno nello stesso gruppo, perché né per 0 né per 1 vanno nello stesso gruppo. Al contrario, gli stati q1 e q2 staranno nello stesso gruppo, perché nessuno dei due ha una transizione per 0 ed entrambi per 1 vanno nel gruppo S1. Creiamo così nuovi gruppi:

gruppostato01q3S2S2q6——q0S2S2q1—S1q2—S1q4S1—q5S1—

In ogni gruppo abbiamo le stesse transizioni. Etichettiamo i gruppi appena ottenuti e verifichiamo di nuovo verso quale di questi nuovi gruppi vanno gli stati:

gruppostato01S1q3S5S5S2q6——S3q0S4S4S4q1—S1q2—S1S5q4S2—q5S2—

A questo punto proviamo a dividere di nuovo i gruppi. Vediamo però che non possiamo fare nessun’altra divisione: otterremmo gli stessi gruppi, perché gli stati q1 e q2 hanno sì le stesse transizioni rispetto ai gruppi, ma sono già nello stesso gruppo e nel gruppo S4 non c’è nessun altro stato. L’algoritmo di ricerca degli stati equivalenti è terminato. Da ogni gruppo ci basta scegliere uno stato ed eliminare gli altri; tutte le transizioni che portavano negli stati eliminati porteranno ora nell’unico stato che abbiamo scelto.

Possiamo scegliere, ad esempio, che il nostro nuovo automa abbia gli stati q3, q6, q0, q1, q4 ed eliminare gli stati q2 e q5. Tutte le transizioni che portavano in q2 ora porteranno in q1 e tutte quelle che portavano in q5 porteranno in q4:

Procedimento di minimizzazione di un automa

  1. Eliminiamo gli stati irraggiungibili,
  2. eliminiamo gli stati inutili,
  3. eliminiamo gli stati equivalenti.

Fonti

Capitoli: Stati irraggiungibili, Stati inutili, Minimizzazione di un automa