Bagaimana cara mengubah NFA dengan siklus yang tumpang tindih menjadi ekspresi reguler?


11

Jika saya mengerti dengan benar, NFA memiliki kekuatan ekspresif yang sama dengan ekspresi reguler. Seringkali, membacakan persamaan reguler yang setara dari NFA mudah: Anda menerjemahkan siklus ke bintang, persimpangan sebagai alternatif, dan sebagainya. Tetapi apa yang harus dilakukan dalam kasus ini:

masukkan deskripsi gambar di sini
[ sumber ]

Siklus yang tumpang tindih membuat sulit untuk melihat apa yang diterima automaton ini (dalam hal ekspresi reguler). Apakah ada trik?


2
Akan lebih baik jika Anda bisa menunjukkan dalam diagram apa kondisi awal dan akhir: panah kecil ke status awal dan lingkaran ganda sebagai status akhir. Juga, sulit untuk mengetahui di mana Anda salah jika Anda tidak memberikan indikasi apa pun yang telah Anda coba.
Dave Clarke

Mungkin dokumen ini dapat membantu Anda: ini dengan jelas menjelaskan cara mengubah NFA menjadi RE.
Vor

1
Mengapa ini sulit? Sudahkah Anda mencoba salah satu algoritma kanonik? Apa cara terbaik yang bisa Anda lakukan?
Raphael

3
Saya diedit untuk membuat pertanyaan (imho) menarik dan bagus untuk situs ini. Lihat riwayat revisi untuk membentuk opini.
Raphael

1
Saya memiliki jawaban yang siap mengubah NFA Anda menjadi ekspresi reguler, tetapi saya menghapusnya: Jawaban Raphael memberi Anda metode yang perlu Anda lakukan sendiri (itu juga memberikan tautan ke contoh), sehingga Anda bisa mendapatkan latihan jika Anda ingin. Jika Anda masih menginginkan solusi saya, saya akan membatalkan penghapusan jawaban saya.
Alex ten Brink

Jawaban:


5

Daripada "membacakan", Anda harus menggunakan salah satu dari beberapa metode kanoncial untuk melakukan ini. Sejauh ini yang terbaik yang pernah saya lihat adalah yang mengekspresikan otomat sebagai sistem persamaan bahasa (reguler) yang dapat diselesaikan. Ini khususnya bagus karena tampaknya menghasilkan ekspresi yang lebih ringkas daripada metode lain.

Saya menulis dokumen ini menjelaskan metode untuk siswa musim panas lalu. Ini berkaitan langsung dengan kuliah khusus; referensi yang disebutkan adalah definisi tipikal dari ekspresi reguler. Bukti Lemma Arden (hasil yang dibutuhkan) terkandung; satu untuk kebenaran metode ini hilang. Sayangnya, ketika saya mempelajarinya dalam kuliah, saya tidak punya referensi.

Singkatnya: Untuk setiap negara , buat persamaanqi

Qi=qiaqjaQj{{ε}, qiF, else

di mana adalah himpunan status akhir dan berarti ada transisi dari ke dengan label . Jika Anda membaca sebagai atau (tergantung pada definisi ekspresi reguler Anda), Anda melihat bahwa ini adalah persamaan dari ekspresi reguler.Fqiaqjqiqja+

Memecahkannya (menggunakan Arden's Lemma ) menghasilkan satu ekspresi reguler untuk setiap negara yang menggambarkan dengan tepat kata-kata yang dapat diterima mulai dari ; oleh karena itu (jika adalah kondisi awal) adalah ekspresi yang diinginkan.QiqiQ0q0

Aplikasi untuk robot yang diberikan dibiarkan sebagai latihan; contoh lengkap termasuk dalam dokumen tertaut di atas .

Lihat juga di sini di mana saya memposting jawaban yang sama.


1
Lihat pertanyaan referensi ini untuk metode umum lainnya.
Raphael

3

Jika hanya ada rantai negara tanpa loop, apakah Anda tahu apa yang harus dilakukan?

Jika ada loop sederhana tanpa percabangan yang tumpang tindih ini, akankah Anda tahu apa yang harus dilakukan?

(Jika jawabannya "tidak", pikirkan dulu kasus-kasus ini.)

Sekarang, idenya adalah untuk mengubah robot secara progresif untuk meletakkannya dalam bentuk di mana Anda dapat melihat pola-pola itu: rantai, loop, dan jalur yang berbeda yang menyatu pada akhirnya (mengarah ke pergantian). Pada setiap langkah transformasi, berhati-hatilah bahwa robot yang ditransformasi masih mengenali bahasa yang sama.

Perlu diingat bahwa ini adalah otomat non- deterministik. Yang Anda posting kebetulan deterministik, tetapi tidak harus tetap seperti itu ketika Anda mengubahnya.

Karena titik lengket adalah bahwa dapat dicapai dari dua titik yang berbeda, bagi menjadi dua. Simpan , hapus transisi dari ke dan tambahkan status baruq2q1fq2gq3q4q2q5q4jq5gq3

q3,q4,q5q3q3(hjg)

Berhati-hatilah untuk memeriksa negara bagian mana yang final. Ini bisa membantu untuk tidak khawatir tentang ini pada awalnya dan membuat satu loop besar, kemudian menduplikasi bagian yang mengakhiri sebagian loop.

Ini belum tentu teknik yang paling efisien atau yang menghasilkan ekspresi reguler paling sederhana, tetapi sederhana.


3

Pisahkan q_1


Dan ini menjawab pertanyaan bagaimana?
Raphael

1
Jika Anda menulis ulang mesin negara dengan cara ini, sekarang sepele untuk membaca persamaan reguler yang setara.
Jukka Suomela

1
Mungkin Anda harus memasukkan ini dalam teks jawaban. Apakah ini selalu berhasil?
Raphael

@ Raphael: Ini berfungsi dalam hal ini. :) Ide umum di balik trik ini adalah sebagai berikut: kami membuat siklus "bersarang dengan benar". Artinya, kita tidak memiliki struktur siklus [(])tetapi [()].
Jukka Suomela
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.