Perdón por responder una publicación anterior.
He estado pensando en ello y creo que el problema con un alfabeto fijo es NP-completo también.
Voy a reducir el SAT positivo 1 en 3 a este problema verbal
Ayer tuve problemas para encontrar ideas para resolver el problema. Tuve problemas para hacer que cada variable fuera diferente hasta que volví a mirar la pregunta y me di cuenta de que permitías tener cuadrados con símbolos plantados. Esto simplificó mucho la reducción. Mi otra idea era tener palabras de diferente longitud para cada variable diferente.
LA REDUCCIÓN
Ahora voy a describir los gadgets que vamos a usar:
Gadget variable
Rotulamos cada variable con un índice numérico diferente y tendremos un número diferente para cada variable. Elegimos el índice más grande y representamos el número en binario, llamaremos a esta cadena binaria .norte
Luego creamos dos palabras verticales diferentes para cada variable. Todas las palabras tendrán una longitud de (Solo si permitimos palabras duplicadas en la lista de palabras), donde | n | es la longitud de la cadena binaria n .3 + | n |El | n |norte
Por ejemplo, que el índice más grande sea el número . Cuando transformamos este número en binario obtenemos la cadena 100 en binario, esta cadena tiene una longitud de tres. Por lo tanto, cada palabra variable tendrá una longitud de 6 en este ejemplo.4 41006 6
32n3
43
41
320013420014
1|n|
Tenemos que copiar estas palabras muchas veces, necesitaremos una copia de cada palabra para cada aparición de una variable en la instancia SAT. Esto creará duplicados en la lista de palabras. Podemos deshacernos de los duplicados agregando otra cadena binaria a la cadena binaria que identifica de forma exclusiva la variable. Esta nueva cadena identificará de manera única cada aparición de una variable.
Para hacer eso, simplemente asignamos a cada ocurrencia de la variable otra cadena binaria y ubicamos esa cadena al final de la representación binaria de la variable.
niini|ni||ni|
Esto eliminará los duplicados dentro de las palabras variables.
x2
32010013 4201001432010103 4201010432010113 42010114
Cláusula gadget
6
535354535453545353
435
mm|m||m|. Anexamos cada cadena binaria a las palabras de la cláusula que pertenecen a la cláusula.
Ahora, veamos una imagen de un dispositivo de cláusula en el tablero:
(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
4
Si no permitimos duplicados dentro de la lista de palabras, tendremos que modificar la imagen.
5b5b5b10
b201010bb201110bb21001b
b
Ver un ejemplo:
Gadget de consistencia variable
Este es un gadget que garantiza que el jugador solo puede asignar el mismo valor para todas las columnas literales de una variable.
Tendremos un nuevo gadget para cada variable
Crearemos dos palabras nuevas para cada gadget.
2∗kkx263 k64 k
x2
63636464
Si queremos evitar palabras repetidas, observe que cada gadget de coherencia pertenece a una variable diferente. Entonces podemos agregar la cadena binaria que identifica cada variable a las dos palabras que creamos para este gadget.
Ahora veamos una imagen de ejemplo de este gadget:
x2(x1∨x2∨x3)∧(x2∨x3∨x4)
3434. Podemos colocar la palabra restante de este gagdet en la otra fila
Si no permitimos duplicados en la lista de palabras, las palabras dentro de la imagen de ejemplo serán:
Para las filas:
6b6b0106b6b010
Para las columnas:
b201001bb201010b
b
Ver un ejemplo:
Cláusula volcado gadget
Este es un gadget creado para colocar las palabras de cláusula no utilizadas. Para hacer eso, solo tenemos que colocar dos filas para cada palabra de la cláusula en una parte vacía del tablero. Estas filas no están conectadas a ninguna otra fila o columna.
Con esto terminamos la reducción, ya que afirmamos que solo necesitamos 6 símbolos para la reducción.
Ejemplo
Si la explicación anterior era confusa, aquí hay una imagen de ejemplo de una instancia de SAT positivo 1 en 3 que se ha reducido a este problema verbal:
Si no permitimos palabras repetidas:
La instancia que se ha reducido es:
(x1∨x2∨x3)∧(x2∨x3∨x4)
Creo que la siguiente reducción del camino Hamiltoniano dirigido funciona:
Ahora, para llenar las escaleras, solo se pueden poner palabras de vértice dentro de los escalones, y para conectar dos vértices, se debe colocar una palabra de borde entre ellos, que corresponde a un borde existente en el gráfico. Los bordes no utilizados se pueden poner en la segunda parte del tablero. La segunda dirección es trivial.
Creo que esto funciona (la prueba de corrección que dibujé es agitada a mano en el mejor de los casos, pero aún así).
fuente