Questo classico libro di puzzle è NP-completo?


10

Esiste un classico gioco di rompicapo molto simile a un cruciverba, tranne per il fatto che viene fornito un elenco di parole e viene data una tavola quadrata composta da quadrati unitari, con alcuni quadrati oscurati proprio come un cruciverba, e alcuni quadrati contengono già una lettera già scritta. L'obiettivo è scrivere ogni parola dall'elenco una volta e una sola volta nel puzzle, in cui ogni parola è scritta in orizzontale (da sinistra a destra) o in verticale (dall'alto in basso) in quadrati consecutivi non oscurati e quando scrivi una parola , i due quadrati che fiancheggiano le estremità della parola devono essere oscurati o fuori dal tabellone. Anche per le lettere pre-scritte in alcuni quadrati, le parole scritte che si sovrappongono a questi quadrati devono rispettare la lettera pre-scritta.N×N

Ora, se assumiamo un alfabeto di dimensioni fisse per le parole, sta decidendo se possiamo riempire la scheda con una soluzione valida usando esattamente ogni parola nell'elenco una volta e solo una volta un problema NP-completo, se la lunghezza laterale della scheda è non riparato?

Risposte:


6

Ci scusiamo per aver risposto a un vecchio post.

Ci ho pensato e penso che anche il problema con un alfabeto fisso sia NP-completo.

Ridurrò il SAT 1-in-3 positivo a questa parola problema

Ieri ho avuto difficoltà a trovare idee per risolvere il problema. Ho avuto problemi a rendere ogni variabile diversa fino a quando ho guardato di nuovo la domanda e ho capito che hai permesso di avere quadrati con simboli piantati. Ciò ha semplificato molto la riduzione. L'altra mia idea era di avere parole di diversa lunghezza per ogni diversa variabile.

LA RIDUZIONE

Ora descriverò i gadget che useremo:

Gadget variabile

Etichettiamo ogni variabile con un indice numerico diverso e avremo un numero diverso per ogni variabile. Selezioniamo l'indice più grande e rappresentiamo il numero in binario, chiameremo questa catena binaria .n

Quindi creiamo due diverse parole verticali per ogni variabile. Tutte le parole avranno una lunghezza di (Solo se consentiamo parole duplicate nell'elenco di parole), dove | n | è la lunghezza della catena binaria n .3+|n||n|n

Ad esempio, lascia che l'indice più grande sia il numero . Quando trasformiamo questo numero in binario otteniamo la catena 100 in binario, questa catena ha una lunghezza di tre. Pertanto, ogni parola variabile avrà una lunghezza di 6 in questo esempio.41006

32n3

43

41

320013420014

1|n|

Dobbiamo copiare queste parole molte volte, avremo bisogno di una copia di ogni parola per ogni occorrenza di una variabile nell'istanza SAT. Ciò creerà duplicati nell'elenco di parole. Possiamo eliminare i duplicati aggiungendo un'altra catena binaria alla catena binaria che identifica in modo univoco la variabile. Questa nuova catena identificherà in modo univoco ogni occorrenza di una variabile.

Per fare ciò, assegniamo semplicemente ad ogni occorrenza della variabile un'altra catena binaria e olace quella catena alla fine della rappresentazione binaria della variabile.

niini|ni||ni|

Questo eliminerà i duplicati all'interno delle parole variabili.

x2

32010013 4201001432010103 4201010432010113 42010114

Gadget clausola

6

535354535453545353

435

mm|m||m|. Aggiungiamo ogni catena binaria alle parole della clausola che appartengono alla clausola.

Ora, vediamo una foto di un gadget di clausole nel tabellone:

Clausola di esempio

(x2x3x4)(x1x2x3)(x2x3x4)

4

Se non consentiamo duplicati all'interno dell'elenco di parole, dovremo modificare l'immagine.

5b5b5b10

b201010bb201110bb21001b

b

Vedi un esempio:

clausola, nessuna ripetizione

Gadget a coerenza variabile

Questo è un gadget che garantisce che il giocatore possa assegnare lo stesso valore solo a tutte le colonne letterali di una variabile.

Avremo un nuovo gadget per ogni variabile

Creeremo due nuove parole per ciascun gadget.

2kkx263 k64 k

x2

63636464

Se vogliamo evitare parole ripetute, nota che ciascun gadget di coerenza appartiene a una variabile diversa. Quindi possiamo aggiungere la catena binaria che identifica ogni variabile alle due parole che abbiamo creato per questo gadget.

Ora vediamo una foto di esempio di questo gadget:

Gadget a coerenza variabile

x2(x1x2x3)(x2x3x4)

3434. Possiamo mettere la parola rimanente di questo gagdet nell'altra riga

Se non consentiamo duplicati nell'elenco di parole, le parole all'interno dell'immagine di esempio saranno:

Per le file:

6b6b0106b6b010

Per le colonne:

b201001bb201010b

b

Vedi un esempio:

Gadget di coerenza, nessuna ripetizione

Gadget di dump della clausola

Questo è un gadget creato per posizionare le parole della clausola non utilizzate. Per fare ciò, dobbiamo solo posizionare due righe per ogni parola della clausola in una parte vuota del tabellone. Queste righe non sono collegate ad altre righe o colonne.

Con questo finiamo la riduzione, poiché abbiamo affermato che abbiamo bisogno solo di 6 simboli per la riduzione.

Esempio

Se la spiegazione precedente era confusa, ecco un'immagine di esempio di un'istanza di 1 in 3 SAT positiva che è stata ridotta a questa parola problema:

Scheda di esempio

Se non consentiamo parole ripetute:

Scheda di esempio, nessuna ripetizione

L'istanza che è stata ridotta è:

(x1x2x3)(x2x3x4)


Grazie per aver postato questo! Una sfortunata caratteristica di Stack Exchange è che è improbabile che le risposte lunghe vengano lette da chiunque, quindi è molto improbabile che tu ottenga molti voti dalla tonnellata di lavoro che hai svolto, qui. Proverò a leggere questo, ma, se sono onesto, ci sono buone probabilità che non ci riesca.
David Richerby,

2
@DavidRicherby jaja yes. Ho pensato a questa domanda per un po '. Ho pensato che quando ho pubblicato questa risposta tutti andranno a votarla. Non è successo. Beh non importa. Se hai domande sulla riduzione, puoi chiedermi
Rotia,

4

Penso che la seguente riduzione dal percorso diretto Hamiltoniano:

G=(V,E)s,tV

V{}V

vvvVvu(u,v)E

|V|

le scale

|E|(|V|1)

sstt

Ora, per riempire le scale, solo le parole dei vertici possono essere inserite all'interno dei gradini e per collegare due vertici, una parola di bordo deve essere inserita tra loro, che corrisponde a un bordo esistente nel grafico. I bordi non utilizzati possono essere inseriti nella seconda parte della scheda. La seconda direzione è banale.

Penso che funzioni (la prova di correttezza che ho disegnato è nella migliore delle ipotesi agitata a mano, ma comunque).


1
stN×NN

Questo è carino e sembra funzionare, ma la dimensione dell'alfabeto non è fissa come richiesto dal mio post originale. È possibile apportare una modifica per utilizzare un alfabeto di dimensioni fisse e continuare questa riduzione?
user2566092

uv
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.