Apakah Regex golf NP-Complete?

27

Seperti yang terlihat di strip XKCD terbaru ini dan posting blog terbaru inidari Peter Norvig (dan sebuah kisah Slashdot yang menampilkan yang terakhir), "golf regex" (yang mungkin lebih baik disebut masalah pemisahan ekspresi reguler) adalah teka-teki untuk menentukan ekspresi reguler sesingkat mungkin yang menerima setiap kata pada set A dan tidak ada kata dalam set B. Posting Norvig mencakup algoritma untuk menghasilkan kandidat yang cukup pendek, dan dia mencatat bahwa pendekatannya melibatkan penyelesaian masalah Set Cover NP-lengkap, tetapi dia juga berhati-hati untuk menunjukkan bahwa pendekatannya tidak mempertimbangkan setiap kemungkinan ekspresi reguler, dan tentu saja itu bukan satu-satunya algoritma, jadi solusinya tidak dijamin optimal, dan mungkin juga beberapa algoritma waktu polinomial lain dapat menemukan solusi yang setara atau lebih baik.

Demi kebenaran dan untuk menghindari harus menyelesaikan pertanyaan optimasi, saya pikir formulasi Pemisahan Ekspresi Reguler yang paling alami adalah:

Dengan dua (hingga) set dan string di atas beberapa alfabet , apakah ada ekspresi reguler panjang yang menerima setiap string dalam dan menolak setiap string dalam ?B Σ k A BABΣkAB

Adakah yang diketahui tentang kerumitan masalah pemisahan ini? (Perhatikan bahwa karena saya telah menetapkan dan sebagai set string terbatas, gagasan alami ukuran untuk masalah adalah panjang total semua string dalam dan ; ini meniadakan kontribusi dari ). Tampaknya sangat mungkin bagi saya bahwa ini adalah NP-lengkap (dan pada kenyataannya, saya akan berharap pengurangan menjadi semacam masalah penutup) tetapi beberapa pencarian belum menemukan sesuatu yang sangat berguna.B A B kABABk

Steven Stadnicki
sumber
4
Apakah bahkan di NP? Diberi ekspresi reguler, bagaimana Anda memeriksa apakah sebuah kata dalam bahasa yang dideskripsikan dalam waktu polinomial? Pendekatan standar - berubah menjadi NFA, lalu DFA dan periksa - membutuhkan waktu eksponensial dalam (?). k
Raphael
1
harus lengkap dengan PSPACE; lihat (Gramlich, Schnitger, Meminimalkan NFA dan Ekspresi Reguler, 2005) di ggramlich.github.io/Publications/approximationSTACS05Pres.pdf dan citeseerx.ist.psu.edu/viewdoc/… (PS: Saya memposting ini sebagai komentar, karena jawaban harus menjelaskan alasannya, tetapi saya tidak punya waktu untuk melakukannya saat ini; mungkin orang lain dapat menggunakan referensi dan menjelaskan cara kerjanya)
rgrig
1
Untuk ekspresi reguler seperti yang dipahami dalam TCS, masalahnya ada di NP (Sertifikat ukuran polinomial dan dapat diverifikasi dalam waktu polinomial akan menjadi ekspresi reguler itu sendiri). Itu (mungkin) tidak ada dalam NP jika kita menggunakan misalnya PCREs untuk ekspresi reguler, karena bahkan pengujian keanggotaan adalah NP-hard ( perl.plover.com/NPC/NPC-3SAT.html ).
Mike B.
1
@ MikeB .: Dan bagaimana tepatnya Anda memeriksa waktu polinomial? Apakah Anda melihat komentar oleh @Raphael?
rgrig
5
(1) Anda dapat menjalankan algoritme deterministik dalam P untuk menguji keanggotaan NFA (mulai saat mulai, dan ingat semua status tempat Anda dapat setelah menggunakan simbol kata. Jangkau akhirnya, periksa apakah Anda telah mencapai setidaknya satu keadaan terakhir.) (2) Tergantung pada definisi "ekspresi reguler" - apakah kita menggunakan ilmuwan komputer, atau pemrogram? Apakah kita hanya mengizinkan bahasa biasa, atau (bagian dari) bahasa peka konteks (karenanya PCRE)?
Mike B.

Jawaban:

15

Dengan asumsi varian TCS-regex, masalahnya memang NP-complete.

Kami berasumsi bahwa regex kami mengandung

  • surat dari , cocok dengan mereka sendiri,Σ
  • + , yang menunjukkan kesatuan,
  • , yang menunjukkan penggabungan,
  • , yang menunjukkan Kleene-Star,
  • λ , cocok dengan string kosong

dan tidak ada lagi. Panjang regex didefinisikan sebagai jumlah karakter dari . Seperti di strip komik, kami menganggap regex cocok dengan kata, jika cocok dengan substring kata. (Mengubah salah satu dari asumsi-asumsi ini hanya akan mempengaruhi kompleksitas konstruksi di bawah ini, tetapi bukan hasil umum.)Σ

AB

Untuk menunjukkan kekerasan NP, kami mengurangi Set penutup:

UCUCCkSCS=U

Kami menerjemahkan input untuk Set cover menjadi satu untuk regex golf sebagai berikut:

  • ΣCx
  • AeUCe
  • Bx
  • k

Pengurangan ini jelas dalam P dan kesetaraan juga cukup sederhana untuk dilihat:

  • c1,,ckc1++ck
  • xAkΣAC
FrankW
sumber
1
ABO(n)a1+a2+...,aiAO(n)k
2
AB