Diberikan dua ekspresi reguler yang berubah-ubah, apakah ada algoritma "efisien" untuk menentukan apakah mereka cocok dengan rangkaian string yang sama?
Secara lebih umum, dapatkah kita menghitung ukuran persimpangan dari dua set pertandingan?
Algoritma apa yang ada untuk melakukan ini, dan kelas kompleksitas apa yang mereka tinggali?
Jika kita melarang bintang Kleene, apakah itu mengubah gambar sama sekali?
algorithms
regular-expressions
Matematika Matematika
sumber
sumber
Jawaban:
Hendrik Jan memberikan jawaban yang bagus untuk kelas kompleksitas, tetapi bukan algoritma itu sendiri.
Algoritma paling sederhana untuk melakukan ini yang saya tahu adalah untuk mengubah ekspresi reguler menjadi DFA. Ada teknik yang dikenal untuk mengubah ekspresi reguler menjadi NFA, dan NFA menjadi DFA.
Setelah Anda memiliki dua DFA, pengujian untuk kesetaraan adalah efisien dan dapat ditentukan, karena bentuk minimal DFA unik hingga isomorfisma.
Namun, membangun DFA ini dari NFA bisa memakan banyak waktu, dan menghasilkan DFAS yang sangat besar, secara eksponensial besar dalam kasus terburuk.
sumber
Kesetaraan ekspresi reguler dikenal sebagai PSPACE-complete, yang agak buruk. Makalah "Kompleksitas Masalah Keputusan untuk Ekspresi Reguler Sederhana" daftar beberapa subclass dari ekspresi reguler dengan kompleksitas masing-masing. ( tautan )
sumber