Pernyataan masalah :
Biarkan menjadi otomat pushdown (berpotensi tidak deterministik) dan biarkan menjadi alfabet inputnya. Apakah ada kata st yang diterima oleh ?A w ∈ A ∗ | w | ≤ k M
Apakah ini masalah NP-complete? Apakah sudah dipelajari? Apakah ada algoritma yang memungkinkan untuk menemukan kata seperti itu?
Jawaban:
Menghitung persimpangan bahasa CFG Anda dengan bahasa biasa (jumlah ini untuk mengalikan jumlah negara dengan k dan menambahkan "buntu" negara). Sekarang periksa apakah hasilnya kosong: dikonversi menjadi tata bahasa (saya pikir hasilnya akan memiliki ukuran polinomial) dan "mundur" dari produksi epsilon.∑ki = 0SEBUAHk k
Sunting: Kaveh menyebutkan bahwa ini polinomial dalam , jadi jika k diberikan sebagai input, algoritmanya eksponensial dalam | k | . Namun, Kaveh menemukan cara untuk memperbaikinya. Konversikan robot asli menjadi CFG, dan ganti semua terminal dengan terminal tetap. Sekarang gunakan algoritma berulang untuk menemukan ukuran minimal kata yang dihasilkan oleh masing-masing non-terminal, sebagai berikut.k k | k |
sumber
Ubah semua karakter alfabet menjadi satu karakter spesifik. Sekarang, Anda memiliki PDA yang didefinisikan lebih dari satu karakter. Bahasanya adalah tata bahasa bebas konteks. Namun, tata bahasa bebas konteks atas satu karakter adalah biasa. Jadi, konversikan CFG ke dalam bahasa biasa, lalu periksa apakah mengandung panjang kata k.
Sekarang, semua konversi ini cenderung membutuhkan waktu yang eksponensial, tetapi bagi saya sepertinya masalahnya adalah NP selesai. Terutama jika Anda mengizinkan waktu polinomial dalam .k
Saya mungkin salah, dan saya minta maaf atas jawaban lalai awal saya ...
BTW, fakta bahwa CFG atas satu huruf adalah teratur mengikuti dari teorema Parikh. Meski bukti langsung tidak terlalu sulit. Lihat tautan untuk perincian lebih lanjut tentang teorema Parikh - ini adalah hasil yang indah ... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf
sumber
Metode yang mungkin kurang optimal: Jalankan algoritma Djikstra. Kemudian, untuk setiap keadaan akhir, bandingkan jarak dengan . Jika ada yang ≤ k , terima. Menolak.k ≤ k EDIT: Di atas hanya berfungsi untuk NFA! Maaf soal itu.
sumber