¿Es Dominosa NP-Hard?


26

Dominosa es un juego de rompecabezas relativamente nuevo. Se juega en una grilla . Antes de que comience el juego, los huesos de dominó se colocan en la cuadrícula (lo que constituye un mosaico perfecto ) En el siguiente paso, los huesos de dominó se ocultan, dejando solo los números revelados. El objetivo del juego es recuperar la disposición original de los huesos de dominó. Puedes jugar el juego aquí: http://www.puzzle-dominosa.com/ :(n+1)×(n+2)(0,0),(0,1),,(n,n)

Reglas:

Las reglas son simples. Tienes que encontrar la ubicación de todas las fichas de dominó en la cuadrícula. Un dominó es un par de números. Solo puedes tener uno de cada par.

Tengo algunos algoritmos polinómicos que resuelven una parte relativamente pequeña del rompecabezas. También podría mostrar que las cuadrículas típicas de Dominosa tienen al menos soluciones.2n2+o(n)

¿Es Dominosa NP-Hard?


"El rompecabezas puede reducirse fácilmente a un problema SAT o ILP". Para demostrar la integridad de NP, ¿no querría al revés?
Dennis Meng

1
@DennisMeng El objetivo de las reducciones mencionadas en la pregunta es establecer que el problema está en NP. Entonces, todo lo que queda es demostrar que es NP difícil. Por cierto, uno no necesita reducciones para ver que el problema está en NP. La disposición de los dominós es en sí misma un testigo polinomial de la capacidad de resolución.

Supongo que el problema cuya integridad de NP está en cuestión es, dada una disposición de números, proviene de una disposición de dominó. Si el problema es realmente exhibir la disposición de los dominós (cuando existe), entonces el problema no es un problema de decisión y "NP completado" no tiene sentido.

@AndreasBlass One también podría considerar el problema mayor: dado un subconjunto de elementos de los dominós de 1 a n , y un gráfico G con 2 k vértices etiquetados de 1 a n , determine si es posible cubrirlo con los dominós dados. Si este problema está en P, entonces hay un algoritmo de tiempo P para recuperar el mosaico original, porque puede intentar eliminar un borde y probar en tiempo P si es posible completar la cuadrícula. k1nG2k1norte

1
Según un artículo de G. Nordh llamado NP-completeness de secuencias de Skolem multi generalizadas, el siguiente problema similar es NP-complete. Instancia: Un gráfico , una partición de los bordes en conjuntos disjuntos: E 1 , E 2 , . . . , E m , | m | | V | / 2 con | E i | 2 , i = 1 , ... , msol=(V,mi)mi1,mi2,...,mimetro,El |metroEl |El |VEl |/ /2El |miyoEl |2, yo=1,...,metrode modo que no haya dos bordes con la misma etiqueta que compartan un vértice. PREGUNTA: ¿Hay un subconjunto con | M | = | V | / 2 tal que no haya dos aristas en M que compartan un vértice común y tal que M contenga como máximo una arista de cada E i , i = 1 , ... , m ? METROmiEl |METROEl |=El |VEl |/ /2miyo, yo=1,...,metro
Yoav bar sinai

Respuestas:


9

Nota: Esta es una continuación y revisión de mi otra respuesta .

Problemas con la reducción.

Recordemos el problema de decisión:

¿Hay un mosaico perfecto que cubra una cuadrícula dada a con n mosaicos únicos?(norte+1)×(norte+2)norte

Entonces, para una cuadrícula , solo podemos usar n variables.(norte+1)×(norte+2)norte

Pero:

  • Nuestra reducción requiere muchas variables únicas, mucho más que .O(norte)
  • Además, nuestros cables son abiertos, lo que conduce a:
    • ¿Cómo sabemos que podemos enlosar las áreas abiertas?

Para resolver el primer problema, artificialmente hacemos el tablero de juego mucho más grande; esencialmente hacemos igual al número de variables que realmente necesitamos, luego creamos una cuadrícula de tamaño ( n + 1 ) × ( n + 2 ) , y colocamos nuestra cuadrícula en la esquina inferior izquierda. Esto conducirá a una explosión cuadrática.norte(norte+1)×(norte+2)

Para el segundo problema, debemos repensar un poco nuestros gadgets.

Puede parecer un poco desalentador demostrar que podemos colocar con éxito el resto del tablero de acuerdo con la regla. Comenzamos con la misma estrategia que se usaría para generar tableros de juego de tamaño :(norte+1)×(norte+2)

Primero generamos un conjunto de todos los mosaicos posibles. Todas estas fichas tendrán que colocarse en el tablero. Luego retiramos los azulejos y dejamos sus cuadrados.

Sin embargo, nuestros gadgets no garantizan que se colocará un conjunto particular de mosaicos; Los azulejos colocados dependen del estado. Por lo tanto, debemos modificar cuidadosamente los gadgets para garantizar que se eliminarán los mosaicos particulares, sin importar el estado elegido.

Repasemos nuestros gadgets entonces.

