Dominosa NP-Hard?


26

Dominosa est un jeu de puzzle relativement nouveau. Il est joué sur une grille . Avant le début du jeu, les os de dominos sont placés sur la grille (constituant un pavage parfait ). Dans l'étape suivante, les os de dominos sont cachés, ne laissant que les chiffres révélés. Le but du jeu est de récupérer l'arrangement original des os de dominos. Vous pouvez jouer au jeu ici: http://www.puzzle-dominosa.com/ :(n+1)×(n+2)(0,0),(0,1),,(n,n)

Règles:

Les règles sont simples. Vous devez trouver l'emplacement de tous les dominos sur la grille. Un domino est une paire de chiffres. Vous ne pouvez avoir qu'une seule de chaque paire.

J'ai quelques algorithmes polynomiaux qui résolvent une partie relativement petite du puzzle. Je pourrais également montrer que les grilles Dominosa typiques ont au moins solutions.2n2+o(n)

Dominosa NP-Hard?


"Le casse-tête peut être facilement réduit à un problème SAT ou ILP." Pour prouver l'exhaustivité de NP, ne voudriez-vous pas l'inverse?
Dennis Meng

1
@DennisMeng Le but des réductions mentionnées dans la question est d'établir que le problème est en NP. Il ne reste donc plus qu'à prouver que c'est NP difficile. Soit dit en passant, on n'a pas besoin de réductions pour voir que le problème est dans NP. L'arrangement des dominos est lui-même un témoin de solvabilité de taille polynomiale.

Je suppose que le problème dont l'exhaustivité de NP est en cause est, étant donné un arrangement de nombres, vient-il d'un arrangement de dominos. Si le problème est d'exposer réellement l'arrangement des dominos (quand il existe), alors le problème n'est pas un problème de décision et "NP complete" n'a pas de sens.

@AndreasBlass On pourrait également considérer le problème plus large: étant donné un élément sous-ensembles des dominos de 1 à n , et un graphique G avec 2 k sommets étiquetés 1 à n , déterminer s'il est possible de le couvrir avec les dominos donnés. Si ce problème se trouve dans P, il existe un algorithme P-time pour récupérer le pavage d'origine, car vous pouvez essayer de supprimer un bord et de tester en P-time s'il est possible de terminer la grille. k1nG2k1n

1
Selon un article de G. Nordh intitulé NP-exhausteness of generalized multi Skolem séquences, le problème similaire suivant est NP-complete. Instance Un graphe , une partition des bords en ensembles disjoints: E 1 , E 2 , . . . , E m , | m | | V | / 2 avec | E i | 2 , i = 1 , , mG=(V,E)E1,E2,...,Em,|m||V|/2|Ei|2, i=1,,mde telle sorte qu'il n'y ait pas deux arêtes avec la même étiquette partageant un sommet. QUESTION: Existe-t-il un sous-ensemble avec | M | = | V | / 2 telle que deux arêtes dans M ne partagent pas un sommet commun et telle que M contienne au plus une arête de chaque E i , i = 1 , , m ? ME|M|=|V|/2Ei, i=1,,m
Yoav bar sinai

Réponses:


9

Remarque: Ceci est une continuation et une révision de mon autre réponse .

Problèmes avec la réduction

Rappelez-vous le problème de décision:

Existe-t-il un carrelage parfait couvrant une grille donnée avec n carreaux uniques?(n+1)×(n+2)n

Donc pour une grille , nous ne pouvons utiliser que n variables.(n+1)×(n+2)n

Mais:

  • Notre réduction nécessite beaucoup de variables uniques, bien plus que .O(n)
  • De plus, nos fils sont ouverts, ce qui conduit à:
    • Comment savons-nous que nous pouvons carreler les zones ouvertes?

Pour résoudre le premier problème, nous agrandissons artificiellement le plateau de jeu; nous faisons essentiellement égal au nombre de variables dont nous avons réellement besoin, puis créons une grille de taille ( n + 1 ) × ( n + 2 ) , et plaçons notre grille dans le coin inférieur gauche. Cela conduira à une explosion quadratique.n(n+1)×(n+2)

Pour le deuxième problème, il faut repenser un peu nos gadgets.

Il peut sembler un peu intimidant de prouver que nous pouvons réussir à carreler le reste du plateau selon la règle. Nous commençons donc avec la même stratégie que celle utilisée pour générer des plateaux de jeu de taille :(n+1)×(n+2)

Tout d' abord , nous générons un ensemble de toutes les tuiles possibles. Toutes ces tuiles devront être placées sur le plateau. Ensuite, nous enlevons les tuiles et laissons leurs carrés.

