Minimizzazione DFA
Minimizzazione di DFA utilizzando il teorema di Myphill-Nerode
Algoritmo
Input - DFA
Output - DFA ridotto a icona
Step 1- Disegna una tabella per tutte le coppie di stati (Q i , Q j ) non necessariamente collegati direttamente [Tutti sono inizialmente non contrassegnati]
Step 2- Considera ogni coppia di stati (Q i , Q j ) nel DFA dove Q i ∈ F e Q j ∉ F o viceversa e contrassegnale. [Qui F è l'insieme degli stati finali]
Step 3 - Ripeti questo passaggio fino a quando non sarà più possibile contrassegnare gli stati -
Se è presente una coppia non contrassegnata (Q i , Q j ), contrassegnala se la coppia {δ (Q i , A), δ (Q i , A)} è contrassegnata per qualche alfabeto di input.
Step 4- Combina tutte le coppie non contrassegnate (Q i , Q j ) e trasformale in un unico stato nel DFA ridotto.
Esempio
Utilizziamo l'algoritmo 2 per ridurre al minimo il DFA mostrato di seguito.
Step 1 - Disegniamo una tabella per tutte le coppie di stati.
un | b | c | d | e | f | |
un | ||||||
b | ||||||
c | ||||||
d | ||||||
e | ||||||
f |
Step 2 - Contrassegniamo le coppie di stato.
un | b | c | d | e | f | |
un | ||||||
b | ||||||
c | ✔ | ✔ | ||||
d | ✔ | ✔ | ||||
e | ✔ | ✔ | ||||
f | ✔ | ✔ | ✔ |
Step 3- Cercheremo di contrassegnare le coppie di stato, con segno di spunta di colore verde, in modo transitorio. Se inseriamo 1 per indicare "a" e "f", andrà rispettivamente nello stato "c" e "f". (c, f) è già contrassegnato, quindi contrassegneremo la coppia (a, f). Ora, inseriamo 1 per indicare "b" e "f"; andrà rispettivamente allo stato "d" e "f". (d, f) è già contrassegnato, quindi contrassegneremo la coppia (b, f).
un | b | c | d | e | f | |
un | ||||||
b | ||||||
c | ✔ | ✔ | ||||
d | ✔ | ✔ | ||||
e | ✔ | ✔ | ||||
f | ✔ | ✔ | ✔ | ✔ | ✔ |
Dopo il passaggio 3, abbiamo combinazioni di stati {a, b} {c, d} {c, e} {d, e} che non sono contrassegnate.
Possiamo ricombinare {c, d} {c, e} {d, e} in {c, d, e}
Quindi abbiamo due stati combinati come - {a, b} e {c, d, e}
Quindi il DFA finale ridotto a icona conterrà tre stati {f}, {a, b} e {c, d, e}
Minimizzazione di DFA utilizzando il teorema di equivalenza
Se X e Y sono due stati in un DFA, possiamo combinare questi due stati in {X, Y} se non sono distinguibili. Due stati sono distinguibili, se c'è almeno una stringa S, tale che uno tra δ (X, S) e δ (Y, S) sia accettabile e un altro non accettante. Quindi, un DFA è minimo se e solo se tutti gli stati sono distinguibili.
Algoritmo 3
Step 1 - Tutti gli stati Q sono divisi in due partizioni - final states e non-final states e sono indicati da P0. Tutti gli stati in una partizione sono 0 ° equivalente. Prendi un contatorek e inizializzalo con 0.
Step 2- Incrementa k di 1. Per ogni partizione in P k , dividi gli stati in P k in due partizioni se sono k-distinguibili. Due stati all'interno di questa partizione X e Y sono k-distinguibili se c'è un inputS tale che δ(X, S) e δ(Y, S) sono (k-1) -distinguibili.
Step 3- Se P k ≠ P k-1 , ripetere il passaggio 2, altrimenti andare al passaggio 4.
Step 4- Combina k- esimi set equivalenti e rendili i nuovi stati del DFA ridotto.
Esempio
Consideriamo il seguente DFA:
q | δ (q, 0) | δ (q, 1) |
---|---|---|
un | b | c |
b | un | d |
c | e | f |
d | e | f |
e | e | f |
f | f | f |
Applichiamo l'algoritmo di cui sopra al DFA precedente -
- P 0 = {(c, d, e), (a, b, f)}
- P 1 = {(c, d, e), (a, b), (f)}
- P 2 = {(c, d, e), (a, b), (f)}
Quindi, P 1 = P 2 .
Ci sono tre stati nel DFA ridotto. Il DFA ridotto è il seguente:
Q | δ (q, 0) | δ (q, 1) |
---|---|---|
(a, b) | (a, b) | (c, d, e) |
(c, d, e) | (c, d, e) | (f) |
(f) | (f) | (f) |