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:
[ sumber ]
Siklus yang tumpang tindih membuat sulit untuk melihat apa yang diterima automaton ini (dalam hal ekspresi reguler). Apakah ada trik?
Jawaban:
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
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.F qi→aqj qi qj a ∪ + ∣
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.Qi qi Q0 q0
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.
sumber
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 baruq2 q1→fq2→gq3 q4 q2 q5 q4→jq5→gq3
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.
sumber
sumber
[(])
tetapi[()]
.