El cable y la puerta de la cláusula son problemáticos por dos razones.

  1. No sabemos que los cuadrados que rodean un cable o una puerta de cláusula se pueden colocar en mosaico correctamente; después de todo, algunos cables se pueden empujar hacia la izquierda, otros hacia la derecha, y el mosaico de los cuadrados de espacio en blanco restantes no es trivial. Nos referiremos a este problema como el problema del "flujo".
  2. No hay forma de saber qué fichas eliminar del conjunto de fichas; en un estado, un conjunto de cuadrados, en el cable o en la puerta de la cláusula, se colocará en mosaico, en otro estado, se colocará un conjunto de cuadrados completamente diferente.

Para resolver estos problemas:

  • Primero, generamos un conjunto de todos los mosaicos posibles. Todas estas fichas deberán colocarse en el tablero; A medida que los colocamos en el tablero, eliminaremos el mosaico del conjunto. Aunque es posible que al principio no sepamos , dado que todavía tenemos que describir completamente la formulación, podemos agregar todas las nuevas posibilidades de mosaico a medida que incrementamos n , según sea necesario. Se debe garantizar que todas las fichas que eliminemos de este conjunto se puedan colocar (al menos, se garantizará que se pueden colocar si la fórmula es satisfactoria). Llamamos a eliminar una ficha del conjunto de fichas, para "descargar" la ficha del conjunto de fichas, como para descargar nuestra obligación de colocarlo en el tablero de juego.nortenorte
  • Debemos diseñar cuidadosamente los gadgets para garantizar que se eliminarán los mosaicos particulares, sin importar el estado elegido.
  • Debemos cerrar nuestros gadgets para que no empujen los mosaicos por todo el tablero según su estado; más bien, todos sus estados solo deben ocupar un área particular bien definida.
    • Alternativamente, se debe garantizar que todos sus estados puedan ocupar un área bien definida; esto garantiza un mosaico satisfactorio, pero no garantiza que ocurra un mosaico particular. Esta es la misma forma en que se hace un juego de Dominosa:
      • Primero los mosaicos se generan en un conjunto;
      • Luego, las fichas se colocan en una configuración aleatoria,
      • A medida que se coloca cada mosaico, se elimina del conjunto de mosaicos.
      • Luego, las fichas se retiran del tablero, dejando atrás sus cuadrados.
      • Esto no garantiza que la configuración deseada se puede elegir,
      • Más bien, se garantiza que la configuración deseada es capaz de ser elegido, y por lo tanto existe una solución. Podemos hacer lo mismo aquí.
  • Después de colocar todos los gadgets de la formulación, en lugar de colocar cuadrados únicos de forma predeterminada, es decir, en todos los "espacios en blanco", nos aseguramos de que el espacio en blanco sea un área rectangular con una dimensión par, o dividir el espacio en blanco en rectángulos con una dimensión par , y simplemente colocamos en mosaico el espacio en blanco con los mosaicos restantes en el conjunto de mosaicos.
  • Después de colocar todas las fichas del conjunto, sabemos que todo se puede colocar.
    • Obviamente, algunos mosaicos se pueden colocar, como los de las paredes, otros solo se pueden colocar si la fórmula es satisfactoria, debido a la naturaleza de las relaciones entre los dispositivos.
  • Luego retiramos los azulejos y dejamos sus cuadrados.

Repasemos nuestros gadgets entonces.

Gadget de fuerza

Podemos hacer un número arbitrario de bloques de construcción asegurándonos de que no se puedan emparejar entre sí.

Por ejemplo, digamos que queremos forzar un mosaico , para que podamos usar 1 como bloque de construcción. (tenga en cuenta que 1 es una variable arbitraria, que queremos forzar como par, no necesariamente un bloque de construcción, ya que utilizamos el valor 1 anteriormente)(1,1)111

Para garantizar que nuestros reservas de bloque -building ( 1 , 1 ) , vamos a colocarlo contra la pared de fondo en la siguiente configuración: colocaremos el número reservado, llamémosla 1 contra la pared como una tachuela (con forma de ); 3 contra la pared y uno en la segunda fila en el medio. Luego colocaremos otros dos números, llamémoslos 2 y 3 ; Estos son exclusivos de este gadget. Los colocamos en la parte superior izquierda y derecha 1 .1(1,1)13231

Ilustrado a continuación, el borde negro compartido es la parte inferior del tablero de juego, descripción de izquierda a derecha.

  • Configuración del gadget. Cada y 3 aquí son exclusivos de este gadget.23
  • Los 3 posibles estados de mosaico del centro .1

ingrese la descripción de la imagen aquí

Después de hacer esto, podemos garantizar que nuestro gadget se puede colocar en mosaico con un conjunto específico de mosaicos, al tiempo que garantizamos que nuestro gadget debe forzar el par .(1,1)

  • Sabemos que debe ocurrir, porque los 3 posibles estados de mosaico de la mitad inferior 1 , en mosaico como ( 1 , 1 ) , como se ilustra en la figura de la derecha, arriba.(1,1)1(1,1)
  • Las fichas restantes se pueden colocar en mosaico como y ( 1 , 3 ) , cubriendo el dispositivo. Por lo tanto, podemos eliminar esos mosaicos de nuestro conjunto global de mosaicos. Ilustrado a continuación.(1,2)(1,3)

