✖

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:

∀Q∈QD,a∈ΣD:δD(Q,a)=⋃q∈QδN(q,a)

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:

tillstånd/symbol01{q0}

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.

tillstånd/symbol01{q0}{q1}{q1,q2}

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.

tillstånd/symbol01{q0}{q1}{q1,q2}{q1}{q1,q2}

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.

tillstånd/symbol01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}

Vi fick flera nya tillstånd som vi måste lägga till i tabellen:

tillstånd/symbol01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q3}

…och fyller återigen i övergångarna:

tillstånd/symbol01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q1,q3}{q0,q1,q2,q3}{q0,q3}{q1}{q1,q2}

Tillstånden {q0, q1, q3}, {q1} och {q1,q2} har vi redan, så vi lägger bara till tillståndet {q0,q1,q2,q3}.

tillstånd/symbol01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q1,q3}{q0,q1,q2,q3}{q0,q3}{q1}{q1,q2}{q0,q1,q2,q3}{q0,q1,q3}{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

q0→1q1,q2→1q0,q3→0q1→0q0,q1,q3→1q0,q1,q2,q3

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