NVA átalakítása DVA-vá
Megmutatjuk, hogyan alakítható át egy nemdeterminisztikus automata determinisztikus automatává, ezzel bebizonyítva, hogy a nemdeterminisztikus és a determinisztikus automaták számítási ereje egyenértékű.
Alapgondolat
Legyen adott egy epszilon-átmenetek nélküli ⟨QN, ΣN, δN, q0, FN⟩ nemdeterminisztikus automata. A ⟨QD, ΣD, δD, p0, FD⟩ determinisztikus automatát úgy építjük fel, hogy
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD | Q ∩ FN ≠ ∅}
A δD átmeneti függvényt a következőképpen definiáljuk:
Mit jelent ez? A nemdeterminisztikus automata egyszerre több állapotban is lehet, így például előfordulhat, hogy a nemdeterminisztikus automatánk a {q0, q1} állapotokban van. A következő szimbólum, például az 1 beolvasásával a {q0, q2, q3} állapothalmazba juthatunk. Ugyanennek az automatának a determinisztikus változatában ez úgy jelenik meg, hogy létrehozunk két állapotot, elnevezzük őket a {q0, q1}, illetve a {q0, q2, q3} névvel, és az 1 szimbólumra átmenetet vezetünk köztük. Formálisan így az egyik állapotból a másikba jutunk, de az elnevezésnek köszönhetően tudni fogjuk, hogy a nemdeterminisztikus automatában két, illetve három állapotban lennénk.
Példa
Legyen adott ez a nemdeterminisztikus automata:
A determinisztikus automata megszerkesztéséhez mindenekelőtt az új átmeneti függvényt kell megalkotnunk. Ebben segít egy táblázat, amelybe beírjuk az összes átmenetet. Az elején a táblázat így néz ki:
A bal oldali oszlopban az algoritmus végén a determinisztikus automata összes állapota szerepelni fog. A kitöltött táblázat azután megadja az átmeneti függvényt. Most beírjuk a táblázatba, hogy mely állapotokba jutunk, ha a {q0} állapotban vagyunk, és a bemeneten a 0 és az 1 szimbólum áll.
A q0 állapotból a 0 szimbólumra csak a q1 állapotba vezet átmenet, míg az 1 szimbólumra a q1 és a q2 állapotba. Most felvesszük a táblázatba a két új állapotot: a {q1} és a {q1, q2} állapotot. Miért? Valahányszor a táblázatba beírunk egy olyan állapothalmazt, amely még nincs a bal oldali oszlopban, ezt az állapothalmazt oda is felvesszük.
és ismét kitöltjük. A {q1, q2} állapotnál nem szabad elfelejtenünk mindkét állapotot megvizsgálni, vagyis azt, hogy hová jutunk a q1 állapotból, egyesítve azzal, hogy hová jutunk a q2 állapotból.
Kaptunk néhány új állapotot, amelyeket fel kell vennünk a táblázatba:
…és megint kitöltjük az átmeneteket:
A {q0, q1, q3}, {q1} és {q1,q2} állapotok már szerepelnek a táblázatban, ezért csak a {q0,q1,q2,q3} állapotot vesszük fel.
Új állapotot már nem vettünk fel, így a táblázat ki van töltve. Most már csak megrajzoljuk a diagramot. A determinisztikus automata állapotai az első oszlopban vannak, a 0 és az 1 szimbólumhoz tartozó átmenetek a következő oszlopokban. Minden olyan állapot, amely tartalmaz valamilyen végállapotot az eredeti automatából, ebben az automatában is végállapot lesz. Vagyis minden, a q3 állapotot tartalmazó állapot végállapot lesz. Az automata így fog kinézni:
Megmutathatjuk, hogy az automata valóban helyesen működik. Próbáljuk elfogadtatni vele a 11001 szót. A determinisztikus automatában ezen az úton megyünk végig
és az automata elfogadná a szót, mert az utolsó állapot, a {q0, q1, q2, q3} végállapot. A nemdeterminisztikus automatában a szimuláció során ugyanezekbe az állapotokba jutnánk, vagyis a q0 állapotban kezdenénk, és az 1 szimbólumra a {q1, q2} állapotokba jutnánk. A következő 1 szimbólum a {q0,q3} állapotokba vinne, és így tovább a további állapotokra. Végül az összes {q0, q1, q2, q3} állapotban kötnénk ki, és az automata elfogadná a szót.
Források
Fejezetek: Véges automata, Teljes automata, Nemdeterminisztikus véges automata, Nemdeterminisztikus automata szimulációja, NVA átalakítása DVA-vá