Cependant, nos gadgets ne garantissent pas qu'un ensemble particulier de tuiles sera placé; les tuiles placées dépendent de l'état. Nous devons donc modifier soigneusement les gadgets pour garantir que certaines tuiles seront supprimées, quel que soit l'état choisi.

Passons en revue nos gadgets alors.

Le fil et la clause-gate sont problématiques pour deux raisons.

  1. Nous ne savons pas que les carrés entourant un fil ou une porte de clause peuvent être carrelés correctement; après tout, certains fils peuvent être poussés vers la gauche, d'autres vers la droite, et le carrelage des carrés d'espace blanc restants devient non trivial. Nous qualifierons ce problème de problème de "flux".
  2. Il n'y a aucun moyen de savoir quelles tuiles supprimer de l'ensemble de tuiles; dans un état, un ensemble de carrés, dans le fil ou la porte de clause, sera carrelé, dans un autre état, un ensemble de carrés entièrement différent sera carrelé.

Pour résoudre ces problèmes:

  • Tout d'abord, nous générons un ensemble de toutes les tuiles possibles. Toutes ces tuiles devront être placées sur le plateau; lorsque nous les placerons sur le plateau, nous retirerons la tuile de l'ensemble. Bien que nous ne connaissions peut-être pas dans un premier temps , étant donné que nous n'avons pas encore décrit complètement la formulation, nous pouvons ajouter toutes les nouvelles possibilités de tuiles au fur et à mesure que nous incrémentons n , si nécessaire. Toutes les tuiles que nous retirons de cet ensemble doivent être placables (au moins, être placées si la formule est satisfaisable). Nous appelons retirer une tuile de l'ensemble de tuiles, pour «décharger» la tuile de l'ensemble de tuiles, comme pour décharger notre obligation de la placer sur le plateau de jeu.nn
  • Nous devons soigneusement concevoir les gadgets pour garantir que les carreaux particuliers seront supprimés, quel que soit l'état choisi.
  • Nous devons fermer nos gadgets, afin qu'ils ne poussent pas les tuiles tout autour du plateau en fonction de leur état; au contraire, tous leurs États ne doivent occuper qu'un domaine bien défini.
    • Alternativement, tous leurs États doivent être garantis pour pouvoir occuper une zone bien définie; cela garantit un carrelage satisfaisable, mais ne garantit pas qu'un carrelage particulier se produira. C'est de la même manière qu'un jeu Dominosa est créé:
      • Les tuiles sont d'abord générées en un ensemble;
      • Ensuite, les tuiles sont placées dans une configuration aléatoire,
      • Lorsque chaque tuile est placée, elle est retirée du jeu de tuiles.
      • Ensuite, les tuiles sont retirées du plateau, laissant derrière elles leurs cases.
      • Cela ne garantit pas que la configuration prévue sera choisie,
      • Au contraire, il garantit que la configuration prévue peut être choisie, et donc une solution existe. Nous pouvons faire la même chose ici.
  • Après avoir placé tous les gadgets de la formulation, au lieu de placer des carrés uniques par défaut, c'est-à-dire sur tous les "espaces", nous nous assurons que l'espace est une zone rectangulaire avec une dimension paire, ou décomposons l'espace blanc en rectangles avec une dimension paire , et nous tuiles simplement l'espace blanc avec les tuiles restantes dans le jeu de tuiles.
  • Après avoir placé toutes les tuiles de l'ensemble, nous savons que tout est placable.
    • Certaines tuiles seront évidemment placables, comme celles des murs, d'autres ne seront placables que si la formule est satisfaisante, en raison de la nature des relations entre les gadgets.
  • Ensuite, nous enlevons les tuiles et laissons leurs carrés.

Passons en revue nos gadgets alors.

Forcer le gadget

Nous pouvons créer un nombre arbitraire de blocs de construction en nous assurant qu'ils ne peuvent pas être associés chacun avec eux.

Par exemple, disons que nous voulons forcer une tuile , afin que nous puissions utiliser 1 comme bloc de construction. (Remarque, 1 est une variable arbitraire, que nous voulons forcer comme paire à elle-même, pas nécessairement un bloc de construction comme nous avons utilisé la valeur 1 précédemment)(1,1)111

Pour garantir que nos réserves -Construction-bloc ( 1 , 1 ) , nous placeront contre la paroi de fond dans la configuration suivante: nous placerons le nombre réservé, Appelons 1 contre le mur comme un up-tack (en forme de ); 3 contre le mur, et un dans la 2e rangée au milieu. Ensuite, nous placerons deux autres nombres, appelons-les 2 et 3 ; ce sont uniques à ce gadget. Nous les plaçons en haut à gauche et à droite 1 .1(1,1)13231

