logo

Konwersja z NFA do DFA

W tej sekcji omówimy metodę konwersji NFA na jego odpowiednik DFA. W NFA, gdy do bieżącego stanu zostanie podany określony sygnał wejściowy, maszyna przechodzi do wielu stanów. Może mieć zero, jeden lub więcej niż jeden ruch na danym symbolu wejściowym. Z drugiej strony w DFA, gdy określone dane wejściowe zostaną podane do bieżącego stanu, maszyna przechodzi tylko do jednego stanu. DFA ma tylko jeden ruch na danym symbolu wejściowym.

Niech, M = (Q, ∑, δ, q0, F) jest NFA, które akceptuje język L(M). Powinien istnieć równoważny DFA oznaczony przez M' = (Q', ∑', q0', δ', F') taki, że L(M) = L(M').

Kroki konwersji NFA na DFA:

Krok 1: Początkowo Q' = ϕ

Krok 2: Dodaj q0 NFA do Q'. Następnie znajdź przejścia z tego stanu początkowego.

Krok 3: W Q' znajdź możliwy zbiór stanów dla każdego symbolu wejściowego. Jeżeli tego zbioru stanów nie ma w Q', to dodaj go do Q'.

Krok 4: W DFA stanem końcowym będą wszystkie stany zawierające F (stany końcowe NFA)

Przykład 1:

Konwertuj podany NFA na DFA.

Konwersja z NFA do DFA

Rozwiązanie: Dla danego diagramu przejść najpierw skonstruujemy tabelę przejść.

Państwo 0 1
→q0 q0 pytanie 1
pytanie 1 {q1, q2} pytanie 1
*q2 q2 {q1, q2}

Otrzymamy teraz przejście δ' dla stanu q0.

 δ'([q0], 0) = [q0] δ'([q0], 1) = [q1] 

Przejście δ' dla stanu q1 uzyskuje się jako:

Numer 1 milion
 δ'([q1], 0) = [q1, q2] (new state generated) δ'([q1], 1) = [q1] 

Przejście δ' dla stanu q2 uzyskuje się jako:

 δ'([q2], 0) = [q2] δ'([q2], 1) = [q1, q2] 

Otrzymamy teraz przejście δ' na [q1, q2].

 δ'([q1, q2], 0) = δ(q1, 0) ∪ δ(q2, 0) = {q1, q2} ∪ {q2} = [q1, q2] δ'([q1, q2], 1) = δ(q1, 1) ∪ δ(q2, 1) = {q1} ∪ {q1, q2} = {q1, q2} = [q1, q2] 

Stan [q1, q2] jest także stanem końcowym, ponieważ zawiera stan końcowy q2. Tabela przejściowa dla skonstruowanego DFA będzie wyglądać następująco:

Państwo 0 1
→[q0] [q0] [q1]
[q1] [q1, q2] [q1]
*[q2] [q2] [q1, q2]
*[q1, q2] [q1, q2] [q1, q2]

Schemat przejścia będzie wyglądał następująco:

Konwersja z NFA do DFA

Stan q2 można wyeliminować, ponieważ q2 jest stanem nieosiągalnym.

Przykład 2:

Konwertuj podany NFA na DFA.

Konwersja z NFA do DFA

Rozwiązanie: Dla danego diagramu przejść najpierw skonstruujemy tabelę przejść.

Państwo 0 1
→q0 {q0, q1} {q1}
*q1 ϕ {q0, q1}

Otrzymamy teraz przejście δ' dla stanu q0.

 δ'([q0], 0) = {q0, q1} = [q0, q1] (new state generated) δ'([q0], 1) = {q1} = [q1] 

Przejście δ' dla stanu q1 uzyskuje się jako:

 δ'([q1], 0) = ϕ δ'([q1], 1) = [q0, q1] 

Otrzymamy teraz przejście δ' na [q0, q1].

 δ'([q0, q1], 0) = δ(q0, 0) ∪ δ(q1, 0) = {q0, q1} ∪ ϕ = {q0, q1} = [q0, q1] 

Podobnie,

przykładowy JavaScript
 δ'([q0, q1], 1) = δ(q0, 1) ∪ δ(q1, 1) = {q1} ∪ {q0, q1} = {q0, q1} = [q0, q1] 

Tak jak w danym NFA, q1 jest stanem końcowym, to w DFA gdziekolwiek istnieje q1, stan ten staje się stanem końcowym. Stąd w DFA stanami końcowymi są [q1] i [q0, q1]. Zatem zbiór stanów końcowych F = {[q1], [q0, q1]}.

Tabela przejściowa dla skonstruowanego DFA będzie wyglądać następująco:

Państwo 0 1
→[q0] [q0, q1] [q1]
*[q1] ϕ [q0, q1]
*[q0, q1] [q0, q1] [q0, q1]

Schemat przejścia będzie wyglądał następująco:

Konwersja z NFA do DFA

Nawet my możemy zmienić nazwę stanów DFA.

Przypuszczać

 A = [q0] B = [q1] C = [q0, q1] 

Dzięki tym nowym nazwom DFA będzie wyglądać następująco:

Konwersja z NFA do DFA