Descripción, de izquierda a derecha:

  • Izquierda, arriba: Estado izquierdo, Izquierda, abajo: Un mosaico válido de los cuadrados restantes.
  • Medio, arriba: Estado medio, Medio, abajo: Un mosaico válido de los cuadrados restantes.
  • Derecha, arriba: estado correcto, derecha, abajo: un mosaico válido de los cuadrados restantes.

ingrese la descripción de la imagen aquí

Tenga en cuenta que el mosaico de los cuadrados restantes no es forzado , ya que pueden formar mosaicos con vecinos cercanos en lugar de , pero dado que es un mosaico válido del tablero de juego en todos los estados, podemos eliminarlos del conjunto de mosaicos, y suponga que se colocarán en mosaico exactamente de esa manera. Como sabemos que hay un posible mosaico válido, tenemos al menos un mosaico posible del tablero de juego, si la fórmula es satisfactoria. Aunque no hay garantía de que estos se colocarán en mosaico de esta manera, sí hay una garantía de que el mosaico ( 1 , 1 ) será forzado.1(1,1)

Nota: si no está satisfecho con esto, o está confundido por la diferencia de "ser capaz de mosaico" frente a "ser forzado a mosaico", simplemente puede colocar una pared alrededor del dispositivo , de la misma manera que nosotros Haz un muro de 3 × 2 debajo para el gadget de cláusula.3×23×2

Este gadget no está cerrado porque no es necesario que lo esté (pero puede hacerlo si lo desea). No es necesario que sea así, porque tiene una configuración factible, que podemos eliminar del conjunto de teselas. Aunque podría ser posible hacer una configuración diferente, esto no afecta la satisfacción del problema.

Se garantiza que los siguientes mosaicos se colocarán en mosaico (por lo tanto, se pueden eliminar del conjunto de mosaicos): (1,1)

Los siguientes baldosas están garantizados para ser capaz a revestir (por lo tanto puede ser removido de la baldosa-set): (1,2),(1,3)

Si eliges cerrar este gadget con una pared, entonces también estarán garantizados.(1,2),(1,3)

Nuevas puertas de alambre y cláusula

Debido a los problemas de flujo y al vaciado del conjunto de mosaicos, necesitamos rediseñar un poco el cable.

Una forma de resolver el problema del flujo es hacer que el cable sea un circuito, en lugar de simples estados de izquierda a derecha; es decir, sería circular en lugar de una línea y, por lo tanto, si la parte superior del círculo se empuja hacia la derecha, la parte inferior se empujará hacia la izquierda. Esto resuelve el problema del flujo.

Siguiendo esta ruta, podemos cambiar el cable y la puerta de la cláusula para resolver ambos problemas.

Reservando y FTF

Vamos a presentar dos nuevos valores universales, y F . Estos dos valores son universales; valores reales en la cuadrícula, como los valores cuadrados 2 y 3 (ya que, por convención, reservamos 1 como bloque de construcción para muros), o lo que elija. Representan verdadero y falso, respectivamente.TF231

Reservamos a la fuerza los mosaicos , ( T , T ) , ( F , F ) , de la siguiente manera; Ilustración a continuación, descripción de izquierda a derecha:(T,F)(T,T)(F,F)

  • Usamos el mismo esquema que forzar cualquier mosaico , usando T como 1 . Cada 2 y 3 aquí son exclusivos de este gadget.(1,1)T123
  • Usamos el mismo esquema que forzar cualquier mosaico , usando F como 1 Cada 2 y 3 aquí son exclusivos de este gadget.(1,1)F123
  • Usamos el mismo esquema que forzar un mosaico , usando F como 1 en el centro y usando T en las otras ubicaciones de la tachuela. Esto obliga ( F , T ) a mosaico. 2 y 3 pueden formar mosaicos con T , por lo que los eliminamos del conjunto de mosaicos. Cada 2 y 3 aquí son exclusivos de este gadget.(1,1)F1T(F,T)23T23

ingrese la descripción de la imagen aquí

Cable

Cada cable comenzará y terminará con un valor, llamémoslo , que es único para cablear. Para cada cláusula en la que participa el cable, el cable tendrá dos valores de cable, x y x , que son únicos para cada cable, y participarán en la misma cláusula. Ilustración a continuación, con descripción de izquierda a derecha.UNAXX

  • Un cable que participa en una cláusula. El cable tiene una altura de y una longitud de 2 p + 3 , donde p es el número de cláusulas en las que participa el cable. El cable está acolchado por dos cuadrados A a la izquierda y dos a la derecha. Está, por supuesto, rodeado por una pared en todos los lados, indicado por el contorno azul. Tenga en cuenta que el 1 es exclusivo de este cable y solo se utilizará en el cable y en la cláusula en la que participa.22pags+3pagsUNA1

ingrese la descripción de la imagen aquí

