Omdannelse af NFA til DFA
Vi viser, hvordan man omdanner en ikke-deterministisk automat til en deterministisk automat, hvormed vi beviser, at beregningskraften hos ikke-deterministiske og deterministiske automater er ækvivalent.
Grundidé
Vi har en ikke-deterministisk automat ⟨QN, ΣN, δN, q0, FN⟩ uden epsilon-overgange. Vi konstruerer en deterministisk automat ⟨QD, ΣD, δD, p0, FD⟩ således, at
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD | Q ∩ FN ≠ ∅}
Overgangsfunktionen δD definerer vi på følgende måde:
Hvad betyder det? En ikke-deterministisk automat kan være i flere tilstande på samme tid, så vi kan for eksempel komme i en situation, hvor vores ikke-deterministiske automat er i tilstandene {q0, q1}. Ved at læse det næste symbol, for eksempel 1, kan vi komme til mængden af tilstande {q0, q2, q3}. I den deterministiske version af den samme automat viser det sig ved, at vi laver to tilstande, navngiver dem {q0, q1} og {q0, q2, q3} og indfører en overgang mellem dem for symbolet 1. Formelt kommer vi fra den ene tilstand til den anden, men takket være navngivningen ved vi, at vi i den ikke-deterministiske automat ville være havnet i to, henholdsvis tre tilstande.
Eksempel
Vi ser på denne ikke-deterministiske automat:
For at konstruere den deterministiske automat skal vi først og fremmest konstruere en ny overgangsfunktion. Til det bruger vi en tabel, som vi skriver alle overgange ind i. I begyndelsen ser tabellen sådan ud:
I den venstre søjle vil vi til sidst i algoritmen have alle tilstande i den deterministiske automat. Den udfyldte tabel vil så bestemme overgangsfunktionen. Nu skriver vi i tabellen, hvilke tilstande vi kommer til, hvis vi er i tilstandene {q0} og inputsymbolerne er 0 og 1.
Fra tilstanden q0 går der for symbolet 0 kun en overgang til tilstanden q1, mens der for symbolet 1 går overgange til tilstandene q1 og q2. Nu tilføjer vi to nye tilstande til tabellen: {q1} og {q1, q2}. Hvorfor? I det øjeblik, vi i tabellen udfylder en mængde af tilstande, som vi ikke endnu har i den venstre søjle, tilføjer vi denne mængde af tilstande dertil.
og vi udfylder igen. Ved tilstanden {q1, q2} må vi ikke glemme at kontrollere begge tilstande, dvs. hvor vi kommer hen fra tilstanden q1 forenet med, hvor vi kommer hen fra tilstanden q2.
Vi fik nogle nye tilstande, som vi skal tilføje til tabellen:
…og vi udfylder igen overgangene:
Tilstandene {q0, q1, q3}, {q1} og {q1,q2} har vi allerede der, så vi tilføjer bare tilstanden {q0,q1,q2,q3}.
Vi tilføjede ikke flere nye tilstande, så tabellen er udfyldt. Nu mangler vi bare at tegne diagrammet. Tilstandene i den deterministiske automat står i den første søjle, overgangene for symbolerne 0 og 1 i de næste. Hver tilstand, der indeholder en accepttilstand fra den oprindelige automat, bliver også en accepttilstand i denne automat. Dvs. at hver tilstand, der indeholder q3, bliver en accepttilstand. Automaten kommer til at se sådan ud:
Vi kan vise, at automaten virker helt korrekt. Vi prøver at acceptere ordet 11001. I den deterministiske automat går vi ad vejen
og automaten ville acceptere ordet, fordi den sidste tilstand {q0, q1, q2, q3} er accepterende. I den ikke-deterministiske automat ville vi under simuleringen komme til de samme tilstande, dvs. vi ville begynde i tilstanden q0, og for symbolet 1 ville vi komme til tilstandene {q1, q2}. Det næste symbol 1 ville føre os til tilstandene {q0,q3} osv. for de følgende tilstande. Til sidst ville vi ende i alle tilstandene {q0, q1, q2, q3}, og automaten ville acceptere ordet.
Kilder
Kapitler: Endelig automat, Total automat, Ikke-deterministisk endelig automat, Simulering af en NFA, Omdannelse af NFA til DFA