Penukaran NFA kepada DFA
Kita akan melihat cara menukarkan automaton tak berketentuan (NFA) kepada automaton berketentuan (DFA). Dengan cara ini kita membuktikan bahawa kuasa pengiraan automaton tak berketentuan dan automaton berketentuan sama.
Idea asas
Katakan kita mempunyai automaton tak berketentuan ⟨QN, ΣN, δN, q0, FN⟩ tanpa peralihan epsilon. Kita membina automaton berketentuan ⟨QD, ΣD, δD, p0, FD⟩ dengan
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD | Q ∩ FN ≠ ∅}
Fungsi peralihan δD ditakrifkan seperti berikut:
Apakah maksudnya? Automaton tak berketentuan boleh berada dalam beberapa keadaan serentak, jadi kita mungkin sampai ke situasi apabila automaton tak berketentuan kita berada dalam keadaan {q0, q1}. Selepas membaca simbol seterusnya, misalnya 1, kita mungkin sampai ke set keadaan {q0, q2, q3}. Dalam versi berketentuan bagi automaton yang sama, hal ini diwakili dengan membina dua keadaan, menamakannya {q0, q1} dan {q0, q2, q3}, dan menambahkan peralihan bagi simbol 1 di antara kedua-duanya. Secara formal kita beralih dari satu keadaan ke satu keadaan lain, tetapi berkat nama itu kita tahu bahawa dalam automaton tak berketentuan kita akan berada dalam dua dan tiga keadaan masing-masing.
Contoh
Katakan kita mempunyai automaton tak berketentuan berikut:
Untuk membina automaton berketentuan, perkara utama ialah membina fungsi peralihan baharu. Kita dibantu oleh jadual yang mencatat semua peralihan. Pada mulanya jadual kelihatan seperti berikut:
Pada akhir algoritma, lajur kiri akan mengandungi semua keadaan automaton berketentuan. Jadual yang lengkap pula menentukan fungsi peralihan. Sekarang kita mencatat dalam jadual keadaan yang dicapai jika kita berada dalam keadaan {q0} dan input ialah simbol 0 dan 1.
Dari keadaan q0, bagi simbol 0 terdapat peralihan ke keadaan q1 sahaja, manakala bagi simbol 1 terdapat peralihan ke keadaan q1 dan q2. Sekarang kita menambahkan dua keadaan baharu ke dalam jadual: {q1} dan {q1, q2}. Mengapa? Setiap kali kita mencatat dalam jadual suatu set keadaan yang belum ada dalam lajur kiri, kita menambahkan set keadaan itu ke lajur kiri.
dan kita isi jadual sekali lagi. Bagi keadaan {q1, q2}, jangan lupa menyemak kedua-dua keadaan, iaitu kesatuan antara keadaan yang dicapai dari q1 dengan keadaan yang dicapai dari q2.
Kita memperoleh beberapa keadaan baharu yang perlu ditambahkan ke dalam jadual:
…dan kita lengkapkan peralihan sekali lagi:
Keadaan {q0, q1, q3}, {q1} dan {q1,q2} sudah ada dalam jadual, jadi kita hanya menambahkan keadaan {q0,q1,q2,q3}.
Tiada keadaan baharu yang ditambahkan, jadi jadual sudah lengkap. Sekarang kita hanya perlu melukis gambar rajah. Keadaan automaton berketentuan berada dalam lajur pertama, manakala peralihan bagi simbol 0 dan 1 berada dalam lajur yang lain. Setiap keadaan yang mengandungi suatu keadaan akhir daripada automaton asal juga menjadi keadaan akhir dalam automaton ini. Maksudnya, setiap keadaan yang mengandungi q3 ialah keadaan akhir. Automaton itu kelihatan seperti berikut:
Kita boleh menunjukkan bahawa automaton ini benar-benar berfungsi dengan betul. Mari kita cuba menerima rentetan 11001. Dalam automaton berketentuan, kita mengikut laluan
dan automaton akan menerima rentetan itu kerana keadaan terakhir {q0, q1, q2, q3} ialah keadaan akhir. Dalam automaton tak berketentuan, semasa simulasi kita akan sampai ke keadaan yang sama: kita bermula pada keadaan q0, dan bagi simbol 1 kita sampai ke keadaan {q1, q2}. Simbol 1 yang seterusnya membawa kita ke keadaan {q0,q3}, dan begitulah seterusnya. Akhirnya kita berada dalam semua keadaan {q0, q1, q2, q3} dan automaton menerima rentetan itu.
Sumber
Kandungan: Automaton terhingga, Automaton lengkap, Automaton terhingga tak berketentuan, Simulasi automaton tak berketentuan, Penukaran NFA kepada DFA