A continuación se ilustran los dos estados, descripciones de izquierda a derecha.

  • Un cable que participa en una cláusula, en el estado verdadero. El cable se considera verdadero, cuando los cuadrados se combinan con cuadrados T y los cuadrados x ′ ′ se combinan con cuadrados F. Se considera falso en el otro estado, donde se invierte el mosaico. Observe cómo se fuerza el mosaico una vez que se selecciona el mosaico A : ( T , F ) ya se han forzado antes, por lo tanto, el resto de los mosaicos deben ser horizontales.XTXFUNA(T,F)
  • El mismo cable en estado falso.

ingrese la descripción de la imagen aquí

Al participar en más cláusulas, hay más valores , y x , un par para cada cláusula en la que participa el cable. Alternan estar en la parte superior e inferior, al igual que los cuadrados T y F que separan cada x , x par.XXTFX,X

ingrese la descripción de la imagen aquí

Los dos estados correspondientes.

ingrese la descripción de la imagen aquí

Este gadget está cerrado , por lo que no hay "problema de flujo".

Observe cómo en cualquier estado, recopilamos las siguientes fichas, sin importar el estado: , ( A , T ) , ( A , F ) .(UNA,UNA)(UNA,T)(UNA,F)

Sin embargo, hay algunos mosaicos de los que no estamos seguros; en un estado podemos eliminar del conjunto de fichas, mientras que en otro estado podemos eliminar ( 1 , F ) , ( 1 , T ) , ( 2(1,T),(1,F),(2,T),(2,F)...del conjunto de fichas, entonces, ¿qué fichas podemos eliminar realmente? La respuesta es: la puerta de la cláusula tiene el mismo problema, pero con el conjunto opuesto de mosaicos. Siempre recogerá los mosaicos restantes, opuestos y no recopilados, como veremos en la siguiente sección. Como cada uno de estos está emparejado con una puerta de cláusula, podremos eliminarlos a ambos.(1,F),(1,T),(2,F),(2,T)...

Cláusula

A continuación, crearemos la primera iteración de la nueva puerta de cláusula. Consiste en un gadget de , encerrado por paredes. Dentro del dispositivo, colocamos una F en el centro superior y dos cuadrados T en las esquinas inferiores; uno en la esquina inferior izquierda y uno en la esquina inferior derecha. Los cuadrados restantes serán valores que representan variables de cable de tres cables diferentes. Llamemos a estos un , b , y c . La F se verá obligada a emparejarse con una de las variables de cable, y las variables de cable restantes se emparejarán con los valores de T. Ilustraciones a continuación, descripciones de izquierda a derecha.2×3FTa,b,cFT

  • Izquierda: la configuración para la primera iteración de la nueva cláusula-puerta.
  • Derecha Los tres estados posibles del mosaico F

ingrese la descripción de la imagen aquí

Estos tres estados conducen a tres posibles inclinaciones. Ilustración a continuación, descripciones de izquierda a derecha.

  • Izquierda, superior : mosaico izquierda, izquierda, inferior: mosaico de los cuadrados restantes.F
  • Medio, arriba : mosaico a la derecha, Medio, abajo: Mosaico de los cuadrados restantes.F
  • Derecha, arriba : mosaico, Derecha, abajo: Mosaico de los cuadrados restantes.F

ingrese la descripción de la imagen aquí

Como la se emparejará con una de las variables de cable en la cláusula , esa variable de cable ya no se puede emparejar con F en el cable ; forzando así el cable a verdadero. Por el contrario, las variables de cable restantes que se agrupan con T se verán obligadas a mosaico con F dentro de sus cables. Estas son exactamente las mismas restricciones que una cláusula 1- en- 3 - S A T.FF TF1-in-3-SAT

Nota, y c son de alambre-variables, pero cada uno que podrían referirse a una x o un x ' alambre variable; usar una x es esencialmente negar la variable del cable.a,b,cxxx

Una adición: para cumplir con la obligación de saber qué fichas pueden eliminarse del conjunto de fichas, tenemos que "duplicar y contraponer" la cláusula. Lo que quiero decir con esto, es hacer otro aparato, con 3 variables adicionales que representan las negaciones de un , b , y c . Llamemos a estos un " , b ' , y c ' . Estos deben ser los valores negados de cable variable de a , b 3×23a,b,ca,b,c Y c . Estedispositivo 3 × 2 es diferente, ya que tendrá una T en el centro y dosvalores F en las esquinas; exactamente lo opuesto al gadget de la cláusula descrito hasta ahora. Al "duplicar" la cláusula como esta, volvemos a agregar las mismas restricciones que el gadget descrito anteriormente. Sin embargo, también descargamos todas las combinaciones de ( T , x ) , ( T , x ) , ( F , x ) , ( F , xa,b,c3×2TF de la baldosa-set, para cada variable (y por tanto para una , b ,y c así, porque son después de todo, alambre-variables). A continuación se ilustran descripciones de izquierda a derecha.(T,x),(T,x),(F,x),(F,x)a,b,c

  • Una cláusula "doble y contrapositiva". La sección inferior es la cláusula descrita anteriormente; la sección superior es la cláusula contrapositiva recientemente descrita. La nueva cláusula tiene exactamente las mismas restricciones lógicas; Es el contrapositivo de la cláusula inferior. Juntos, estos dispositivos combinados y el cable descargan todas las combinaciones de del conjunto de fichas, para cada variable de cable participa en la cláusula(T,x),(F,x),(T,x),(F,x)
  • La línea azul en el centro de la figura más a la izquierda está ahí para facilitar la visualización; en realidad se puede eliminar sin permitir más estados.

ingrese la descripción de la imagen aquí

Entonces, tomemos un ejemplo, para mostrar que todas las fichas se descargan según lo prometido. Ilustrado a continuación, descripción de izquierda a derecha.

  • Figura de un cable que participa en una sola cláusula; Se elige un estado para la cláusula. Aquí, estamos usando , mientras que a y b representan otros valores de cable en esta cláusula.1=bab
  • Para el estado dado en la cláusula, el valor se obliga a emparejarse con la T vecina .1T
  • Esto hace que el cable se vea obligado a tener un valor verdadero (se puede ver como la variable positiva del cable se ve obligada a emparejarse con la , y la variable negativa está obligada a emparejarse con la F , como se explicó anteriormente).TF
  • Esto obliga al en la cláusula contrapositive (la sección superior de la cláusula) para ser emparejados con T dentro de la cláusula. Ahora, si nos fijamos en el cable, se garantiza que se descargarán todos los mosaicos dentro del cable: descargados en el propio cable o en el dispositivo de cláusula correspondiente. En este estado, tenemos los mosaicos, ( A , A ) , ( A , T ) , ( A , F ) , ( 1 , T ) , ( 11T(A,A)(A,T)(A,F)(1,T) , ( 1 , F ) y ( 1 , T ) .(1,F)(1,F)(1,T)

ingrese la descripción de la imagen aquí

Al probar el otro estado, obtenemos la siguiente ilustración, una descripción de izquierda a derecha.

  • La cláusula está en el otro estado, mosaico en una de dos formas.(1,T
  • Por lo tanto, se fuerza en el cable,(1,F
  • Lleva el resto del cable a la loseta correspondientemente y valora el cable como falso.
  • Finalmente, en la sección contrapositiva / superior del gadget de cláusula, debe colocarse en mosaico, porque ( 1 , T ) se toma en el cable. En este estado, tenemos los mosaicos, ( A , A ) , ( A , T ) , ( A , F ) , ( 1 , T ) , ( 1 , F(1,F)(1,T)(UNA,UNA)(UNA,T)(UNA,F)(1,T) , ( 1 , F ) y ( 1 , T ) . Estas son las mismas fichas descargadas que en el otro estado.(1,F)(1,F)(1,T)

ingrese la descripción de la imagen aquí

Por lo tanto, en cualquier estado, descargamos los mismos mosaicos. Por lo tanto, el cable y la cláusula juntos descargan exitosamente mosaicos específicos si hay una asignación satisfactoria.

Este gadget está cerrado , por lo que no habrá un problema de flujo. Se garantiza que el gadget de cláusula junto con el gadget de cable siempre descargan los mismos valores de par de mosaicos , por lo que podemos descargarlos incluso si no sabemos de qué manera se mosaicos.

Ahora todos nuestros gadgets cumplen los criterios.

Formulación

En nuestra formulación final, creamos tres filas de gadgets, cada una separada por una pared horizontal.

  • En la parte inferior, colocamos los dispositivos de forzado, que son dos fichas de altura. Necesitamos un aparato para forzar el bloque de construcción, y para las combinaciones de y F . Colocamos los dispositivos de forzado directamente uno al lado del otro.TF
  • En la fila central, colocamos los dispositivos de alambre, horizontalmente, que son dos fichas de altura. Los dispositivos de alambre deben estar separados entre sí con una pared vertical.
  • En la fila superior, colocamos dispositivos de cláusula, que son cuatro fichas de alto. Los dispositivos de la cláusula deben estar separados entre sí por una pared vertical.

Siguen las ilustraciones, descripciones sobre cada figura. Haga clic en las imágenes para obtener una resolución completa. El código fuente para reproducir / generar las imágenes aparece en la parte inferior de la página.

Usando la fórmula como ejemplo, tenemos un solución satisfactoria ( ¬ x 1 , x 2 , x 3 , ¬ x 4 )Φ(X)=(X1,¬X2,X3)(X2,¬X3,X4 4)(X1,X2,¬X4 4)(¬X1,X2,X3,¬X4 4) como testigo

Primero comenzamos con las paredes horizontales que separan las filas de gadgets. Mostramos los cuadrados y los pares que se ven obligados a enlosarse dentro de las paredes.

ingrese la descripción de la imagen aquí

A continuación, mostramos los gadgets. El contorno azul representa los bordes de los gadgets; azul punteado para los artilugios forzados, ya que no estarán rodeados de paredes. Tenga en cuenta que la línea en el medio del gadget de la cláusula no está rodeada por un muro; está ahí para facilitar la visualización; quitar la línea no permite que ocurran más estados en la cláusula, como se explicó anteriormente, pero mostramos la línea azul para esta demostración. Nota: que usamos nombres cuadrados para dar legibilidad semántica a los números, cuando corresponda. Cada nombre representa un valor numérico.

ingrese la descripción de la imagen aquí

Aquí rellenamos las paredes verticales.

ingrese la descripción de la imagen aquí

Aquí completamos la solución del testigo; es decir, esta es la solución de mosaico si se usa la solución SAT para generarla.

ingrese la descripción de la imagen aquí

norte

ingrese la descripción de la imagen aquí

Aquí completamos los cuadrados restantes con un mosaico trivial válido.

ingrese la descripción de la imagen aquí

Aquí mostramos la esquina inferior derecha de la cuadrícula.

ingrese la descripción de la imagen aquí

Aquí mostramos la esquina superior derecha de la cuadrícula. Observe cómo los mosaicos verticales ya no se ajustan; así que colocamos la fila superior en mosaico horizontalmente, si es necesario.

ingrese la descripción de la imagen aquí

Y finalmente la esquina superior izquierda.

ingrese la descripción de la imagen aquí

La generación de todo el tablero de juego a la vez a través de TeX falla con errores de memoria insuficiente de pdflatex, por lo que si desea verlo, tendría que generar clips y parcharlos. Asegúrese de revisar el visor del cuaderno .


Fuentes TikZ

Generador de juegos:

  • graphtex.py

    Convierte TeX a svg, usando pdflatex, pdfcairo (poppler) y rsvg-convert (libsvg)

  • dominosa.py

    Contiene la lógica de conversión, la verificación de la solución del juego y la lógica de dibujo

  • dominosa_demo.py

    Una demostración ejecutable que genera las imágenes utilizadas en la respuesta anterior. Vuelca imágenes al directorio de trabajo actual.

  • dominosa_demo.ipynb

    Una demostración de ipython que genera las imágenes utilizadas en la respuesta anterior.


1
Esto es espectacular, muchas gracias ..
Yoav bar sinai

2
Por favor, dime que tienes una versión arXiv de eso. Se puede ser más razonable para esta plataforma para incluir un esbozo y un enlace al documento completo.
Raphael

22

reOMETROyonorteOSUNA


Jugar el juego es un problema de optimización; encontrar un mosaico de dominó válido que cubra todos los cuadrados. La versión de decisión de este problema es:

¿Hay un mosaico perfecto que cubra una cuadrícula dada a ( n + 1 ) × ( n + 2 ) con n(norte+1)×(norte+2)norte

Obviamente, el problema de optimización, el problema de encontrar una solución para el juego es al menos tan difícil o más difícil que el problema de decisión.

1-3-en-SUNAT

PAGS=nortePAGSreOMETROyonorteOSUNA

1-3-en-SUNATreOMETROyonorteOSUNA

Introducción

3-SUNATdoyoRdoUyoTSUNAT

doyoRdoUyoTSUNATPAGSLUNAnorteUNAR-doyoRdoUyoTSUNAT

3-SUNATPAGSLUNAnorteUNAR-doyoRdoUyoTSUNAT3-SUNATPAGSLUNAnorteUNAR-doyoRdoUyoTSUNAT

PAGSLUNAnorteUNAR-3-SUNATPAGSLUNAnorteUNAR-doyoRdoUyoTSUNAT

3-SUNAT

1-en-3-SUNAT1-en-33-SUNAT

METROOnorteOTOnortemi-1-en-3-SUNAT

METROOnorteOTOnortemi-1-en-3-SUNATPAGSLUNAnorteUNAR-METROOnorteOTOnortemi-1-en-3-SUNATdoyoRdoUyoTSUNAT

PAGSROsiLmiMETROMETROOnorteOTOnortemiPAGSLUNAnorteUNAR1-en-3nortePAGS-hunarre3-SUNATNoNoNoMETROOnorteOTOnortemi-3-SUNATNoNoNo1PAGSLUNAnorteUNAR-3-SUNATNoNo21-en-3-SUNATNoNo3PAGSLUNAnorteUNAR1-en-3-SUNATNo4 4METROOnorteOTOnortemi-1-en-3-SUNATNo5 5PAGSLUNAnorteUNAR-METROOnorteOTOnortemi-3-SUNATNo¡Sí!6 6PAGSLUNAnorteUNAR-METROOnorteOTOnortemi-1-en-3-SUNAT7 7
  1. Eliminación literal pura
  2. Teorema de dicotomía de Schaefer
  3. El problema de los representantes compatibles
  4. La triangulación de peso mínimo es NP-Hard
  5. Teorema de dicotomía de Schaefer
  6. Encontrar particiones automáticas perfectas es NP-hard
  7. Particiones óptimas del espacio binario en el plano

3-SUNAT

¿Qué es un "gadget"? Un dispositivo es una construcción en el problema, que es útil como un bloque de construcción para construir puertas / cables / cláusulas. Algunos dispositivos tendrán un conjunto restringido de estados; por ejemplo, un gadget con dos estados se puede usar como variable; un estado es "verdadero" y el otro es "falso". Un dispositivo con dos estados, que puede ser "largo", puede doblarse y dividirse, es útil como un cable, si puede interactuar con una variable y verse obligado a extender el estado de la variable a otra ubicación. Un dispositivo con exactamente tres estados tal vez se pueda usar como una cláusula; si se puede usar para restringir "uno de tres" cables a través de cada uno de sus tres estados. Del mismo modo, uno podría querer todo tipo de puertas lógicas, como un no-gadget, un or-gadget, un xor-gadget, etc.

Un bloque de construcción

  • 11
  • 11
  • 1

ingrese la descripción de la imagen aquí

3   1(1,1) (1,1)

4 45 5(1,1)

Una pared

4 4

Imágenes a continuación, de izquierda a derecha:

  1. 1
  2. 1
  3. 1
  4. La línea de la pared, dibujada para enfatizar.

ingrese la descripción de la imagen aquí

Un intento inicial de un cable

1

Mostrando solo los bordes de la pared, esto es lo que obtenemos en las siguientes figuras (de izquierda a derecha):

  • Colocando dos paredes opuestas entre sí.
  • Poniendo números únicos dentro.
  • Dos más a la derecha: dos posibles estados del cable.

ingrese la descripción de la imagen aquí

Cómo funciona:

No puede haber agujeros en el tubo / cable, por lo tanto, si las baldosas se desplazan hacia arriba, entonces todas deben desplazarse hacia arriba, a lo largo del tubo; si se desplazan hacia abajo, los "chupará" a todos. Por lo tanto, podemos enviar una "señal" de un lado del cable al otro; en otras palabras, propaga un valor.

¡Por lo tanto, ahora podemos propagar un valor a través de largas distancias!

Las limitaciones restantes son:

  • No podemos doblar un alambre
  • No podemos dividir un cable
  • No podemos cruzar cables,
  • Es posible que tengamos problemas de diseño molestos porque debemos tener cuidado con la paridad de la longitud del cable.

Doblar un alambre , parte 1: pared debajo

El siguiente problema es que necesitamos poder doblar un cable, no solo seguir recto ...

Asi que. Dividiremos la parte de flexión en dos partes; La parte superior y la parte inferior. Primero la parte inferior. Ignora la parte superior de la curva, lo haremos más tarde.

Las siguientes figuras muestran un pequeño problema con la flexión; la parte superior del cable está "suelta", parece difícil hacer una pared que gire 90 grados.

De izquierda a derecha:

  • La parte superior de un cable está "suelta".
  • ¿Qué pasa si tratamos de doblarlo? queremos cablear para estar entre las líneas azules. Nuevamente, ignore la parte superior de la curva, lo haremos más tarde.
  • 1

ingrese la descripción de la imagen aquí

Una solución es la siguiente:

  • (X,1)XqX1111

Ilustración a continuación, descripción de izquierda a derecha:

  • La situación con el problema.
  • q1
  • 1

ingrese la descripción de la imagen aquí

qq

De izquierda a derecha:

  • La construcción actual.
  • q

ingrese la descripción de la imagen aquí

11

(r,1)r1

Ilustración a continuación, de izquierda a derecha:

  • Nuestra construcción actual.
  • 1
  • r1

ingrese la descripción de la imagen aquí

Y finalmente tenemos nuestra curva inferior. Ilustración a continuación, descripciones, de izquierda a derecha:

  • Izquierda: Nuestra construcción final para una curva.
  • Derecha: cómo continuar el cable hacia la izquierda.

ingrese la descripción de la imagen aquí

Doblar un alambre , Parte 2: Pared arriba

Las paredes para hacer la esquina superior de la curva son mucho más simples. Simplemente alinee una pared vertical con una pared horizontal. Ilustración a continuación, descripción de izquierda a derecha:

  • La curva de alambre que queremos hacer.
  • Coloque la sección vertical de los cuadrados de la pared hacia abajo.
  • Alicatar los cuadrados de la pared vertical.
  • Colocación y alicatado del muro horizontal; Puede encontrarse con la pared vertical y formar una esquina.

ingrese la descripción de la imagen aquí

Ahora debe estar convencido de que podemos colocar y doblar cables. Sin embargo, todavía no podemos dividir o cruzar cables, más sobre eso más adelante.

Las limitaciones restantes son:

  • No podemos doblar un alambre
  • No podemos dividir un cable
  • No podemos cruzar cables,
  • Es posible que tengamos problemas de diseño molestos porque debemos tener cuidado con la paridad de la longitud del cable.

Un alambre valioso

7 7TFTFcuadrado que los separa. Ilustrado a continuación, descripción de izquierda a derecha:

  • Izquierda: un cable.
  • Derecha: la configuración cuadrada.

ingrese la descripción de la imagen aquí

TF

  • Izquierda, derecha: los dos estados del cable valorado ;
  • T
  • F

ingrese la descripción de la imagen aquí

3-SUNAT

Las limitaciones restantes son:

  • No podemos dividir un cable
  • No podemos cruzar cables,
  • Es posible que tengamos problemas de diseño molestos porque debemos tener cuidado con la paridad de la longitud del cable.

Sin puerta

Un no-gate es innecesario ya que es implícito: simplemente usando una longitud de cable off-by-one podemos negar el valor del cable.

Una puerta de cláusula

3

Ilustraciones a continuación, descripciones de izquierda a derecha:

  • El diseño del cable del gadget de cláusula. Hace un signo "más"; La unión de 3 cables en un punto.
  • Los tres estados de la plaza central. Cada uno de estos estados "tira" exactamente un cable hacia el centro, el punto esencial de la puerta; actuar como un1-en-3-SUNAT

ingrese la descripción de la imagen aquí

Ahora echemos un vistazo a los diferentes estados. Ilustración a continuación, descripción de izquierda a derecha:

  • El cable izquierdo se tira hacia el centro; los otros dos son expulsados.
  • El cable inferior se tira hacia el centro; los otros dos son expulsados.
  • El cable inferior derecho se tira hacia el centro; los otros dos son expulsados.

ingrese la descripción de la imagen aquí

31-en-3

Las limitaciones restantes son:

  • No podemos dividir un cable
  • No podemos cruzar cables,
  • Es posible que tengamos problemas de diseño molestos porque debemos tener cuidado con la paridad de la longitud del cable.

Dividiendo un alambre

TTTT1T2una,si,douna,si,doTuna,si,do

Ilustración a continuación, descripción de izquierda a derecha:

  • Diseño de cable. Tenga en cuenta que las paredes son un poco gruesas, por lo que los cables se acercan para fines ilustrativos; en realidad, están un poco más separados.
  • Tuna,si,do

ingrese la descripción de la imagen aquí

una,siuna,siuna,si

  • Ejemplo de estado del cable izquierdo, valorado como verdadero.
  • Mal estado del segundo cable; intenta ser valorado de manera diferente, pero luego obtiene un par duplicado.
  • Buen estado del segundo cable, ahora tienen el mismo valor y no hay pares duplicados.

ingrese la descripción de la imagen aquí

una,si,do

Las limitaciones restantes son:

  • No podemos dividir un cable
  • No podemos cruzar cables,
  • Es posible que tengamos problemas de diseño molestos porque debemos tener cuidado con la paridad de la longitud del cable.

¡Un cable inalámbrico!

Bueno, para mi deleite, ¡dividir un cable resultó ser inalámbrico! Es decir, en las ilustraciones anteriores, coloco los cables uno al lado del otro, ¡pero no hay razón para hacerlo! Podemos colocar los cables en cualquier lugar de la cuadrícula, y todavía estarían "enredados", por así decirlo. Esto nos ahorra muchos problemas:

  • 3-SUNAT
  • Tenemos que hacer cualquier diseño molesto, llevar los cables a sus ubicaciones, ¡es fácil! ¡Como un teléfono inalámbrico! ¡Libertad!
  • No tenemos que preocuparnos por el diseño de paridad de longitud de cable / off-by-one.
  • Podemos hacer una reducción bastante mínima; cada una de las variables obtendrá un solo conjunto de tiras de cable largas, con muchas conexiones inalámbricas a lo largo de los cables. Estas conexiones serán a puertas de cláusula, que residirán en su propia ubicación en la red. La cláusula ahora solo consistirá en el dispositivo de la cláusula y tres cables inalámbricos que sobresalen de él.

Las limitaciones restantes son:

  • No podemos cruzar cables,
  • Es posible que tengamos problemas de diseño molestos porque debemos tener cuidado con la paridad de la longitud del cable.

La reducción, primer intento

Φ(X)=yodoyo1-en-3-SUNAT

  • XjX , coloque un solo cable largo, en filas, cerca del fondo de la cuadrícula.
  • doyoΦ(X)
  • Xjdoyo3una,si,do

Cómo se vería:

  • una,si,do

ingrese la descripción de la imagen aquí

Y así es como se vería la cuadrícula:

  • Figura: El tablero de juego resultante. Las variables están alineadas en filas en la parte inferior. Las cláusulas se extienden por la parte superior. Este diseño da una explosión cuadrática; Un diseño más inteligente puede evitar la explosión cuadrática.

ingrese la descripción de la imagen aquí

Detalles de último minuto

Recordemos el problema de decisión:

¿Hay un mosaico perfecto que cubra una cuadrícula dada a ( n + 1 ) × ( n + 2 ) con n(norte+1)×(norte+2)norte

(norte+1)×(norte+2)norteO(norte)

  • O(El |XEl |×El |Φ(X)El |)O(norte)norte
  • 1O(norte)

Fuentes gráficas


[unayo,siyo]unayo,siyo=1 ..norte

Moveré todos estos comentarios a mi respuesta y lo haré más completo en mi próxima gran revisión.
Realz Slaw

ok, lo espero!
Vor

@RealzSlaw, muchas gracias! Todavía no tuve tiempo de leer esto, pero se ve muy bien.
Yoav bar sinaí

@RealzSlaw, ¿hay alguna manera de contactarlo directamente?
Yoav bar sinai
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.