Regex golf NP-Complete è?


27

Come visto in questa recente striscia XKCD e in questo recente post sul blogda Peter Norvig (e una storia di Slashdot con quest'ultima), "regex golf" (che potrebbe essere chiamato il problema della separazione delle espressioni regolari) è l'enigma di definire l'espressione regolare più breve possibile che accetta ogni parola nel set A e nessuna parola in il post di B. Norvig include un algoritmo per generare un candidato ragionevolmente breve e nota che il suo approccio prevede la risoluzione di un problema di Set Cover NP completo, ma è anche attento a sottolineare che il suo approccio non considera ogni possibile espressione regolare, e ovviamente il suo non è necessariamente l'unico algoritmo, quindi le sue soluzioni non sono garantite per essere ottimali, ed è anche possibile che alcuni altri algoritmi in tempo polinomiale possano trovare soluzioni equivalenti o migliori.

Per ragioni di concretezza e per evitare di dover risolvere la domanda di ottimizzazione, penso che la formulazione più naturale della separazione delle espressioni regolari sarebbe:

Dati due insiemi (finiti) e B di stringhe su un po 'di alfabeto Σ , esiste un'espressione regolare di lunghezza k che accetta ogni stringa in A e rifiuta ogni stringa in B ?ABΣkAB

Si sa qualcosa sulla complessità di questo particolare problema di separazione? (Da notare che da quando ho specificato e B come insiemi finiti di stringhe, la nozione naturale di dimensione per il problema è la lunghezza totale di tutte le stringhe in A e B ; questo sommerge qualsiasi contributo da k ). Mi sembra molto probabile che sia NP-completo (e in effetti, mi aspetto che la riduzione sia dovuta a una sorta di problema di copertura) ma alcune ricerche non hanno rivelato nulla di particolarmente utile.ABUNBK


4
È anche a NP? Data un'espressione regolare, come si fa a verificare se una parola è nella lingua descritta in tempo polinomiale? L'approccio standard - trasforma in NFA, quindi in DFA e verifica - richiede tempo esponenziale in (?). K
Raffaello

1
dovrebbe essere completo per PSPACE; vedi (Gramlich, Schnitger, Minimizing NFAs and Regular Expressions, 2005) su ggramlich.github.io/Publications/approximationSTACS05Pres.pdf e citeseerx.ist.psu.edu/viewdoc/… (PS: sto postando questo come commento, perché una risposta dovrebbe spiegare perché, ma al momento non ho tempo per farlo; forse qualcun altro può usare il riferimento e spiegare come funziona)
rgrig

1
Per le espressioni regolari come comprese in TCS, il problema è in NP (Un certificato di dimensione polinomiale e verificabile in tempo polinomiale sarebbe l'espressione regolare stessa). (Probabilmente) non è in NP se usiamo ad esempio PCRE per le espressioni regolari, perché anche testare l'appartenenza è NP-difficile ( perl.plover.com/NPC/NPC-3SAT.html ).
Mike B.

1
@MikeB .: E come controlli esattamente il tempo polinomiale? Hai visto il commento di @Raphael?
venerdì

5
(1) Puoi eseguire un algoritmo deterministico in P per testare l'appartenenza agli NFA (inizia allo stato iniziale e ricorda tutti gli stati in cui puoi trovarti dopo aver consumato un simbolo della parola. Raggiungi la fine, controlla se hai raggiunto almeno uno stato finale.) (2) Dipende dalla definizione di "espressione regolare" - usiamo quello degli informatici o quello dei programmatori? Sono consentite solo lingue regolari o (un sottoinsieme di) lingue sensibili al contesto (quindi PCRE)?
Mike B.

Risposte:


15

Supponendo la variante TCS di regex, il problema è effettivamente NP-completo.

Partiamo dal presupposto che i nostri regexes contengono

  • lettere di , corrispondenti a se stesse,Σ
  • , che indica unione,+
  • , che indica concatenazione,
  • , che indica Kleene-Star,*
  • , corrispondente alla stringa vuotaλ

e nient'altro. La lunghezza di una regex è definita come il numero di caratteri da . Come nel fumetto, consideriamo una regex per abbinare una parola, se corrisponde a una sottostringa della parola. (La modifica di una qualsiasi di queste ipotesi dovrebbe influenzare solo la complessità della costruzione di seguito, ma non il risultato generale.)Σ

Che sia in NP è semplice, come spiegato nei commenti (verificare un candidato-RE traducendolo in un NFA ed eseguendolo su tutte le parole da e B ).UNB

Per mostrare la durezza NP, riduciamo la copertura del set:

Dato un universo e una raccolta C di sottoinsiemi di U , esiste un insieme C C di dimensione k in modo che S C S = U ?UCUC'CKSC'S=U

Traduciamo un input per Set cover in uno per regex golf come segue:

  • contiene un carattere per ciascun sottoinsieme in C e un carattere aggiuntivo (indicato con x in seguito).ΣCX
  • contiene una parola per ogni elemento e di U . La parola è composta esattamente dai caratteri che rappresentano sottoinsiemi in C che contengono e (in ordine arbitrario).UNeUCe
  • contiene la singola parola x .BX
  • viene semplicemente riportato.K

Questa riduzione è ovviamente in P e l'equivalenza è anche abbastanza semplice da vedere:

  • Se è una soluzione per l'istanza di copertina impostata, regex c 1 + + c k è una soluzione per regex golf.c1,...,cKc1++cK
  • Una regex che corrisponda alla parola secondaria vuota corrisponderebbe a . Pertanto, qualsiasi regex risolvere il problema campo deve contenere almeno una lettera da ciascuna delle parole A . Quindi, se l'istanza del golf è risolvibile, esiste un insieme di al massimo k lettere da Σ in modo che ogni parola in A sia coperta da questo insieme di lettere. Per costruzione, l'insieme corrispondente di sottoinsiemi da C è una soluzione all'istanza di copertura dell'insieme.XUNKΣUNC

1
Molto bello, vorrei aggiungere 2 punti, per completezza: (1) Come ulteriore presupposto per quanto riguarda la specifica del problema, e B devono essere insiemi finiti (e tutti gli elementi sono enumerati esplicitamente?) (2) Le dimensioni del candidato RE sono in O ( n ) , in quanto un 1 + a 2 + . . . , a iA è un candidato valido con dimensione in O ( n ) , quindi per ogni k più grande la risposta è banalmente vera. UNBO(n)a1+a2+...,aiAO(n)k
Mike B.

2
@ Mike B .: (1): la finezza di e B è data nella domanda. Nella teoria della complessità, l'elenco esaustivo è il modo predefinito di rappresentare insiemi finiti. (2) è effettivamente un argomento richiesto, se si vuole rendere rigorosa la parte "in NP". UNB
FrankW,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.