Illustré ci-dessous, une bordure noire partagée est le bas du plateau de jeu, description de gauche à droite.

  • Configuration du gadget. Chaque et 3 ici est unique à ce gadget.23
  • Les 3 états possibles du pavage du centre .1

entrez la description de l'image ici

Après cela, nous pouvons garantir que notre gadget peut être carrelé avec un ensemble spécifique de tuiles, tout en garantissant que notre gadget doit forcer la paire .(1,1)

  • Nous savons que doit se produire, car les 3 états de pavage possibles du milieu inférieur 1 , tuile comme ( 1 , 1 ) , comme illustré dans la figure de droite ci-dessus.(1,1)1(1,1)
  • Les tuiles restantes peuvent être carrelées en et ( 1 , 3 ) , couvrant le gadget. Ainsi, nous pouvons supprimer ces tuiles de notre ensemble de tuiles global. Illustré ci-dessous.(1,2)(1,3)

Description, de gauche à droite:

  • Gauche, haut: Etat gauche, Gauche, bas: Un pavage valide des carrés restants.
  • Milieu, haut: Etat moyen, Milieu, bas: Un pavage valide des carrés restants.
  • Droite, haut: État droit, Droite, bas: Un pavage valide des carrés restants.

entrez la description de l'image ici

Notez que le pavage des carrés restants n'est pas forcé , car ils peuvent paver avec des voisins proches au lieu de , mais comme il s'agit d'un pavage valide du plateau de jeu dans tous les états, nous pouvons les supprimer du ensemble de tuiles, et supposez qu'ils seront carrelés exactement de cette façon. Puisque nous savons qu'il existe un pavage possible valide, nous avons au moins un pavage possible du plateau de jeu, si la formule est satisfaisable. Bien qu'il n'y ait aucune garantie que ceux-ci seront tuilés de cette façon, il y a une garantie que la tuile ( 1 , 1 ) sera forcée.1(1,1)

Remarque: si vous n'êtes pas satisfait de cela ou si vous êtes confus par la différence entre "pouvoir carreler" et "être forcé de carreler", vous pouvez simplement placer un mur autour du gadget , de la même manière que nous faire un mur 3 × 2 ci-dessous pour le gadget clause.3×23×2

Ce gadget n'est pas fermé, car il n'a pas besoin de l'être (mais vous pouvez le faire si vous le souhaitez). Ce n'est pas nécessaire, car il a une configuration réalisable, que nous pouvons supprimer du jeu de tuiles. Bien qu'il soit possible de faire une configuration différente, cela n'affecte pas la satisfiabilité du problème.

Les tuiles suivantes sont garanties d'être carrelées (elles peuvent donc être retirées du jeu de tuiles): (1,1)

Les tuiles suivantes sont garanties de pouvoir être tuilées (donc peuvent être retirées du jeu de tuiles): (1,2),(1,3)

Si vous choisissez de fermer ce gadget avec un mur, seront également couverts.(1,2),(1,3)

Nouvelles portes Wire et Clause

En raison des problèmes d'écoulement et de vidage de l'ensemble de tuiles, nous devons repenser un peu le fil.

Une façon de résoudre le problème d'écoulement est de faire du fil un circuit, au lieu de simples états gauche-droite; c'est-à-dire qu'il serait circulaire au lieu d'une ligne, et donc si la partie supérieure du cercle est poussée à droite, le bas sera poussé à gauche. Cela résout le problème de débit.

En suivant cette route, nous pouvons changer le fil et la porte de la clause pour résoudre les deux problèmes.

Réserve et FTF

Introduisons deux nouvelles valeurs universelles, et F . Ces deux valeurs sont universelles; les valeurs réelles dans la grille, telles que les valeurs carrées 2 et 3 (puisque par convention, nous avons réservé 1 comme bloc de construction pour les murs), ou tout ce que vous choisissez. Ils représentent respectivement vrai et faux.TF231

Nous réservons de force les tuiles , ( T , T ) , ( F , F ) , comme suit; illustration ci-dessous, description de gauche à droite:(T,F)(T,T)(F,F)

  • Nous utilisons le même schéma que pour forcer n'importe quelle tuile , en utilisant T comme 1 . Chaque 2 et 3 ici est unique à ce gadget.(1,1)T123
  • Nous utilisons le même schéma que pour forcer n'importe quelle tuile , en utilisant F comme 1 Chaque 2 et 3 ici sont uniques à ce gadget.(1,1)F123
  • Nous utilisons le même schéma que pour forcer une tuile , en utilisant F comme 1 au centre et en utilisant T dans les autres emplacements de la punaise ascendante . Cela force ( F , T ) à carreler. 2 et 3 sont capables de carreler avec T , nous les supprimons donc du jeu de tuiles. Chaque 2 et 3 ici est unique à ce gadget.(1,1)F1T(F,T)23T23

