Saya memiliki otomat terbatas non-deterministik yang sangat besar dan saya perlu mengubahnya ke DFA.
Secara umum saya maksudkan 40 000+ negara bagian. Sejauh ini saya telah melakukan beberapa percobaan dan memprogram algoritma default yang mencari melalui tabel (seperti dijelaskan di sini ), tetapi bahkan setelah optimasi cukup lambat dan sangat memakan memori. Saya menyadari fakta, bahwa jumlah negara dapat tumbuh secara eksponensial, tetapi setelah minimalisasi, DFA yang dihasilkan memiliki sekitar 9.000 negara dan itu dapat ditoleransi.
Jadi pertanyaan saya adalah, apakah ada beberapa algoritma, yang akan lebih cepat atau lebih ramah memori?
Jawaban:
Sudahkah Anda mencoba algoritma Brzozowski ? Waktu berjalan terburuk adalah eksponensial, tetapi saya melihat beberapa referensi yang menunjukkan bahwa itu sering berkinerja sangat baik, terutama ketika memulai dengan NFA yang ingin Anda konversi ke DFA dan meminimalkan.
Makalah berikut ini tampaknya relevan:
Ini mengevaluasi sejumlah algoritma yang berbeda untuk minimalisasi DFA, termasuk aplikasi mereka untuk situasi Anda di mana kami mulai dengan NFA dan ingin mengubahnya menjadi DFA dan menguranginya.
Seperti apa dekomposisi komponen yang sangat terhubung (SCC) NFA Anda (menganggapnya sebagai grafik berarah)? Apakah ada banyak komponen, di mana tidak ada komponen yang terlalu besar? Jika demikian, saya bertanya-tanya apakah mungkin untuk merancang algoritma divide-and-conquer, di mana Anda mengambil satu komponen, mengonversinya dari NFA ke DFA dan kemudian menguranginya, dan kemudian mengganti yang asli dengan versi yang ditentukan baru. Ini harus dimungkinkan untuk komponen entri-tunggal (di mana semua tepi ke dalam komponen itu mengarah ke satu simpul, simpul entri). Saya tidak segera melihat apakah mungkin untuk melakukan sesuatu seperti ini untuk NFA sewenang-wenang, tetapi jika Anda memeriksa seperti apa struktur SCC, maka Anda mungkin dapat menentukan apakah arah semacam ini layak dijelajahi atau tidak .
sumber
ini tampaknya bukan masalah yang dipelajari dengan sangat baik dalam arti algoritma yang dikenal / tersedia selain dari strategi asli / lama dari "determinize to DFA / meminimalkan DFA". Anda tampaknya menunjukkan langkah determinisasi adalah yang bermasalah, tetapi ini khas tentu saja karena memiliki kasus eksponensial-ruang / waktu yang lebih buruk. perhatikan bahwa ada beberapa algoritma minimalisasi DFA yang dapat bervariasi secara signifikan dalam kinerja rata-rata.
itu juga dikenal lebih informal sebagai "minimalisasi NFA tanpa determinasi" . diketahui sulit dalam arti bahwa pada dasarnya bahkan tidak ada algoritma perkiraan kecuali P = Pspace seperti yang ditunjukkan dalam makalah ini:
Namun makalah ini tidak mempertimbangkan kasus yang umumnya jarang dieksplorasi dari beberapa algoritma yang tidak didasarkan pada penemuan DFA 1 st yang ditentukan :
catat paket / implementasi yang tersedia untuk umum yang dapat menangani konversi / minimasi NFA / DFA besar dll secara umum seefisien mungkin adalah perpustakaan AT&T FSM .
ia memiliki strategi
fsmcompact
yang terkadang cukup:sumber