Konversi otomaton menjadi ekspresi reguler
Kita akan melihat cara mengonversi sembarang otomaton hingga menjadi ekspresi reguler.
Penjelasan algoritma
Inputnya adalah suatu NFA A. Pertama, NFA ini kita ubah menjadi GNFA. Pada tahap kedua, di setiap langkah kita menghapus satu state, menyesuaikan fungsi transisi dengan benar, lalu mengulanginya sampai hanya tersisa dua state — state awal dan state akhir. Di antara keduanya ada busur yang labelnya berupa ekspresi reguler, dan ekspresi reguler inilah hasil seluruh algoritma. Jadi, inti prosedurnya adalah menghapus state, lalu memperbaiki otomaton sehingga diperoleh otomaton yang ekuivalen.
Menghapus satu state
Cara menghapus satu state dapat kita gambarkan dengan contoh sederhana. Misalkan sebagian otomaton kita terlihat seperti ini:
dengan Ri suatu ekspresi reguler. Seperti apa otomatonnya jika state qr kita hapus? Bayangkan kita berada di state qi dan bertanya: string apa saja yang dapat kita hasilkan pada bagian ini? Jika kita langsung pergi dari state qi ke state qj, hasilnya adalah semua string yang sesuai dengan ekspresi reguler R4.
Namun, jika kita pergi ke state qr, kita dapat menghasilkan string berbentuk R1. Di state qr kita dapat berputar untuk ekspresi reguler R2, sehingga sebenarnya kita dapat menghasilkan string berbentuk
Sekarang kita tahu bahwa dari bagian otomaton ini dapat terbentuk string berbentuk R4 atau berbentuk
Sekarang state qr dapat dengan mudah kita hapus sehingga hanya tersisa dua state, qi dan qj, dan sebagai ganti R4 kita tuliskan ekspresi reguler yang baru saja kita peroleh:
Prosedur ini kita lakukan untuk setiap busur dari setiap state qi ke suatu state qj, termasuk loop, yaitu termasuk kasus qi = qj.
Setelah satu state dihapus, kita memperoleh otomaton yang ekuivalen — otomaton yang mengenali bahasa yang sama.
Algoritma lengkap
Inputnya adalah NFA A = ⟨Q, Σ, δ, q0, F⟩.
- Konversikan NFA A menjadi GNFA Z = ⟨Q′, Σ, δ′, q0′, qf′⟩. Selanjutnya, banyaknya state dalam Z kita lambangkan dengan huruf k.
- Jika k = 2, algoritma berakhir, dan pada busur antara state awal dan state akhir terdapat ekspresi reguler yang dihasilkan.
- Jika k>2, pilih sembarang state qr yang berbeda dari state awal dan state akhir, yaitu qr ≠ q0′ dan qr ≠ qf′. Kemudian buat GNFA baru Z′ = ⟨Q′′, Σ, δ′′,q0′,qf′⟩ yang memenuhi:
dan untuk semua qi ∈ Q′′ ∖ {qf′} dan semua qj ∈ Q′′ ∖ {q0′} berlaku dengan R1 = δ′(qi,qr), R2 = δ′(qr,qr), R3 = δ′(qr, qj), R4 = δ′(qi, qj). Lalu lanjutkan ke langkah 2.
Contoh
Misalkan inputnya adalah otomaton hingga berikut:
Pertama, otomaton ini kita konversi menjadi GNFA (transisi ∅ yang tidak perlu tidak kita gambarkan):
Sekarang kita terapkan bagian kedua algoritma dan menghapus salah satu simpul. Kita mulai dari simpul q2. Simpul q2 kita hapus, lalu kita tambahkan transisi dari state q1 ke state qf. Transisi ini kita beri label b(a|b)∗, karena dari simpul q1 kita sampai di state q2 untuk string berbentuk b, lalu kita dapat berputar untuk a|b, sehingga diperoleh (a|b)∗, dan akhirnya dengan aturan epsilon kita berpindah ke qf. Di sini berlaku b(a|b)∗ϵ = b(a|b)∗. Kita memperoleh otomaton:
Tinggal menghapus state terakhir, q1. Kita tambahkan busur dari state qs ke state qf. Bagaimana labelnya? Ke state q1 kita sampai melalui aturan epsilon, yang dapat langsung kita abaikan. Kemudian kita dapat berputar untuk a, sehingga diperoleh ekspresi reguler a∗. Akhirnya, melalui busur kita sampai di qf, sehingga ekspresi tersebut masih kita sambung dengan b(a|b)∗. Jadi, busurnya kita beri label ekspresi reguler a∗ b(a|b)∗.
Otomaton hanya tinggal memiliki dua state, sehingga algoritma berakhir. Pada busurnya terdapat ekspresi reguler yang dihasilkan.
Sumber
- Contoh dan penjelasan algoritma diambil dari M. Sipser: Introduction to the Theory of Computation
Daftar isi: Ekspresi reguler, Konversi ekspresi reguler menjadi otomaton, NFA umum (GNFA), Konversi otomaton menjadi ekspresi reguler