Saya membuat DFA acak untuk menguji algoritma reduksi DFA.
Algoritma yang saya gunakan saat ini adalah sebagai berikut: untuk setiap status , untuk setiap simbol dalam alfabet , tambahkan \ delta (q, c) ke beberapa keadaan acak. Setiap negara bagian memiliki probabilitas yang sama untuk menjadi negara bagian terakhir.
Apakah ini metode yang baik untuk menghasilkan DFA yang tidak bias? Juga, algoritma ini tidak menghasilkan trim DFA (DFA tanpa status usang) jadi saya bertanya-tanya apakah ada cara yang lebih baik untuk menghasilkan DFA acak yang entah bagaimana dapat memastikan bahwa itu trim?
Jawaban:
Lihat [1] dan diskusi di Bagian 4, Generasi Automata Acak. Makalah ini menandai berbagai algoritma minimalisasi DFA. Generator acak yang seragam digunakan yang menghasilkan representasi string kanonik dari DFA lengkap dengan state dan simbol . Mereka juga membahas metode lain.n k
[1] Almeida, M., Moreira, N., & Reis, R. (2007). Pada kinerja algoritma minimisasi automata. Logika dan Teori Algoritma, 3.
sumber
Anda harus melihat beranda Cyril Nicaud . Secara khusus, referensi berikut ini relevan dengan pertanyaan Anda:
F. Bassino, J. David dan C. Nicaud, Enumerasi dan generasi acak dari automata deterministik yang mungkin tidak lengkap, Matematika Murni dan Aplikasi 19 (2-3) (2009) 1-16.
F. Bassino dan C. Nicaud. Pencacahan dan Pembuatan Acak Automata yang Dapat diakses. Teor Comp. Sc. . 381 (2007) 86-104.
sumber
Ada algoritma untuk secara acak menghasilkan DFA hingga permutasi http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .
Tetapi, juga disebutkan dalam makalah di atas bahwa hampir semua DFA sudah minimal. DFA non-minimal seperti bilangan prima ... hanya ada beberapa. Dan jika Anda menggunakan algoritma ini untuk menguji algoritma minimisasi, akan seperti jika Anda menguji suatu algoritma pada bilangan prima dengan generator angka acak sederhana. Untuk memiliki lebih banyak DFA yang tidak minimal, Anda dapat mengubah algoritme dengan menambahkan keadaan wastafel, dan mengarahkan kembali persentase penting dari transisi ke keadaan tenggelam ini.
Tetapi dari sudut pandang saya, jika Anda ingin menguji kecepatan implementasi Anda, periksa apakah Anda ingin menggunakannya: dengan set kata acak atau REGEX acak, buat NFA atau DFA, dan kemudian meminimalkan DFA yang dihasilkan .
sumber
sumber