Automaták minimalizálása
Az automata minimalizálásán azt értjük, hogy megkeressük azt az ekvivalens automatát, amelynek a lehető legkevesebb állapota van. Még az az automata is egyszerűsíthető tovább, amelyben nincs felesleges állapot.
Példa
Vegyük ezt az automatát:
Az automata csak a 01 és a 11 szót fogadja el. Ugyanakkor nyilvánvaló, hogy létezik egyszerűbb, három állapotú automata, amely ugyanezt a nyelvet fogadja el. A q1 és a q2 állapot összevonható egyetlen új, {q1, q2} állapottá, a q1 vagy q2 állapotba vezető átmenetek az új állapotba fognak vezetni, és ugyanez igaz a q1 és q2 állapotból induló átmenetekre. Ezt az automatát kapjuk:
Ez az automata nyilvánvalóan ugyanazt a nyelvet fogadja el, mint az előző, ugyanakkor kevesebb állapota van.
Az állapotok ekvivalenciája
Legyen adott egy A = ⟨Q, Σ, δ, q0, F⟩ automata. A q ∈ Q állapot nyelvét, amelyet L(q)-val jelölünk, így definiáljuk:
Vagyis az A automata kezdőállapotát a q0 állapotról a q állapotra változtatjuk, és kiszámoljuk az így kapott automata által elfogadott nyelvet. Más szóval az L(q) nyelvben azok a w szavak vannak, amelyekre az A automatában a q állapotból a w szóval az automata valamelyik végállapotába jutunk. Ha visszatérünk az előző automatához, akkor L(q1) = {1}.
Azt mondjuk, hogy két különböző állapot, a q1 és a q2 ekvivalens, ha fennáll
Mit jelent ez? Ha a q1, q2 állapotok ekvivalensek, akkor ha bármelyiküket tesszük meg kezdőállapotnak, ugyanazt a nyelvet fogják generálni. Más szóval: ha az automata a ⟨q1, w⟩ és a ⟨q2, w⟩ konfigurációba kerül, akkor mindkét esetben el kell fogadnia, vagy mindkét esetben el kell utasítania a szót.
Ha visszatérünk az előző automatához: a q1 és a q2 állapot ekvivalens, mert ha a q1 állapotban vagyunk, akkor a bemeneti szót már csak akkor fogadhatjuk el, ha a szó el nem olvasott része 1. Ugyanez igaz, ha a q2 állapotban vagyunk.
Az automata minimalizálásakor tehát az a lényeg, hogy megkeressük az ekvivalens állapotokat, és ezeket az állapotokat úgy távolítsuk el, hogy egyetlen új állapottá vonjuk össze őket, ugyanúgy, ahogy a fenti példában tettük.
Hogyan találjuk meg az ekvivalens állapotokat
Mely állapotok biztosan nem lesznek ekvivalensek? Ha egy végállapotot és egy nem végállapotot veszünk, azok biztosan nem ekvivalensek, mert a végállapot nyelve különbözik a nem végállapot nyelvétől – a végállapot biztosan elfogadja az ε szót, a nem végállapot nem. Az eljárást rögtön egy példán mutatjuk be. Legyen tehát adott ez az automata:
Azzal kezdjük, hogy létrehozunk két állapothalmazt
Most elkészítjük az átmenetek táblázatát, és megőrizzük az S1 és S2 csoportokra vonatkozó információt:
Most úgy módosítjuk a táblázatot, hogy ne közvetlenül azt írjuk bele, hogy az adott szimbólumra mely állapotokba jutunk, hanem csak azt a csoportot jegyezzük fel, amelybe átmegyünk. Például a q3 állapotból a 0 szimbólumra a q5 állapotba jutunk, amely az S2 csoportban van. A q5 helyett tehát a táblázatba S2-t írunk:
Most tovább osztjuk mindkét csoportot. Mindig azokat az állapotokat tesszük egy csoportba, amelyek minden szimbólumra ugyanazokba a csoportokba mennek át. Például a q3 és a q6 állapot nem lesz ugyanabban a csoportban, mert sem a 0, sem az 1 szimbólumra nem ugyanabba a csoportba mennek. Ezzel szemben a q1 és a q2 állapot ugyanabban a csoportban lesz, mert egyiküknek sincs átmenete a 0 szimbólumra, és mindketten az 1 szimbólumra az S1 csoportba mennek. Új csoportokat hozunk létre:
Minden csoportban ugyanazok az átmenetek vannak. Az újonnan keletkezett csoportokat megjelöljük, és ismét megállapítjuk, hogy az állapotokból ezek közül az új csoportok közül melyikbe vezetnek az átmenetek:
Most a csoportok újabb felosztása következne. Látjuk azonban, hogy további osztást már nem végezhetünk, ugyanezeket a csoportokat kapnánk – mert a q1 és a q2 állapot átmenetei ugyan a csoportokon belül megegyeznek, de már ugyanabban a csoportban vannak, és az S4 csoportban nincs más állapot. Az ekvivalens állapotok keresésének algoritmusa véget ért. Minden csoportból elég egy állapotot kiválasztanunk, a többit töröljük, és az összes átmenet, amely a törölt állapotokba vezetett, abba az egy állapotba fog vezetni, amelyet kiválasztottunk.
Választhatjuk például, hogy az új automatánk állapotai a q3, q6, q0, q1, q4 legyenek, a q2 és q5 állapotot pedig töröljük. Minden átmenet, amely a q2 állapotba vezetett, most a q1 állapotba fog vezetni, és minden átmenet, amely a q5 állapotba vezetett, a q4 állapotba:
Az automata minimalizálásának menete
- Eltávolítjuk az elérhetetlen állapotokat,
- eltávolítjuk a felesleges állapotokat,
- eltávolítjuk az ekvivalens állapotokat.
Források
Fejezetek: Elérhetetlen állapotok, Felesleges állapotok, Automaták minimalizálása