Penukaran automaton kepada ungkapan nalar
Kita akan melihat cara menukarkan sebarang automaton terhingga kepada ungkapan nalar.
Penerangan algoritma
Input ialah suatu NFA A. Pertama sekali, kita menukarkannya kepada GNFA. Dalam fasa kedua, pada setiap langkah kita menghapuskan satu keadaan, membetulkan fungsi peralihan dengan sewajarnya, dan mengulanginya sehingga hanya tinggal dua keadaan — keadaan awal dan keadaan akhir. Di antara kedua-duanya terdapat satu anak panah yang berlabel ungkapan nalar, dan ungkapan inilah hasil keseluruhan algoritma. Jadi, keseluruhan kaedah ini terutamanya terdiri daripada penghapusan keadaan dan pembetulan automaton selepas itu supaya kita memperoleh automaton yang setara.
Penghapusan satu keadaan
Cara menghapuskan satu keadaan boleh digambarkan dengan contoh mudah. Andaikan sebahagian daripada automaton kita kelihatan seperti berikut:
dengan Ri ialah suatu ungkapan nalar. Bagaimanakah rupa automaton itu jika kita menghapuskan keadaan qr? Bayangkan kita berada pada keadaan qi dan bertanya: apakah semua rentetan yang boleh kita jana pada bahagian ini? Jika kita pergi dari keadaan qi terus ke keadaan qj, rentetan itu ialah semua rentetan yang sepadan dengan ungkapan nalar R4.
Namun, jika kita pergi ke keadaan qr, kita boleh menjana rentetan berbentuk R1. Pada keadaan qr kita boleh berulang bagi ungkapan nalar R2, jadi sebenarnya kita boleh menjana rentetan berbentuk
Sekarang kita tahu bahawa bahagian automaton ini boleh menghasilkan rentetan berbentuk R4 atau berbentuk
Kini kita boleh menghapuskan keadaan qr dengan mudah, meninggalkan dua keadaan qi dan qj sahaja, dan menulis ungkapan nalar yang baru dikira menggantikan R4:
Kaedah ini dilakukan bagi setiap anak panah dari setiap keadaan qi ke suatu keadaan qj, termasuk gelung, iaitu termasuk kes qi = qj.
Selepas menghapuskan satu keadaan, kita memperoleh automaton yang setara — automaton yang mengenal pasti bahasa yang sama.
Algoritma lengkap
Input ialah NFA A = ⟨Q, Σ, δ, q0, F⟩.
- Tukarkan NFA A kepada GNFA Z = ⟨Q′, Σ, δ′, q0′, qf′⟩. Seterusnya huruf k menandakan bilangan keadaan dalam Z.
- Jika k = 2, algoritma berakhir, dan ungkapan nalar yang terhasil berada pada anak panah antara keadaan awal dengan keadaan akhir.
- Jika k>2, pilih sebarang keadaan qr yang berbeza daripada keadaan awal dan keadaan akhir, iaitu qr ≠ q0′ dan qr ≠ qf′. Kemudian bina GNFA baharu Z′ = ⟨Q′′, Σ, δ′′,q0′,qf′⟩ dengan
dan bagi semua qi ∈ Q′′ ∖ {qf′} dan semua qj ∈ Q′′ ∖ {q0′}, katakan dengan R1 = δ′(qi,qr), R2 = δ′(qr,qr), R3 = δ′(qr, qj), R4 = δ′(qi, qj). Kemudian teruskan dengan langkah 2.
Contoh
Katakan input ialah automaton terhingga berikut:
Pertama sekali, kita menukarkannya kepada GNFA (peralihan ∅ yang tidak perlu tidak dilukis):
Sekarang kita menggunakan bahagian kedua algoritma dan menghapuskan satu nod. Kita mulakan dengan nod q2. Kita menghapuskan nod q2 dan menambahkan peralihan dari keadaan q1 ke keadaan qf. Peralihan ini dilabelkan b(a|b)∗ kerana dari nod q1 kita sampai ke keadaan q2 bagi rentetan berbentuk b, kemudian kita boleh berulang bagi a|b, yang memberikan (a|b)∗, dan akhirnya kita beralih ke qf melalui peraturan epsilon. Di sini b(a|b)∗ϵ = b(a|b)∗. Kita memperoleh automaton:
Yang tinggal ialah menghapuskan keadaan terakhir, q1. Kita menambahkan anak panah dari keadaan qs ke keadaan qf. Apakah labelnya? Kita sampai ke keadaan q1 melalui peraturan epsilon, jadi bahagian ini boleh terus ditinggalkan. Kemudian kita boleh berulang bagi a, jadi kita memperoleh ungkapan nalar a∗. Akhirnya kita sampai ke qf melalui anak panah, jadi ungkapan itu dirangkaikan pula dengan b(a|b)∗. Oleh itu, anak panah dilabelkan dengan ungkapan nalar a∗ b(a|b)∗.
Automaton kini hanya mempunyai dua keadaan, jadi algoritma berakhir. Ungkapan nalar yang terhasil berada pada anak panah itu.
Sumber
- Contoh dan penerangan algoritma diambil daripada M. Sipser: Introduction to the Theory of Computation
Kandungan: Ungkapan nalar, Penukaran ungkapan nalar kepada automaton, Automaton terhingga tak berketentuan umum, Penukaran automaton kepada ungkapan nalar