entrez la description de l'image ici

Câble

Chaque fil commencera et se terminera par une valeur, appelons-le , qui est unique au fil. Pour chaque clause à laquelle le fil participe, le fil aura deux valeurs de fil, x et x , qui sont uniques à chaque fil, et participeront à la même clause. Illustration ci-dessous, avec description de gauche à droite.Axx

  • Un fil qui participe à une clause. Le fil a une hauteur de et une longueur de 2 p + 3 , où p est le nombre de clauses auxquelles le fil participe. Le fil est capitonné par deux carrés A à gauche et deux à droite. Il est, bien sûr, entouré d'un mur de tous les côtés, indiqué par le contour bleu. Notez que le 1 est unique à ce fil et ne sera utilisé que dans le fil et la clause à laquelle il participe.22p+3pA1

entrez la description de l'image ici

Les deux états sont illustrés ci-dessous, de gauche à droite.

  • Un fil qui participe à une clause, dans l'état vrai. Le fil est considéré comme vrai, lorsque les carrés sont associés à un carré T et les carrés x sont associés à des carrés F. Il est considéré comme faux dans l'autre état, où le carrelage est inversé. Notez comment le carrelage est forcé une fois que le carreau A est sélectionné: ( T , F ) sont déjà forcés plus tôt, donc le reste des carreaux doit être horizontal.xTxFA(T,F)
  • Le même fil à l'état faux.

entrez la description de l'image ici

Lorsque vous participez à plus de clauses, il y a plus de valeur et x , une paire pour chaque clause à laquelle le fil participe. Elles alternent en haut et en bas, tout comme les carrés T et F qui séparent chaque x , x paire.xxTFx,x

entrez la description de l'image ici

Les deux états correspondants.

entrez la description de l'image ici

Ce gadget est fermé , il n'y a donc pas de "problème de flux".

Notez comment dans l'un ou l'autre état, nous collectons les tuiles suivantes, quel que soit l'état: , ( A , T ) , ( A , F ) .(A,A)(A,T)(A,F)

Il y a cependant quelques tuiles dont nous ne sommes pas sûrs; dans un état, nous pouvons supprimer de l'ensemble de tuiles, tandis que dans un autre état, nous pouvons supprimer ( 1 , F ) , ( 1 , T ) , ( 2(1,T),(1,F),(2,T),(2,F)...du jeu de tuiles, alors quelles tuiles pouvons-nous réellement retirer? La réponse est: la porte de clause a le même problème, mais avec le jeu de tuiles opposé. Il collectera toujours les tuiles restantes, opposées et non collectées, comme nous le verrons dans la section suivante. Puisque chacun d'eux est associé à une porte de clause, nous pourrons les supprimer tous les deux.(1,F),(1,T),(2,F),(2,T)...

Clause

Ensuite, nous allons créer la première itération de la nouvelle porte de clause. Il se compose d'un gadget , entouré de murs. À l'intérieur du gadget, nous plaçons un F en haut au centre et deux carrés en T dans les coins inférieurs; un en bas à gauche et un en bas à droite. Les carrés restants seront des valeurs représentant les variables de fil de trois fils différents. Appelons ces un , b , et c . Le F sera forcé de s'apparier avec l'une des variables filaires et les autres variables filaires seront appariées avec les valeurs T. Illustrations ci-dessous, descriptions de gauche à droite.2×3FTa,b,cFT

  • Gauche: La configuration pour la première itération de la nouvelle clause-gate.
  • Droite Les trois états possibles du pavage F

entrez la description de l'image ici

Ces trois états conduisent à trois pavages possibles. Illustration ci-dessous, descriptions de gauche à droite.

  • Gauche, haut : mosaïque à gauche, Gauche, en bas: mosaïque des carrés restants.F
  • Milieu, haut : carrelé à droite, Milieu, bas: Mosaïque des carrés restants.F
  • Droite, en haut : mosaïque, Droite, en bas: mosaïque des carrés restants.F

entrez la description de l'image ici

Étant donné que le sera associé à l'une des variables de fil dans la clause , cette variable de fil ne peut plus être associée à F dans le fil ; forçant ainsi le fil à vrai. Inversement, les variables de fil restantes qui tuiles avec T seront forcées de tuiler avec F dans leurs fils. Ce sont exactement les mêmes contraintes en tant que 1 -in- 3 - S A T clause.FF TF1-in-3-SAT

