Czy regex golf NP-Complete?

27

Jak widać na ostatnim pasku XKCD i najnowszym poście na bloguwedług Petera Norviga (i opowiadania Slashdota z tym ostatnim) „regex golf” (który można by lepiej nazwać problemem separacji wyrażeń regularnych) jest zagadką polegającą na zdefiniowaniu najkrótszego możliwego wyrażenia regularnego, które akceptuje każde słowo w zestawie A i nie ma słowa w post B. zestaw Norviga zawiera algorytm generowania rozsądnie krótkiego kandydata, i zauważa, że ​​jego podejście polega na rozwiązaniu problemu NP-Complete Set Cover, ale ostrożnie zaznacza, że ​​jego podejście nie uwzględnia każdego możliwego wyrażenia regularnego, i oczywiście jego niekoniecznie jest jedynym algorytmem, więc nie ma gwarancji, że jego rozwiązania będą optymalne, a także możliwe, że jakiś inny algorytm z czasem wielomianowym znajdzie równoważne lub lepsze rozwiązania.

Ze względu na konkretność i aby uniknąć konieczności rozwiązywania problemu optymalizacji, najbardziej naturalnym sformułowaniem separacji wyrażeń regularnych byłoby:

Biorąc pod uwagę dwa (skończone) zestawy i B ciągów znaków nad pewnym alfabetem Σ , czy istnieje wyrażenie regularne o długości k, które akceptuje każdy ciąg A i odrzuca każdy ciąg B ?ABΣkAB

Czy coś wiadomo na temat złożoności tego konkretnego problemu separacji? (Zauważ, że skoro podałem i B jako skończone zestawy łańcuchów, naturalnym pojęciem rozmiaru problemu są całkowite długości wszystkich łańcuchów w A i B ; to pochłania jakikolwiek wkład z k ). Wydaje mi się bardzo prawdopodobne, że jest kompletny z NP (i faktycznie spodziewałbym się, że redukcja będzie miała jakiś problem z ochroną), ale kilka wyszukiwań nie przyniosło nic szczególnie przydatnego.ZAbZAbk

Steven Stadnicki
źródło
4
Czy to w ogóle w NP? Biorąc pod uwagę wyrażenie regularne, w jaki sposób sprawdzasz, czy słowo jest w opisanym języku w czasie wielomianowym? Standardowe podejście - transformacja do NFA, a następnie DFA i sprawdzenie - zajmuje wykładniczy czas (?). k
Raphael
1
powinien być kompletny z PSPACE; zobacz (Gramlich, Schnitger, minimalizując NFAs i wyrażeń regularnych, 2005) w ggramlich.github.io/Publications/approximationSTACS05Pres.pdf i citeseerx.ist.psu.edu/viewdoc/... (PS: jestem delegowania to jako komentarz, ponieważ odpowiedź powinna wyjaśniać dlaczego, ale w tej chwili nie mam na to czasu; być może ktoś inny może skorzystać z referencji i wyjaśnić, jak to działa)
rgrig
1
W przypadku wyrażeń regularnych w rozumieniu TCS problemem jest NP (certyfikat wielkości wielomianowej i weryfikowalny w czasie wielomianowym byłby samym wyrażeniem regularnym). Nie jest (prawdopodobnie) w NP, jeśli używamy np. PCRE do wyrażeń regularnych, ponieważ nawet testowanie członkostwa jest trudne NP ( perl.plover.com/NPC/NPC-3SAT.html ).
Mike B.
1
@MikeB .: A jak dokładnie sprawdzasz czas wielomianowy? Widziałeś komentarz @Raphael?
rgrig
5
(1) Możesz uruchomić algorytm deterministyczny w P, aby przetestować członkostwo w NFA (zacznij od stanu początkowego i zapamiętaj wszystkie stany, w których możesz się znajdować po zużyciu symbolu słowa. Dotrzyj do końca, sprawdź, czy osiągnąłeś przynajmniej jeden stan końcowy.) (2) Zależy to od definicji „wyrażenia regularnego” - czy używamy informatyków, czy programistów? Czy zezwalamy tylko na zwykłe języki lub (część) języków kontekstowych (stąd PCRE)?
Mike B.

Odpowiedzi:

15

Zakładając wariant wyrażenia regularnego TCS, problem jest rzeczywiście NP-zupełny.

Zakładamy, że nasze wyrażenia regularne zawierają

  • litery od , pasujące do siebie,Σ
  • , oznaczający związek,+
  • , oznaczający konkatenację,
  • , oznaczające Kleene-Star,
  • , pasujące do pustego ciąguλ

i nic więcej. Długość wyrażenia regularnego jest definiowana jako liczba znaków z . Podobnie jak w komiksie, za wyrażenie regularne uważamy wyrażenie regularne, jeśli pasuje ono do podłańcucha słowa. (Zmiana któregokolwiek z tych założeń powinna mieć wpływ tylko na złożoność konstrukcji poniżej, ale nie na ogólny wynik).Σ

To, że jest w NP, jest proste, jak wyjaśniono w komentarzach (zweryfikuj kandydata-RE, tłumacząc go na NFA i uruchamiając to na wszystkich słowach z i B ).ZAb

Aby pokazać twardość NP, zmniejszamy pokrycie zestawu:

Biorąc pod uwagę wszechświat i zbiór C podzbiorów U , czy istnieje zbiór C C o wielkości k, tak że S C S = U ?UdoUdodokS.doS.=U

Tłumaczymy dane wejściowe dla pokrycia zestawu na jedno dla wyrażeń regularnych w następujący sposób:

  • zawiera jeden znak dla każdego podzestawu w C i jeden dodatkowy znak (oznaczony x poniżej).Σdox
  • Zawiera jedno słowo dla każdego elementu e z U . Słowo składa się dokładnie z znaków reprezentujących podzbiory w C, które zawierają e (w dowolnej kolejności).ZAmiUdomi
  • zawiera pojedyncze słowo x .bx
  • jest po prostu przenoszone.k

To zmniejszenie jest oczywiście w P, a równoważność jest również dość łatwa do zauważenia:

  • Jeśli jest rozwiązaniem dla zestawu instancji okładki, wyrażenie regularne c 1 + + c kdo1,,dokdo1++dok jest rozwiązaniem do wyrażenia regularnego golf.
  • xZAkΣZAdo
FrankW
źródło
1
ZAbO(n)za1+za2)+...,zajaZAO(n)k
2
ZAb