Nie można przekonwertować z NFA na DFA


11

Mam prosty problem z utworzeniem DFA, który akceptuje wszystkie dane wejściowe zaczynające się od podwójnych liter (aa, bb) lub kończące się na podwójnych literach (aa, bb), biorąc pod uwagę, że jest zestawem alfabetu dany język.Σ={a,b}

Próbowałem rozwiązać to w sposób okrężny:

  1. Generowanie wyrażenia regularnego
  2. Tworzenie odpowiedniego NFA
  3. Wykorzystanie konstrukcji zestawu zasilającego do ustalenia DFA
  4. Minimalizowanie liczby stanów w DFA

Krok 1: Wyrażenie regularne dla danego problemu to (wśród niezliczonych innych):

((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))

Krok 2: NFA dla danego wyrażenia to:

NFA
(źródło: livefilestore.com )

W formie tabelarycznej NFA to:

State    Input:a     Input:b
->1        2,5         3,5
  2        4           -
  3        -           4
 (4)       4           4
  5        5,7         5,6
  6        -           8
  7        8           -
 (8)       -           -

Krok 3: Przekształć w DFA za pomocą konstrukcji powerset:

Symbol, State       +   Symbol, State (Input:a) +   Symbol, State (Input:b)
   ->A, {1}         |        B, {2,5}           |        C, {3,5}
     B, {2,5}       |        D, {4,5,7}         |        E, {5,6}
     C, {3,5}       |        F, {5,7}           |        G, {4,5,6}
   (D), {4,5,7}     |        H, {4,5,7,8}       |        G, {4,5,6}
     E, {5,6}       |        F, {5,7}           |        I, {5,6,8}
     F, {5,7}       |        J, {5,7,8}         |        E, {5,6}
   (G), {4,5,6}     |        D, {4,5,7}         |        K, {4,5,6,8}
   (H), {4,5,7,8}   |        H, {4,5,7,8}       |        G, {4,5,6}
   (I), {5,6,8}     |        F, {5,7}           |        I, {5,6,8}
   (J), {5,7,8}     |        J, {5,7,8}         |        E, {5,6}
   (K), {4,5,6,8}   +        D, {4,5,7}         +        K, {4,5,6,8}

Krok 4: Zminimalizuj DFA:

Najpierw zmieniłem K-> G, J-> F, I-> E. W następnej iteracji H-> D i E-> F. Tak więc stół finałowy to:

  State    +   Input:a     +   Input:b
   ->A     |      B        |      C
     B     |      D        |      E
     C     |      E        |      D
    (D)    |      D        |      D
    (E)    |      E        |      E

I schematycznie wygląda to tak:

Ostateczne DFA
(źródło: livefilestore.com )

... co nie jest wymaganym DFA! Potrójnie sprawdziłem swój wynik. Więc gdzie popełniłem błąd?

Uwaga:

  • -> = stan początkowy
  • () = stan końcowy

3
To świetny przykład na postawione dobrze podstawowe pytanie, ponieważ zawierasz cały swój tok myślenia.
Raphael

Czuję się dobrze, gdy zostaniesz doceniony, dzięki! ^^
Anurag Kalia,

Odpowiedzi:


5

W porządku do kroku 3 (DFA), ale minimalizacja jest nieprawidłowa.

Oczywiste jest, że zminimalizowany DFA jest niewłaściwy, ponieważ zarówno dane wejściowe, jak bai ab(które nie są w oryginalnym języku, ani nie są akceptowane przez DFA w kroku 3) prowadzą do stanu końcowego E.

Patrząc na kroki minimalizacji, wydaje się, że ujednolicono stany końcowe i nie-końcowe; na przykład J (finał) -> F (nie finał) i I (finał) -> E (nie finał). Połączenie stanu końcowego ze stanem nie-końcowym zmienia język akceptowany przez automat, co prowadzi do akceptacji niepoprawnych ciągów, jak wspomniano powyżej.


1
O. To właśnie tworzy tutaj problem. Teraz, gdy pamiętam, kiedy ostatnio użyłem tej metody, w tabeli nie było żadnych konkretnych stanów akceptacji!
Anurag Kalia,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.