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 adalah set alfabet dari bahasa yang diberikan.
Saya mencoba menyelesaikannya secara tidak langsung dengan:
- Menghasilkan ekspresi reguler
- Membuat NFA-nya sesuai
- Menggunakan konstruksi powerset untuk menyimpulkan DFA
- 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:
(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:
(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
sumber
Jawaban:
Anda baik-baik saja hingga langkah 3 (DFA) tetapi minimalisasi Anda salah.
Jelas bahwa DFA yang diperkecil tidak benar, karena baik input
ba
danab
(yang tidak dalam bahasa asli, juga tidak diterima oleh DFA pada langkah 3) mengarah ke keadaan akhirE
.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.
sumber