Le parole crociate regex sono NP-difficili?


13

Stavo scherzando l'altro giorno su questo sito Web: http://regexcrossword.com/ e mi ha fatto chiedere quale fosse il modo migliore per risolverlo.

Riesci a risolvere il seguente problema in tempo polinomiale o è NP-difficile?

Data una griglia NxM con N espressioni regolari per le colonne e M per le righe, trova qualsiasi soluzione alla griglia in modo tale che tutte le espressioni regolari siano soddisfatte o dica che non esiste alcuna soluzione.


Non ho ancora guardato il sito, ma le domande con Regexes tendono ad essere complete per PSPACE, una classe che è difficile almeno quanto NP
jmite,

1
@jmite Indovinare le stringhe che si adattano ad alcune espressioni regolari è "facile" in quanto non dobbiamo derivare alcune proprietà globali dell'espressione regolare. In effetti, penso che il problema sia in NP (vedi commento sotto la risposta di FrankW.)
Raphael

Risposte:


11

Il problema è NP-difficile.

Lo dimostriamo riducendo la copertura dei vertici:

Dato un grafico e una soglia k , esiste un sottoinsieme V V di cardinalità al massimo k , in modo che ogni fronte in sia incidente ad almeno un nodo in ?G=(V,E)kVVkEV

Traduciamo questo in un cruciverba regex con colonne erighe come segue:|E|+1|V|

Tutte le colonne, tranne la prima, corrispondono a un bordo. Ottengono una regex .01(0|1)

Tutte le righe corrispondono a un vertice. Ottengono una regex che consente di scrivere neanche

  • un nella prima colonna e ciascuna colonna corrispondente a un incidente sul bordo di quel nodo e azzera in tutte le altre colonne, oppure1

  • 0

Infine, la prima colonna conta la dimensione della copertina del vertice. Ottiene una regex, che consente al massimo .k

La corrispondenza tra le soluzioni alle parole incrociate regex e le copertine dei vertici dovrebbe essere ovvia.

Esempio:

Trova una copertina di vertice di dimensione 2 per il seguente grafico:

https://i.imgur.com/TY6sjjV.png

VA=0|10110

VB=0|11101

VC=0|10011

VD=0|11000

Counter=0*|0*10*|0*10*10*

E1=0*1(0|1)*

E2=0*1(0|1)*

E3=0*1(0|1)*

E4=0*1(0|1)*

VUNVDCounterE1E4

VUN,VBVC,VB

Counter0*|0*10*


2
Dal momento che possiamo a) calcolare NFA di dimensioni polinomiali per le espressioni regolari e indovinare b) la soluzione ec) calcoli (di dimensioni lineari) di tutti gli NFA ed d) verificare (in tempo polinomiale) che i calcoli si adattino alle parole indovinate, il problema è anche in NP.
Raffaello

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.