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:
(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
4
Se non consentiamo duplicati all'interno dell'elenco di parole, dovremo modificare l'immagine.
5b5b5b10
b201010bb201110bb21001b
b
Vedi un esempio:
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.
2∗kkx263 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:
x2(x1∨x2∨x3)∧(x2∨x3∨x4)
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 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:
Se non consentiamo parole ripetute:
L'istanza che è stata ridotta è:
(x1∨x2∨x3)∧(x2∨x3∨x4)