Note, et c sont des variables de fil, mais ils pourraient chacun se référer à un x ou x ' variable de fil; l'utilisation d'un x ⋆ annule essentiellement la variable filaire.a,b,cxxx

Un ajout: pour s'acquitter de l'obligation de savoir quelles tuiles peuvent être retirées du jeu de tuiles, nous devons "doubler et opposer" la clause. Ce que je veux dire par là, est de faire un autre gadget, avec 3 variables supplémentaires représentant les négations d' un , b , et c . Appelons ces une « , b ' , et c ' . Celles-ci doivent être les valeurs négatives des fils variables de a , b 3×23a,b,ca,b,c Et c . Cegadget 3 × 2 est différent, en ce qu'il aura un T au centre et deuxvaleurs F aux coins; exactement le contraire du gadget de clause décrit jusqu'ici. En "doublant" la clause comme celle-ci, nous rajoutons les mêmes contraintes que le gadget décrit ci-dessus. Cependant, nous déchargeons également toutes les combinaisons de ( T , x ) , ( T , x ) , ( F , x ) , ( F , xa,b,c3×2TF de la dalle-ensemble, pour chaque variable (et donc pour une , b ,et c ainsi, parce qu'ils sont après tout,variables fils). Illustré ci-dessous, descriptions de gauche à droite.(T,x),(T,x),(F,x),(F,x)a,b,c

  • (T,x),(F,x),(T,x),(F,x)
  • La ligne bleue au milieu de la figure la plus à gauche est là pour faciliter la visualisation; en réalité, il peut être supprimé sans autoriser d'autres états.

entrez la description de l'image ici

