Omvandling av NFA till DFA
Vi visar hur en icke-deterministisk automat kan omvandlas till en deterministisk automat. Därmed bevisar vi att icke-deterministiska och deterministiska automater har samma beräkningskraft.
Grundidén
Låt oss ta en icke-deterministisk automat ⟨QN, ΣN, δN, q0, FN⟩ utan epsilonövergångar. Vi bygger en deterministisk automat ⟨QD, ΣD, δD, p0, FD⟩ så att
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD ∣ Q ∩ FN ≠ ∅}
Övergångsfunktionen δD definierar vi så här:
Vad betyder det? En icke-deterministisk automat kan befinna sig i flera tillstånd samtidigt, så vi kan till exempel hamna i en situation där vår icke-deterministiska automat är i tillstånden {q0, q1}. När vi läser nästa symbol, till exempel 1, kan vi komma till mängden av tillstånd {q0, q2, q3}. I den deterministiska versionen av samma automat syns det genom att vi skapar två tillstånd, ger dem namnen {q0, q1} och {q0, q2, q3} och inför en övergång mellan dem för symbolen 1. Formellt går vi från ett tillstånd till ett annat, men tack vare namngivningen vet vi att vi i den icke-deterministiska automaten skulle ha hamnat i två respektive tre tillstånd.
Exempel
Låt oss ta den här icke-deterministiska automaten:
För att konstruera den deterministiska automaten behöver vi framför allt bygga en ny övergångsfunktion. Till det använder vi en tabell där vi skriver in alla övergångar. I början ser tabellen ut så här:
I den vänstra kolumnen kommer vi i slutet av algoritmen att ha alla tillstånd i den deterministiska automaten. Den ifyllda tabellen bestämmer sedan övergångsfunktionen. Nu skriver vi in i tabellen vilka tillstånd vi kommer till om vi befinner oss i tillståndet {q0} och indata är symbolerna 0 och 1.
Från q0 går för symbolen 0 en övergång bara till q1, medan den för symbolen 1 går till q1 och q2. Nu lägger vi till två nya tillstånd i tabellen: {q1} och {q1, q2}. Varför? Så fort vi fyller i en mängd av tillstånd i tabellen som ännu inte finns i den vänstra kolumnen lägger vi till den mängden där.
och fyller återigen i. För tillståndet {q1, q2} får vi inte glömma att kontrollera båda tillstånden, dvs. unionen av de tillstånd vi kommer till från q1 och de tillstånd vi kommer till från q2.
Vi fick flera nya tillstånd som vi måste lägga till i tabellen:
…och fyller återigen i övergångarna:
Tillstånden {q0, q1, q3}, {q1} och {q1,q2} har vi redan, så vi lägger bara till tillståndet {q0,q1,q2,q3}.
Vi lade inte till något nytt tillstånd, så tabellen är ifylld. Nu återstår bara att rita diagrammet. Den deterministiska automatens tillstånd står i den första kolumnen, och övergångarna för symbolerna 0 och 1 i de följande. Varje tillstånd som innehåller något sluttillstånd från den ursprungliga automaten blir också ett sluttillstånd i den här automaten. Det betyder att varje tillstånd som innehåller q3 blir ett sluttillstånd. Automaten ser ut så här:
Vi kan visa att automaten verkligen fungerar som den ska. Vi försöker acceptera ordet 11001. I den deterministiska automaten går vi längs vägen
och automaten skulle acceptera ordet, eftersom det sista tillståndet {q0, q1, q2, q3} är ett sluttillstånd. I den icke-deterministiska automaten skulle vi under simuleringen hamna i samma tillstånd, dvs. vi skulle börja i q0 och för symbolen 1 komma till tillstånden {q1, q2}. Nästa symbol 1 skulle ta oss till tillstånden {q0,q3} osv. för de följande tillstånden. Till slut skulle vi befinna oss i alla tillstånden {q0, q1, q2, q3} och automaten skulle acceptera ordet.
Källor
Kapitel: Ändlig automat, Total automat, Icke-deterministisk ändlig automat, Simulering av en icke-deterministisk automat, Omvandling av NFA till DFA