Regex golf NP-Complete mi?


27

Bu son XKCD şeridinde ve bu son blog gönderisinde görüldüğü gibiPeter Norvig'den (ve ikincisini içeren bir Slashdot öyküsünden), "regex golf" (normal ifade ayırma problemi olarak daha iyi denebilir), A kümesindeki her kelimeyi kabul eden ve hiç kelimede olmayan en kısa normal ifadeyi tanımlama bulmacasıdır. set B. Norvig'in görevinde oldukça kısa bir aday oluşturmak için bir algoritma var ve yaklaşımının NP tamamlanmış bir Set Cover problemini çözmeyi içerdiğini belirtiyor, ancak yaklaşımının her olası düzenli ifadeyi dikkate almadığına dikkat etmesine dikkat ediyor. ve elbette onun mutlaka tek bir algoritma olması gerekmiyor, bu yüzden çözümlerinin optimal olacağı garanti edilmiyor ve ayrıca bazı kesin olarak polinom-zaman algoritmasının eşdeğer veya daha iyi çözümler bulabilmesi de mümkün.

Somutluk uğruna ve optimizasyon sorusunu çözmek zorunda kalmaktan kaçınmak için, Normal İfade Ayrımı'nın en doğal formülasyonunun şöyle olacağını düşünüyorum:

Verilen iki (sonlu) belirler ve herhangi bir alfabede dizeleri , uzunlukta bir düzenli ifade var her dizeyi kabul ettiğini ve her dize reddeder ?B Σ k A BABΣkAB

Bu ayrılık probleminin karmaşıklığı hakkında bilinen bir şey var mı? (Not belirttiğim beri o ve dizeleri sonlu kümeler olarak, sorunun büyüklüğü doğal kavramı tüm dizeleri toplam uzunlukları olan ve ; bu herhangi bir katkı bataklık ). Oldukça büyük olasılıkla bana o görünüyor olduğunu NP-tam (ve aslında, azaltma kapak sorunu çeşit olması beklenebilir) ama birkaç aramalar özellikle yararlı bir şey çıkmadı.B A B kABABk


4
NP'de bile mi? Düzenli bir ifade verildiğinde, bir kelimenin tarif edilen dilde polinom sürede olup olmadığını nasıl kontrol edersiniz? Standart yaklaşım - NFA'ya dönüşür, sonra DFA ve kontrol - (?) Cinsinden üssel zaman alır . k
Raphael

1
PSPACE tamamlanmış olmalıdır; En (Gramlich, Schnitger, minimize NFA'ler ve Düzenli İfadeler, 2005) bakınız ggramlich.github.io/Publications/approximationSTACS05Pres.pdf ve citeseerx.ist.psu.edu/viewdoc/... (PS: Ben bir yorum olarak bu mesaj, bir cevap niçin gerekirdi, ama şu anda bunu yapmak için zaman yok çünkü;) belki başkası başvurusu kullanın ve nasıl çalıştığını açıklayabilir
rgrig

1
TCS'de anlaşıldığı gibi düzenli ifadeler için sorun NP cinsindendir (Polinom büyüklüğünde ve polinom zamanında doğrulanabilir bir sertifika normal ifadenin kendisi olacaktır). Normal ifadeler için örneğin PCRE'ler kullanırsak (muhtemelen) NP'de değildir, çünkü test üyeliği bile NP-zordur ( perl.plover.com/NPC/NPC-3SAT.html ).
Mike B.

1
@MikeB .: Polinom süresinde tam olarak nasıl kontrol ediyorsunuz? @Raphael tarafından yapılan yorumu gördünüz mü?
rgrig

5
(1) NFA üyeliğini test etmek için P'de deterministik bir algoritma çalıştırabilirsiniz (başlangıç ​​durumunda başlar ve kelimenin bir sembolünü kullandıktan sonra içinde olabileceğiniz tüm durumları hatırlayın. son bir devlet.) (2) "Düzenli İfade" tanımına bağlıdır - bilgisayar bilimcileri veya programcılardan birini kullanıyor muyuz? Yalnızca normal dillere mi, yoksa (alt kümesine) içeriğe duyarlı dillere (dolayısıyla PCRE'lere) izin veriyor muyuz?
Mike B.

Yanıtlar:


15

TCS'nin regex değişkenini varsayarsak, sorun gerçekten NP-tamamlandı.

Regex'lerimizin içerdiğini varsayıyoruz

  • mektuplar , kendilerini eşleşenΣ
  • , birliği ifade ediyor,+
  • , birleştirme ifade eder,
  • , Kleene-Star belirten,*
  • , boş dizeyle eşleşiyorλ

ve başka hiçbir şey. Bir regex'in uzunluğu başlayan karakter sayısı olarak tanımlanır . Çizgi romanda olduğu gibi, kelimenin bir alt dizisiyle eşleşiyorsa, bir kelimeyle eşleşmesi için bir regex düşünürüz. (Bu varsayımların herhangi birinin değiştirilmesi, yalnızca aşağıdaki yapının karmaşıklığını etkilemelidir, ancak genel sonucu etkilemez.)Σ

NP'de olduğu açıktır, yorumlarda açıklandığı gibi (A adayı-RE'yi NFA'ya çevirip ve B'deki tüm kelimelerle çalıştırarak doğrulayın ).birB

NP sertliği göstermek için Set kılıfını azaltırız:

Bir evren Verilen ve koleksiyonu C alt kümelerinin U , bir dizi vardır C 'C boyutu k böylece S C ' S = U ?UCUC'CkSCS=U

Set cover için bir girişi regex golf için aşağıdaki gibi çeviririz:

  • , C'deki her alt küme için bir karakterve bir ek karakter içerir (aşağıdakilerde x ilegösterilir).ΣCx
  • her bir eleman için bir sözcük içerir e ait U . Kelime kümeler temsil tam karakterlerden oluşan C içeren e (isteğe göre bir sırada).AeUCe
  • tek x kelimesini içerir.Bx
  • basitçe taşınır.k

Bu azalmanın açıkça P cinsinden olduğu ve denkliğin de görülmesi oldukça basit:

  • Eğer seti kapak örneğin bir çözümdür, regex c 1 + + c k regex golf bir çözümdür.c1,,ckc1++ck
  • Boş alt kelimeyle eşleşen bir regex, eşleşir . Bu nedenle, golf problemini çözen herhangi bir regex, A kelimelerinin her birinden en az bir harf içermelidir . Golf örneği çözülebilir ise Dolayısıyla, en fazla bir dizi var k gelen harfler Σ her kelime böylece A harflerinin bu sette kapsamındadır. Yapım gereği, C'den gelen alt kümeler kümesi, ayarlanan kapak örneğine bir çözümdür.xAkΣAC

1
Çok hoş, tamamlamam için 2 puan ekleyeyim: (1) Problemin belirtilmesiyle ilgili ek bir varsayım olarak, ve B sonlu kümeler olmalıdır (ve tüm unsurlar açıkça belirtilmiş mi?) (2) RE adayının büyüklüğü O ( n ) , çünkü bir 1 + bir 2 + . . . , Bir iA içinde boyutu ile geçerli bir adaydır O ( n ) yani her büyük için, k cevap trivially doğrudur. ABO(n)a1+a2+...,aiAO(n)k
Mike B.

2
@Mike B .: (1): ve B'nin doğruluğu soruda verilmiştir. Karmaşıklık teorisinde, ayrıntılı liste, sonlu kümeleri temsil etmenin varsayılan yoludur. (2), eğer “NP'de” kısmını titizlikle yapmak istiyorsa, gerçekten gerekli bir argümandır. AB
FrankW
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.