Prenons donc un exemple, pour montrer que toutes les tuiles sont déchargées comme promis. Illustré ci-dessous, description de gauche à droite.

  • 1=bab
  • 1T
  • TF
  • 1T(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

entrez la description de l'image ici

En essayant l'autre état, nous obtenons l'illustration ci-dessous, description de gauche à droite.

  • (1,T
  • (1,F
  • En menant le reste du fil à la tuile en conséquence, et évaluez le fil comme faux.
  • (1,F)(1,T)(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

entrez la description de l'image ici

Ainsi, dans l'un ou l'autre état, nous déchargeons les mêmes tuiles. Par conséquent, le fil et la clause déchargent ensemble avec succès des carreaux spécifiques s'il existe une affectation satisfaisante.

Ce gadget est fermé , il n'y aura donc pas de problème de flux. Le gadget de clause ainsi que le gadget de fil sont garantis pour toujours décharger les mêmes valeurs de paire de tuiles , et donc nous pouvons les décharger même si nous ne savons pas de quelle façon il tuile.

Désormais, tous nos gadgets remplissent les critères.

Formulation

Dans notre formulation finale, nous créons trois rangées de gadgets, chacun séparé par un mur horizontal.

  • TF
  • Dans la rangée du milieu, nous plaçons les gadgets de fil, horizontalement, qui sont deux tuiles de hauteur. Les gadgets en fil doivent être séparés les uns des autres par une paroi verticale.
  • Dans la rangée du haut, nous plaçons des gadgets de clause, qui mesurent quatre carreaux. Les gadgets de clause doivent être séparés les uns des autres par un mur vertical.

Les illustrations suivent, descriptions au-dessus de chaque figure. Cliquez sur les images pour une résolution complète. Le code source pour reproduire / générer les images est répertorié au bas de la page.

Φ(x)=(x1,¬x2,x3)(x2,¬x3,x4)(x1,x2,¬x4)(¬x1,x2,x3,¬x4) comme témoin.

Nous commençons d'abord par les murs horizontaux séparant les rangées de gadgets. Nous montrons les carrés et les paires qui sont forcées de carreler à l'intérieur des murs.

entrez la description de l'image ici

Ensuite, nous montrons les gadgets. Le contour bleu représente les bordures des gadgets; bleu pointillé pour les gadgets de forçage, car ils ne seront pas entourés de murs. Notez que la ligne au milieu du gadget de clause n'est pas entourée d'un mur; il est là pour faciliter la visualisation; la suppression de la ligne ne permet plus à des états de se produire dans la clause, comme expliqué ci-dessus, mais nous montrons la ligne bleue pour cette démonstration. Remarque: nous utilisons des noms de carrés pour donner la lisibilité sémantique des nombres, le cas échéant. Chaque nom représente une valeur numérique.

entrez la description de l'image ici

Ici, nous remplissons les murs verticaux.

entrez la description de l'image ici

Ici, nous remplissons la solution témoin; c'est-à-dire qu'il s'agit de la solution de carrelage si vous utilisez la solution SAT pour la générer.

entrez la description de l'image ici

n

entrez la description de l'image ici

Ici, nous remplissons les carrés restants avec un pavage valide trivial.

entrez la description de l'image ici

Ici, nous montrons le coin inférieur droit de la grille.

entrez la description de l'image ici

Ici, nous montrons le coin supérieur droit de la grille. Notez comment les tuiles verticales ne correspondent plus; nous plaçons donc la rangée supérieure horizontalement, si nécessaire.

entrez la description de l'image ici

Et enfin le coin en haut à gauche.

entrez la description de l'image ici

La génération du plateau de jeu entier à la fois via TeX échoue avec des erreurs de mémoire insuffisante de pdflatex, donc si vous voulez le voir, vous devrez générer des clips et les patcher ensemble. N'oubliez pas de consulter la visionneuse de bloc - notes .


Sources TikZ

Générateur de jeux:

  • graphtex.py

    Convertit TeX en svg, en utilisant pdflatex, pdfcairo (poppler) et rsvg-convert (libsvg)

  • dominosa.py

    Contient la logique de conversion, la vérification de la solution de jeu et la logique de dessin

  • dominosa_demo.py

    Une démo exécutable qui génère les images utilisées dans la réponse ci-dessus. Vide les images dans le répertoire de travail en cours.

  • dominosa_demo.ipynb

    Une démo ipython qui génère les images utilisées dans la réponse ci-dessus.


1
Ceci est spectaculaire, merci beaucoup ..
Yoav bar sinai

2
Veuillez me dire que vous en avez une version arXiv. Il peut être plus raisonnable pour cette plate-forme d'inclure un croquis et un lien vers le document complet.
Raphael

22

DOMINOSA


Jouer au jeu est un problème d'optimisation; trouver un pavage domino valide de telle sorte qu'il couvre tous les carrés. La version de décision de ce problème est:

Existe-t-il un carrelage parfait couvrant une grille donnée ( n + 1 ) × ( n + 2 ) avec n(n+1)×(n+2)n

De toute évidence, le problème d'optimisation, le problème de trouver réellement une solution au jeu est au moins aussi difficile, ou plus difficile, que le problème de décision.

1-3-in-SAT

P=NPDOMINOSA

1-3-in-SATDOMINOSA

introduction

3-SATCIRCUITSAT

CIRCUITSATPLANAR-CIRCUITSAT

3-SATPLANAR-CIRCUITSAT3-SATPLANAR-CIRCUITSAT

PLANAR-3-SATPLANAR-CIRCUITSAT

3-SAT

1-in-3-SAT1-in-33-SAT

MONOTONE-1-in-3-SAT

MONOTONE-1-in-3-SATPLANAR-MONOTONE-1-in-3-SATCIRCUITSAT

PROBLEMMONOTONEPLANAR1-in-3NP-hard3-SATNoNoNoYesMONOTONE-3-SATYesNoNoNo1PLANAR-3-SATNoYesNoYes21-in-3-SATNoNoYesYes3PLANAR1-in-3-SATNoYesYesYes4MONOTONE-1-in-3-SATYesNoYesYes5PLANAR-MONOTONE-3-SATYesYesNoYes!6PLANAR-MONOTONE-1-in-3-SATYesYesYesYes7
  1. Élimination littérale pure
  2. Théorème de dichotomie de Schaefer
  3. Le problème des représentants compatibles
  4. La triangulation du poids minimum est NP-Hard
  5. Théorème de dichotomie de Schaefer
  6. Trouver des partitions automatiques parfaites est difficile pour NP
  7. Partitions optimales de l'espace binaire dans le plan

3-SAT

Qu'est-ce qu'un "gadget"? Un gadget est une construction dans le problème, qui est utile comme bloc de construction pour construire des portes / fils / clauses. Certains gadgets auront un ensemble d'états restreint; par exemple, un gadget à deux états peut être utilisé comme variable; un état est "vrai" et l'autre est "faux". Un gadget à deux états, qui peut être "long", peut se plier et se diviser, est utile comme fil - s'il peut interagir avec une variable et devenir contraint d'étendre l'état de la variable à un autre emplacement. Un gadget avec exactement trois états peut peut-être être utilisé comme clause; s'il peut être utilisé pour contraindre "l'un des trois" fils via chacun de ses trois états. De même, on peut vouloir toutes sortes de portes logiques, comme un non-gadget, un ou-gadget, un xor-gadget etc;

Un bloc de construction

  • 11
  • 11
  • 1

entrez la description de l'image ici

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

45(1,1)

Un mur

4

Images ci-dessous, de gauche à droite:

  1. Une ligne de paires de 1
  2. Le seul pavage possible de cela 1
  3. Le seul pavage possible de (presque) tous les 1
  4. La ligne du mur, dessinée pour souligner.

entrez la description de l'image ici

Une première tentative de fil

1

En affichant uniquement les bordures des murs, voici ce que nous obtenons dans les figures ci-dessous (de gauche à droite):

  • Placer deux murs face à face.
  • Mettre des numéros uniques à l'intérieur.
  • Deux à droite: deux états possibles du fil.

entrez la description de l'image ici

Comment ça marche:

Il ne doit pas y avoir de trous dans le tube / fil, donc si les tuiles sont déplacées vers le haut, alors elles doivent toutes être déplacées vers le haut, tout le long du tube; s'ils sont décalés vers le bas, cela les «aspirera» tous. Ainsi, nous pouvons envoyer un "signal" d'un côté du fil à l'autre; en d'autres termes, propagez une valeur.

Ainsi, nous pouvons maintenant propager une valeur sur de longues distances!

Les limitations restantes sont:

  • Nous ne pouvons pas plier un fil,
  • Nous ne pouvons pas couper un fil,
  • Nous ne pouvons pas croiser les fils,
  • Nous pourrions avoir des problèmes d'agencement ennuyeux car nous devons faire attention à la parité de longueur de fil.

Plier un fil , partie 1: mur en dessous

Le problème suivant est que nous devons être capables de plier un fil, pas simplement d'aller droit ...

Alors. Nous allons diviser la partie pliée en deux parties; la partie supérieure et la partie inférieure. D'abord la partie inférieure. Ignorez la partie supérieure du virage, nous le ferons plus tard.

Les figures ci-dessous montrent un peu de problème avec la flexion; le haut du fil étant "lâche", il semble difficile de faire un mur qui tourne à 90 degrés.

De gauche à droite:

  • Le haut d'un fil est "lâche".
  • Que se passe-t-il si nous essayons de le plier; nous voulons câbler pour être entre les lignes bleues. Encore une fois, ignorez la partie supérieure du virage, nous le ferons plus tard.
  • 1

entrez la description de l'image ici

Une solution est la suivante:

  • (x,1)xqx1111

Illustration ci-dessous, description de gauche à droite:

  • La situation avec le problème.
  • q1
  • 1

entrez la description de l'image ici

qq

De gauche à droite:

  • La construction actuelle.
  • q

entrez la description de l'image ici

11

(r,1)r1

Illustration ci-dessous, de gauche à droite:

  • Notre construction actuelle.
  • 1
  • r1

entrez la description de l'image ici

Et nous obtenons enfin notre virage inférieur. Illustration ci-dessous, descriptions, de gauche à droite:

  • Gauche: Notre construction finale pour un virage.
  • Droite: comment continuer le fil vers la gauche.

entrez la description de l'image ici

Plier un fil , partie 2: mur au-dessus

Les murs pour faire le coin supérieur du virage sont beaucoup plus simples. Vous alignez simplement un mur vertical avec un mur horizontal. Illustration ci-dessous, description de gauche à droite:

  • Le pli de fil que nous voulons faire.
  • Placez la section verticale des carrés de mur vers le bas.
  • Carrelage des carrés du mur vertical.
  • Placement et carrelage du mur horizontal; il peut rencontrer le mur vertical et former un coin.

entrez la description de l'image ici

Vous devez maintenant être convaincu que nous pouvons placer et plier des fils. Cependant, nous ne pouvons toujours pas couper ou croiser les fils, plus à ce sujet plus tard.

Les limitations restantes sont:

  • Nous ne pouvons pas plier un fil,
  • Nous ne pouvons pas couper un fil,
  • Nous ne pouvons pas croiser les fils,
  • Nous pourrions avoir des problèmes d'agencement ennuyeux car nous devons faire attention à la parité de longueur de fil.

Un fil précieux

7TFTFcarré les séparant. Illustré ci-dessous, description de gauche à droite:

  • Gauche: Un fil.
  • À droite: la configuration carrée.

entrez la description de l'image ici

TF

  • Gauche, droite: les deux états du fil valorisé ;
  • T
  • F

entrez la description de l'image ici

3-SAT

Les limitations restantes sont:

  • Nous ne pouvons pas couper un fil,
  • Nous ne pouvons pas croiser les fils,
  • Nous pourrions avoir des problèmes d'agencement ennuyeux car nous devons faire attention à la parité de longueur de fil.

Pas de porte

Un non-gate n'est pas nécessaire car il est implicite: en utilisant simplement une longueur de fil décalée d'un par un, nous pouvons annuler la valeur du fil.

A Clause Gate

3

Illustrations ci-dessous, descriptions de gauche à droite:

  • La disposition filaire du gadget de clause. Il fait un signe "plus"; la jonction de 3 fils en un seul endroit.
  • 1-in-3-SAT

entrez la description de l'image ici

Voyons maintenant les différents états. Illustration ci-dessous, description de gauche à droite:

  • Le fil gauche est tiré au centre; les deux autres sont expulsés.
  • Le fil inférieur est tiré au centre; les deux autres sont expulsés.
  • Le fil en bas à droite est tiré au centre; les deux autres sont expulsés.

entrez la description de l'image ici

31-in-3

Les limitations restantes sont:

  • Nous ne pouvons pas couper un fil,
  • Nous ne pouvons pas croiser les fils,
  • Nous pourrions avoir des problèmes d'agencement ennuyeux car nous devons faire attention à la parité de longueur de fil.

Fractionner un fil

TTTT1T2a,b,ca,b,cTa,b,c

Illustration ci-dessous, description de gauche à droite:

  • Disposition des fils. Notez que les murs sont un peu épais, donc les fils sont rapprochés les uns des autres à des fins d'illustration; en réalité, ils sont un peu plus éloignés.
  • Ta,b,c

entrez la description de l'image ici

Cela oblige les fils à ne pas être différents; sia,ba,ba,b

  • Exemple d'état du fil gauche, évalué comme vrai.
  • Mauvais état du deuxième fil; il essaie d'être évalué différemment, mais il obtient ensuite une paire en double.
  • Bon état du deuxième fil, maintenant ils ont la même valeur, et il n'y a pas de paires en double.

entrez la description de l'image ici

a,b,c

Les limitations restantes sont:

  • Nous ne pouvons pas couper un fil,
  • Nous ne pouvons pas croiser les fils,
  • Nous pourrions avoir des problèmes d'agencement ennuyeux car nous devons faire attention à la parité de longueur de fil.

Un fil sans fil!

Eh bien, à ma grande joie, le fendage d'un fil s'est avéré sans fil! Autrement dit, dans les illustrations ci-dessus, je pose les fils les uns à côté des autres, mais il n'y a aucune raison de le faire! Nous pouvons placer les fils n'importe où sur la grille, et ils seraient pour ainsi dire "emmêlés". Cela nous évite bien des ennuis:

  • 3-SAT
  • Nous devons faire toute disposition ennuyeuse, amener les fils à leurs emplacements, c'est facile! Comme un téléphone sans fil! Liberté!
  • Nous n'avons pas à nous soucier de la parité de longueur de fil / de la disposition hors ligne.
  • Nous pouvons faire une réduction assez minime; les variables obtiendront chacune un seul ensemble de longues bandes de fil, avec beaucoup de connexions sans fil le long des fils. Ces connexions se feront vers des portes de clause, qui résideront à son propre emplacement sur la grille. La clause ne comprendra désormais que le gadget de la clause et trois fils sans fil qui en sortent.

Les limitations restantes sont:

  • Nous ne pouvons pas croiser les fils,
  • Nous pourrions avoir des problèmes d'agencement ennuyeux car nous devons faire attention à la parité de longueur de fil.

La réduction, première tentative

Φ(x)=iCi1-in-3-SAT

  • xjx
  • CiΦ(x)
  • xjCi3a,b,c

À quoi cela pourrait ressembler:

  • a,b,c

entrez la description de l'image ici

Et voici à quoi pourrait ressembler la grille:

  • Figure: Le plateau de jeu résultant. Les variables sont alignées en rangées en bas. Les clauses sont réparties sur le dessus. Cette disposition donne une explosion quadratique; une mise en page plus intelligente peut éviter une explosion quadratique.

entrez la description de l'image ici

Détails de dernière minute

Rappelez-vous le problème de décision:

(n+1)×(n+2)n

(n+1)×(n+2)nO(n)

  • O(|x|×|Φ(x)|)O(n)n
  • 1O(n)

Sources graphiques


[ai,bi]ai,bi=1..n

Je vais déplacer tous ces commentaires dans ma réponse et les rendre plus complets dans ma prochaine grande révision.
Realz Slaw

ok, je l'attendrai!
Vor

@RealzSlaw, Merci beaucoup! Je n'ai toujours pas eu le temps de lire ceci mais ça a l'air très sympa.
Yoav bar sinai

@RealzSlaw, existe-t-il un moyen de vous contacter directement?
Yoav bar sinai
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.