✖

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 R1∘(R2∗). Karena dari state qr kita masih dapat sampai di state qj, kita tambahkan lagi ekspresi reguler R3. Secara keseluruhan, melalui jalur ini kita dapat memperoleh string berbentuk R1∘(R2∗)∘R3.

Sekarang kita tahu bahwa dari bagian otomaton ini dapat terbentuk string berbentuk R4 atau berbentuk R1∘(R2∗)∘R3. Tentu saja hal ini dapat ditulis sebagai ekspresi reguler (R4)|(R1∘(R2∗)∘R3).

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⟩.

  1. Konversikan NFA A menjadi GNFA Z = ⟨Q′, Σ, δ′, q0′, qf′⟩. Selanjutnya, banyaknya state dalam Z kita lambangkan dengan huruf k.
  2. Jika k = 2, algoritma berakhir, dan pada busur antara state awal dan state akhir terdapat ekspresi reguler yang dihasilkan.
  3. 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: Q′′=Q′∖{qr} dan untuk semua qi ∈ Q′′ ∖ {qf′} dan semua qj ∈ Q′′ ∖ {q0′} berlaku δ′′(qi,qj)=(R4)|(R1(R2∗)R3), 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

Daftar isi: Ekspresi reguler, Konversi ekspresi reguler menjadi otomaton, NFA umum (GNFA), Konversi otomaton menjadi ekspresi reguler