Tidak dapat mengonversi dari NFA ke DFA


11

Saya memiliki masalah sederhana dalam membuat DFA yang menerima semua input yang dimulai dengan huruf ganda (aa, bb) atau diakhiri dengan huruf ganda (aa, bb), mengingat Σ={Sebuah,b} adalah set alfabet dari bahasa yang diberikan.

Saya mencoba menyelesaikannya secara tidak langsung dengan:

  1. Menghasilkan ekspresi reguler
  2. Membuat NFA-nya sesuai
  3. Menggunakan konstruksi powerset untuk menyimpulkan DFA
  4. Meminimalkan jumlah negara dalam DFA

Langkah 1: Ekspresi reguler untuk masalah yang diberikan adalah (di antara yang lainnya yang tak terhitung jumlahnya):

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

Langkah 2: NFA untuk ekspresi yang diberikan adalah:

NFA
(sumber: livefilestore.com )

Dalam bentuk Tabular, NFA adalah:

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)       -           -

Langkah 3: Konversikan menjadi DFA menggunakan konstruksi 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}

Langkah 4: Minimalkan DFA:

Saya telah mengubah K-> G, J-> F, I-> E terlebih dahulu. Dalam iterasi berikutnya, H-> D dan E-> F. Dengan demikian, tabel terakhir adalah:

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

Dan secara diagram terlihat seperti:

DFA akhir
(sumber: livefilestore.com )

... yang bukan DFA yang diwajibkan! Saya sudah tiga kali memeriksa hasil saya. Jadi, di mana saya salah?

catatan:

  • -> = keadaan awal
  • () = keadaan akhir

3
Ini adalah contoh yang bagus untuk pertanyaan dasar yang telah diajukan dengan baik, karena Anda memasukkan seluruh pemikiran Anda.
Raphael

Terasa luar biasa untuk dihargai, terima kasih! ^^
Anurag Kalia

Jawaban:


5

Anda baik-baik saja hingga langkah 3 (DFA) tetapi minimalisasi Anda salah.

Jelas bahwa DFA yang diperkecil tidak benar, karena baik input badan ab(yang tidak dalam bahasa asli, juga tidak diterima oleh DFA pada langkah 3) mengarah ke keadaan akhir E.

Melihat langkah-langkah minimisasi Anda, tampaknya Anda telah menyatukan status final dan non-final; misalnya J (final) -> F (belum final) dan I (final) -> E (belum final). Menggabungkan status akhir dengan kondisi tidak final mengubah bahasa yang diterima oleh automaton, yang mengarah pada penerimaan string yang salah seperti yang disebutkan di atas.


1
Oh Jadi, itulah yang menciptakan masalah di sini. Sekarang saya ingat, terakhir kali saya menggunakan metode ini, tidak ada kondisi penerimaan tertentu sama sekali dalam tabel!
Anurag Kalia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.