Ist Dominosa NP-Hard?


26

Dominosa ist ein relativ neues Puzzlespiel. Es wird auf einem Raster gespielt. Bevor das Spiel beginnt, werden die Dominoknochen auf dem Raster platziert (was eine perfekte Kachelung darstellt) ). Im nächsten Schritt werden die Dominoknochen ausgeblendet, sodass nur die Zahlen angezeigt werden. Ziel des Spiels ist es, die ursprüngliche Anordnung der Dominoknochen wiederherzustellen. Sie können das Spiel hier spielen: http://www.puzzle-dominosa.com/ :(n+1)×(n+2)(0,0),(0,1),,(n,n)

Regeln:

Die Regeln sind einfach. Sie müssen die Position aller Dominosteine ​​im Raster finden. Ein Domino ist ein Zahlenpaar. Sie können nur eines von jedem Paar haben.

Ich habe einige Polynomalgorithmen, die einen relativ kleinen Teil des Puzzles lösen. Ich könnte auch zeigen, dass typische Dominosa-Grids mindestens Lösungen haben.2n2+o(n)

Ist Dominosa NP-Hard?


"Das Rätsel kann leicht auf ein SAT- oder ein ILP-Problem reduziert werden." Möchten Sie nicht den umgekehrten Weg einschlagen, um die NP-Vollständigkeit zu beweisen?
Dennis Meng

1
@DennisMeng Der Punkt der in der Frage erwähnten Reduzierungen ist festzustellen, dass das Problem in NP liegt. Also bleibt nur zu beweisen, dass es NP schwer ist. Im Übrigen braucht man keine Reduzierungen, um zu sehen, dass das Problem in NP liegt. Die Anordnung der Dominosteine ​​ist selbst ein polynomgroßer Zeuge der Lösbarkeit.

Ich gehe davon aus, dass das Problem, um dessen NP-Vollständigkeit es geht, aufgrund einer Anordnung von Zahlen von einer Anordnung von Dominosteinen herrührt. Wenn das Problem darin besteht, die Anordnung der Dominosteine ​​(sofern vorhanden) tatsächlich aufzuweisen, ist das Problem kein Entscheidungsproblem, und "NP vollständig" ist nicht sinnvoll.

@AndreasBlass Man könnte auch das größere Problem betrachten: Bestimmen Sie, ob es möglich ist, es mit den gegebenen Dominosteinen zu bedecken, wenn man eine Element-Teilmenge der Dominosteine ​​von bis und einen Graphen mit Eckpunkten mit der Bezeichnung bis annimmt. Wenn dieses Problem in P auftritt, gibt es einen P-Zeit-Algorithmus, mit dem die ursprüngliche Kachelung wiederhergestellt werden kann, da Sie versuchen können, eine Kante zu entfernen und in P-Zeit zu testen, ob das Raster vervollständigt werden kann. 1 n G 2 k 1 nk1nG2k1n

1
Nach einem Aufsatz von G. Nordh, der NP-Vollständigkeit von verallgemeinerten Multi-Skolem-Sequenzen genannt wird, ist das folgende ähnliche Problem NP-vollständig. Instanz: Ein Graph , eine Aufteilung der Kanten in disjunkte Mengen: mit so dass keine zwei Kanten mit derselben Bezeichnung einen Scheitelpunkt teilen. FRAGE: Gibt es eine Teilmenge mit so dass keine zwei Kanten in M ​​einen gemeinsamen Scheitelpunkt haben und dass M höchstens eine Kante von jedem ? E 1 , E 2 , . . . , E m , | m | | V | / 2 | E i | 2 , i = 1 , ... , m M E | M | = | V | / 2 E i , i = 1G=(V,E)E1,E2,...,Em,|m||V|/2|Ei|2, i=1,,mME|M|=|V|/2Ei, i=1,,m
Yoav Bar Sinai

Antworten:


9

Hinweis: Dies ist eine Fortsetzung und Überarbeitung meiner anderen Antwort .

Probleme mit der Reduzierung

Erinnern Sie sich an das Entscheidungsproblem:

Gibt es eine perfekte Kachelung für ein gegebenes Raster mit einzigartigen Kacheln?n(n+1)×(n+2)n

Für ein Gitter können wir also nur Variablen verwenden.n(n+1)×(n+2)n

Aber:

  • Unsere Reduktion erfordert viele eindeutige Variablen, viel mehr als .O(n)
  • Darüber hinaus sind unsere Drähte offen, was zu Folgendem führt:
    • Woher wissen wir, dass wir die offenen Bereiche kacheln können?

Um das erste Problem zu lösen, müssen wir das Spielbrett künstlich viel größer machen. Im Wesentlichen machen wir gleich der Anzahl der Variablen, die wir tatsächlich benötigen, erstellen dann ein Raster mit der Größe und platzieren unser Raster in der unteren linken Ecke. Dies führt zu einer quadratischen Explosion.( n + 1 ) × ( n + 2 )n(n+1)×(n+2)

Für das zweite Problem müssen wir unsere Geräte ein wenig überdenken.

Es kann ein wenig entmutigend erscheinen, zu beweisen, dass wir den Rest des Brettes gemäß der Regel erfolgreich kacheln können. Also fangen wir mit der gleichen Strategie an, die man verwenden würde, um Spielbretter der Größe zu generieren :(n+1)×(n+2)

Zuerst generieren wir eine Menge aller möglichen Kacheln. Alle diese Kacheln müssen auf das Brett gelegt werden. Dann entfernen wir die Kacheln und lassen ihre Quadrate zurück.

Unsere Gadgets garantieren jedoch nicht, dass ein bestimmter Kachelsatz platziert wird. die platzierten fliesen hängen vom zustand ab. Daher müssen wir die Minianwendungen sorgfältig modifizieren, um sicherzustellen, dass bestimmte Kacheln entfernt werden, unabhängig davon, welcher Status ausgewählt wurde.

Lassen Sie uns dann über unsere Geräte gehen.

Der Draht und das Klausel-Gate sind aus zwei Gründen problematisch.

  1. Wir wissen nicht, dass die Quadrate, die einen Draht oder ein Klauseltor umgeben, korrekt gekachelt werden können. Schließlich können einige Drähte nach links und andere nach rechts verschoben werden, und das Kacheln der verbleibenden Leerraumquadrate ist nicht mehr ganz einfach. Wir werden dieses Problem als "Fluss" -Problem bezeichnen.
  2. Es gibt keine Möglichkeit zu wissen, welche Kacheln aus dem Kachelsatz entfernt werden sollen. In einem Zustand wird eine Gruppe von Quadraten in der Leitung oder in der Klausel nebeneinander angeordnet, in einem anderen Zustand wird eine völlig andere Gruppe von Quadraten nebeneinander angeordnet.

So lösen Sie diese Probleme:

  • Zuerst generieren wir eine Menge aller möglichen Kacheln. Alle diese Kacheln müssen auf das Brett gelegt werden. Wenn wir sie auf das Brett legen, entfernen wir die Kacheln aus dem Satz. Obwohl wir zunächst möglicherweise nicht kennen , da wir die Formulierung noch nicht vollständig beschreiben können, können wir bei Bedarf alle neuen Kachel-Möglichkeiten hinzufügen, wenn wir erhöhen. Alle Kacheln, die wir aus diesem Set entfernen, müssen garantiert platzierbar sein (zumindest muss garantiert werden, dass sie platzierbar sind, wenn die Formel erfüllt werden kann). Wir rufen auf, ein Plättchen aus dem Plättchenset zu entfernen, um das Plättchen aus dem Plättchenset zu "entladen", um unsere Verpflichtung zu erfüllen, es auf den Spielplan zu legen.nnn
  • Wir müssen die Geräte sorgfältig entwerfen, um sicherzustellen, dass bestimmte Kacheln entfernt werden, unabhängig davon, welches Bundesland ausgewählt wurde.
  • Wir müssen unsere Minianwendungen schließen, damit sie je nach Status keine Kacheln um das Spielfeld schieben. vielmehr dürfen alle ihre Staaten nur ein bestimmtes, genau definiertes Gebiet einnehmen.
    • Alternativ müssen alle ihre Staaten garantiert werden , um die Lage , einen gut definierten Bereich zu übernehmen; Dies garantiert eine zufriedenstellende Kachelung, garantiert jedoch nicht, dass eine bestimmte Kachelung auftritt. So wird ein Dominosa-Spiel erstellt:
      • Zuerst werden die Kacheln zu einem Set zusammengesetzt.
      • Dann werden die Fliesen in einer zufälligen Konfiguration abgelegt,
      • Wenn ein Plättchen platziert wird, wird es aus dem Plättchenset entfernt.
      • Dann werden die Kacheln vom Brett entfernt und hinterlassen ihre Quadrate.
      • Dies garantiert nicht , dass die vorgesehene Konfiguration wird gewählt werden,
      • Vielmehr gewährleistet es , dass die beabsichtigte Konfiguration kann gewählt werden, und somit eine Lösung existiert. Hier können wir dasselbe tun.
  • Nachdem Sie alle Gadgets der Formulierung platziert haben, anstatt standardmäßig eindeutige -Quadrate zu platzieren, dh auf allen "Leerzeichen", stellen Sie sicher, dass das Leerzeichen ein rechteckiger Bereich mit einer geraden Dimension ist, oder zerlegen Sie das Leerzeichen in Rechtecke mit eine gerade Dimension, und wir kacheln einfach das Leerzeichen mit den restlichen Kacheln im Kachelsatz.
  • Nachdem wir alle Kacheln aus dem Set platziert haben, wissen wir, dass alles platzierbar ist.
    • Einige Kacheln sind offensichtlich platzierbar, z. B. in Wänden, andere sind nur dann platzierbar, wenn die Formel aufgrund der Art der Beziehungen zwischen den Minianwendungen erfüllt werden kann.
  • Dann entfernen wir die Kacheln und lassen ihre Quadrate zurück.

Lassen Sie uns dann über unsere Geräte gehen.

Gadget erzwingen

Wir können eine beliebige Anzahl von Bausteinen erstellen, indem wir sicherstellen, dass nicht jeder mit sich selbst gekoppelt werden kann.

Nehmen wir zum Beispiel an, wir möchten eine Kachel erzwingen , damit wir als verwenden können Baustein. (Beachten Sie, dass eine beliebige Variable ist, die wir als Paar für sich erzwingen möchten, nicht unbedingt als Baustein, da wir zuvor den Wert haben.)1 1 1(1,1)111

Um zu gewährleisten, dass unser -Baustein Reserven , werden wir ihn an die Bodenwand in der folgende Konfiguration: Wir werden die reservierte Nummer platzieren, nennen wir sie an der Wand wie eine Wende (geformt wie ); gegen die Wand und eine in der 2. Reihe in der Mitte. Dann platzieren wir noch zwei Zahlen und nennen sie und ; Diese sind einzigartig für dieses Gadget. Wir platzieren diese oben auf dem linken und rechten .( 1 , 1 ) 1 2 3 231 1(1,1)13231

Unten abgebildet ist der gemeinsame schwarze Rand die Unterseite des Spielplans. Die Beschreibung erfolgt von links nach rechts.

  • Konfiguration des Gadgets. Jedes und hier ist für dieses Gadget einzigartig.323
  • Die 3 möglichen Zustände des Kachelns des Zentrums .1

Bildbeschreibung hier eingeben

Danach können wir sicherstellen, dass unser Gadget mit einem bestimmten Kachelsatz gekachelt werden kann, während wir sicherstellen, dass unser Gadget das Paar erzwingen muss .(1,1)

  • Wir wissen, dass vorkommen muss, da alle 3 möglichen Kachelzustände der unteren Mitte mit , wie in der Abbildung rechts oben dargestellt.1 ( 1 , 1 )(1,1)1(1,1)
  • Die verbleibenden Kacheln können als und nebeneinander angeordnet werden und das Gadget abdecken. Somit können wir diese Kacheln aus unserem globalen Kachelsatz entfernen. Unten abgebildet.( 1 , 3 )(1,2)(1,3)

Beschreibung von links nach rechts:

  • Links, oben: Linker Zustand, Links, unten: Eine gültige Aufteilung der verbleibenden Quadrate.
  • Mitte, oben: Mittlerer Zustand, Mitte, unten: Eine gültige Kachelung der verbleibenden Quadrate.
  • Rechts, oben: Rechter Zustand, Rechts, unten: Eine gültige Aufteilung der verbleibenden Quadrate.

Bildbeschreibung hier eingeben

Beachten Sie, dass das Kacheln der verbleibenden Felder nicht erzwungen wird , da sie mit Nachbarn in der Nähe anstelle von , aber in allen Bundesstaaten ein gültiges Kacheln des Spielbretts ist Wir können sie aus dem Kachelsatz entfernen und davon ausgehen, dass sie genau so gekachelt werden. Da wir wissen, dass es ein gültiges mögliches Kacheln gibt, haben wir mindestens ein mögliches Kacheln des Spielbretts, wenn die Formel erfüllt werden kann. Obwohl es keine Garantie dafür gibt, dass diese Kacheln auf diese Weise gekachelt werden, gibt es eine Garantie dafür, dass die Kacheln erzwungen werden.( 1 , 1 )1(1,1)

Hinweis: Wenn Sie damit nicht zufrieden sind oder verwirrt sind, können Sie auf die gleiche Weise eine Wand um das Gadget Wir erstellen unten eine Wand für das Klausel-Gadget.3 × 23×23×2

Dieses Gadget ist nicht geschlossen, da es nicht geschlossen sein muss (aber Sie können, wenn Sie möchten). Es muss nicht sein, weil es eine mögliche Konfiguration hat, die wir aus dem Kachelsatz entfernen können. Möglicherweise kann eine andere Konfiguration vorgenommen werden, dies beeinträchtigt jedoch nicht die Erfüllbarkeit des Problems.

Die folgenden Kacheln müssen garantiert gekachelt werden (können also aus dem Kachelsatz entfernt werden): (1,1)

Die folgenden Fliesen sind garantiert werden kann gefliest werden (so kann aus dem Kachel-Set entfernt werden): (1,2),(1,3)

Wenn Sie dieses Gadget mit einer Wand schließen, wird auch angezeigt garantiert abgedeckt werden.(1,2),(1,3)

Neue Draht- und Klauseltore

Wegen der Probleme des Fließens und des Entleerens des Kachelsatzes müssen wir den Draht etwas umgestalten.

Eine Möglichkeit, das Flussproblem zu lösen, besteht darin, den Draht zu einem Stromkreis zu machen, anstatt nur einfache Links-Rechts-Zustände. Das heißt, es wäre kreisförmig anstelle einer Linie, und wenn der obere Teil des Kreises nach rechts verschoben wird, wird der untere Teil nach links verschoben. Dies löst das Strömungsproblem.

Nach dieser Route können wir das Wire- und das Klausel-Gate ändern, um beide Probleme zu lösen.

Reservierung von undFTF

Lassen Sie uns zwei neue universelle Werte einzuführen, und . Diese beiden Werte sind universell; tatsächliche Werte im Raster, z. B. Quadratwerte und (da wir vereinbarungsgemäß als Baustein für Wände reserviert haben ), oder was auch immer Sie wählen. Sie stehen für wahr bzw. falsch.F 2 3 1TF231

Wir erzwingen die Reservierung der Kacheln , , wie folgt; Abbildung unten, Beschreibung von links nach rechts:( T , T ) ( F , F )(T,F)(T,T)(F,F)

  • Wir verwenden dasselbe Schema wie das Erzwingen von Kacheln, wobei als . Jedes und hier ist für dieses Gadget einzigartig.T 1 23(1,1)T123
  • Wir verwenden dasselbe Schema wie das Erzwingen von Kacheln, wobei als jedes und sind für dieses Gadget eindeutig.F 1 23(1,1)F123
  • Wir verwenden dasselbe Schema wie das Erzwingen einer Kachel, wobei als in der Mitte verwendet wird, und Verwenden von an den anderen Stellen des Up-Tacks. Dies zwingt zum Kacheln. und können mit , also entfernen wir sie aus dem Kachelsatz. Jedes und hier ist für dieses Gadget einzigartig.F 1 T ( F , T ) 23T 23(1,1)F1T(F,T)23T23

Bildbeschreibung hier eingeben

Draht

Jede Verbindung beginnt und endet mit einem Wert. Nennen wir ihn , der für die Verbindung eindeutig ist. Für jede Klausel, an der die Verbindung teilnimmt, hat die Verbindung zwei Verbindungswerte, und , die für jede Verbindung eindeutig sind und an derselben Klausel teilnehmen. Abbildung unten mit Beschreibung von links nach rechts.x x Axx

  • Ein Draht, der an einer Klausel teilnimmt. Der Draht hat eine Höhe von und eine Länge von , wobei die Anzahl der Klauseln ist, an denen der Draht teilnimmt. Der Draht ist mit zwei -Quadraten links und gepolstert zwei auf der rechten Seite. Es ist natürlich allseitig von einer Mauer umgeben, angedeutet durch den blauen Umriss. Beachten Sie, dass die für diese Verbindung eindeutig ist und nur in der Verbindung und der Klausel verwendet wird, an der sie teilnimmt.2 * p + 3 p A 1 22p+3pA1

Bildbeschreibung hier eingeben

Unten sind die beiden Zustände dargestellt, Beschreibungen von links nach rechts.

  • Eine Leitung, die im wahren Zustand an einer Klausel beteiligt ist. Der Draht gilt als wahr, wenn die -Quadrate mit den Quadraten und die -Quadrate mit den Quadraten gepaart sind . In dem anderen Zustand, in dem die Kacheln umgekehrt sind, wird dies als falsch betrachtet. Beachten Sie, wie das Kacheln erzwungen wird, sobald die Kachel ausgewählt wird: werden bereits früher erzwungen, daher müssen die restlichen Kacheln horizontal sein.T x 'F A ( T , F )xTxFA(T,F)
  • Der gleiche Draht im falschen Zustand.

Bildbeschreibung hier eingeben

Wenn in mehr Klauseln teilnehmen, gibt es mehr Wert und , ein Paar für jede Klausel in dem Draht partizipiert. Sie alternative Wesen oben und unten, wie auch die und Quadrate, die jedes Paar trennen .x 'T F x , x 'xxTFx,x

Bildbeschreibung hier eingeben

Die zwei entsprechenden Zustände.

Bildbeschreibung hier eingeben

Dieses Gadget ist geschlossen , daher gibt es kein "Flussproblem".

Beachten Sie, dass wir in beiden Bundesstaaten unabhängig vom Bundesstaat die folgenden Kacheln sammeln: , , .( A , T ) ( A , F )(A,A)(A,T)(A,F)

Es gibt jedoch einige Kacheln, bei denen wir uns nicht sicher sind. In einem Zustand können wir aus dem Kachelsatz, während wir in einem anderen Zustand aus dem Kachelsatz, also welche Kacheln können wir? eigentlich entfernen? Die Antwort lautet: Das Klauseltor hat das gleiche Problem, jedoch mit der entgegengesetzten Kachelmenge. Es werden immer die verbleibenden, gegenüberliegenden und nicht gesammelten Kacheln gesammelt, wie wir im nächsten Abschnitt sehen werden. Da jedes dieser Elemente mit einem Klausel-Gate gekoppelt ist, können beide Elemente entfernt werden.( 1 , F ) , ( 1 , T ) , ( 2 , F ) , ( 2 , T )(1,T),(1,F),(2,T),(2,F)...(1,F),(1,T),(2,F),(2,T)...

Klausel

Als nächstes erstellen wir die erste Iteration des neuen Klauselgatters. Es besteht aus einem Gadget, das von Wänden umschlossen ist. Im Gadget platzieren wir ein in der oberen Mitte und zwei Quadrate in den unteren Ecken. eine unten links und eine unten rechts. Die verbleibenden Quadrate sind Werte, die Drahtvariablen von drei verschiedenen Drähten darstellen. Nennen wir diese und . Das muss mit einer der Drahtvariablen gepaart werden, und die verbleibenden Drahtvariablen werden mit den Werten gepaart. Abbildungen unten, Beschreibungen von links nach rechts.F T a b , b , c F T2×3FTa,b,cFT

  • Links: Die Konfiguration für die erste Iteration des neuen Klauselgatters.
  • Richtig Die drei möglichen Zustände der Kachelung.F

Bildbeschreibung hier eingeben

Diese drei Zustände führen zu drei möglichen Kacheln. Abbildung unten, Beschreibungen von links nach rechts.

  • Links, oben : links nebeneinander, Links, unten: Die verbleibenden Quadrate nebeneinander.F
  • Mitte, oben : rechts gekachelt, Mitte, unten: Kacheln der verbleibenden Quadrate.F
  • Rechts oben : unten gekachelt. Rechts unten: Kacheln der verbleibenden Quadrate.F

Bildbeschreibung hier eingeben

Da mit einer der Wire-Variablen in der Klausel gepaart wird, kann diese Wire-Variable nicht mehr mit in der Wire gepaart werden . Dadurch wird der Draht auf "wahr" gesetzt. Umgekehrt werden die verbleibenden Wire-Variablen, die mit kacheln, gezwungen, innerhalb ihrer Drähte mit kacheln. Dies sind genau die gleichen Einschränkungen wie bei einer -Klausel.F T F 1 -in 3 - S A TFF TF1-in-3-SAT

Beachten Sie, dass und Drahtvariablen sind, die sich jedoch jeweils auf ein oder ein beziehen können. wire-variable; Die Verwendung eines negiert im Wesentlichen die wire-Variable.c x x 'x 'a,b,cxxx

Ein Zusatz: Um die Pflicht zu erfüllen, zu wissen, welche Kacheln aus dem Kachelsatz entfernt werden können, müssen wir die Klausel "verdoppeln und kontrapositiv". Damit meine ich ein weiteres Gadget mit , wobei zusätzliche Variablen die Negationen von und . Nennen wir diese und . Dies müssen die negierten variablen Drahtwerte von und . Dieses Gadget unterscheidet sich darin, dass es ein in der Mitte und zwei hat3 a , b , c a ' , b ' , c 'a , b , c 3 × 2 T F ( T , x ) , ( T , x ' ) , ( F , x ) , ( F ,3×23a,b,ca,b,ca,b,c3×2TF Werte an den Ecken; genau das Gegenteil des bisher beschriebenen Klausel-Gadgets. Durch "Verdoppeln" der Klausel wie folgt fügen wir die gleichen Einschränkungen wie im oben beschriebenen Gadget hinzu. Wir entladen jedoch auch alle Kombinationen von aus dem Kachelsatz für jede Variable (und damit für und auch, weil es sich immerhin um Drahtvariablen handelt). Unten abgebildet, Beschreibungen von links nach rechts. a , b , c (T,x),(T,x),(F,x),(F,x)a,b,c

  • Eine "doppelte und kontrapositive" Klausel. Der untere Abschnitt ist die oben beschriebene Klausel; der oberste Abschnitt ist die neu beschriebene kontrapositive Klausel. Die neue Klausel hat genau die gleichen logischen Einschränkungen. es ist das Gegenteil der Bottom-Klausel. Zusammen entladen diese kombinierten Geräte und der Draht alle Kombinationen von aus dem Kachelsatz für jede an der Klausel beteiligte Drahtvariable.(T,x),(F,x),(T,x),(F,x)
  • Die blaue Linie in der Mitte der Figur ganz links dient der besseren Übersichtlichkeit. In Wirklichkeit kann es entfernt werden, ohne weitere Zustände zuzulassen.

Bildbeschreibung hier eingeben

Nehmen wir also ein Beispiel, um zu zeigen, dass alle Kacheln wie versprochen entladen werden. Unten abgebildet, Beschreibung von links nach rechts.

  • Figur eines Drahtes, der an einer einzigen Klausel teilnimmt; Für die Klausel wird ein Staat gewählt. Hier verwenden wir , während und andere Drahtwerte in dieser Klausel darstellen.a b 1=bab
  • Für den in der Klausel angegebenen Status muss der Wert mit dem benachbarten gepaart werden .T1T
  • Dies bewirkt, dass die Verbindung zu einem echten Wert gezwungen wird (Sie können feststellen, dass die positive Variable der Verbindung gezwungen wird, sich mit zu paaren , und die negative Variable gezwungen wird, sich mit zu paaren , wie oben erläutert ).FTF
  • Dies zwingt die in der kontrapositiven Klausel (der obere Abschnitt der Klausel) dazu, mit in der Klausel gepaart zu werden . Wenn Sie sich nun den Draht ansehen, ist garantiert, dass jede Fliese im Draht entladen wird: entweder im Draht selbst oder im entsprechenden Klausel-Gadget. In diesem Zustand haben wir die Kacheln , , , , , und .T ( A , A )( A , T )( A , F )1T(A,A)(A,T)(A,F)( 1 , F ) ( 1 ' , F ) ( 1 ' , T )(1,T)(1,F)(1,F)(1,T)

Bildbeschreibung hier eingeben

Wenn wir den anderen Zustand versuchen, erhalten wir die Abbildung unten, Beschreibung von links nach rechts.

  • Die Klausel befindet sich im anderen Status und kann auf zwei Arten nebeneinander angeordnet werden.(1,T
  • Daher wird auf den Draht gezwungen,(1,F
  • Führen Sie den Rest des Drahts so, dass er entsprechend kachelt, und bewerten Sie den Draht als falsch.
  • Schließlich muss im kontrapositiven / oberen Abschnitt des Klausel-Gadgets gekachelt werden, da in der genommen wird Draht. In diesem Zustand haben wir die Kacheln , , , , , und . Dies sind die gleichen Kacheln wie im anderen Zustand .( 1 , T ) ( A , A ) ( A , T ) ( A , F ) ( 1 , T ) ( 1 , F ) ( 1 , F ) ( 1 , T )(1,F)(1,T)(A,A)(A,T)(A,F)(1,T)(1,F)(1,F)(1,T)

Bildbeschreibung hier eingeben

In beiden Zuständen werden die gleichen Kacheln abgelegt. Daher entladen der Draht und die Klausel zusammen erfolgreich bestimmte Kacheln, wenn eine zufriedenstellende Zuordnung vorliegt.

Dieses Gadget ist geschlossen , sodass es kein Flussproblem gibt. Das Klausel-Gadget entlädt zusammen mit dem Draht-Gadget garantiert immer die gleichen Kachel-Paar-Werte , und daher können wir diese entladen, auch wenn wir nicht wissen, auf welche Weise es kacheln wird.

Jetzt erfüllen alle unsere Geräte die Kriterien.

Formulierung

In unserer endgültigen Formulierung erstellen wir drei Reihen von Gadgets, die jeweils durch eine horizontale Wand getrennt sind.

  • Unten platzieren wir die zwei Kacheln hohen Forcing-Gadgets. Wir brauchen ein zwingen Gadget für den Baustein und für Kombinationen von und . Wir platzieren die Forcing-Gadgets direkt nebeneinander.FTF
  • In der mittleren Reihe platzieren wir die Drahtvorrichtungen horizontal, die zwei Kacheln hoch sind. Die Drahtgadgets sollten durch eine senkrechte Wand voneinander getrennt sein.
  • In der oberen Reihe platzieren wir Klausel-Gadgets, die vier Kacheln hoch sind. Die Klausel-Gadgets sollten durch eine vertikale Wand voneinander getrennt sein.

Abbildungen folgen, Beschreibungen über jeder Abbildung. Klicken Sie auf die Bilder, um sie in voller Auflösung anzuzeigen. Der Quellcode zum Reproduzieren / Generieren der Bilder ist unten auf der Seite aufgeführt.

Am Beispiel der Formel haben wir ein befriedigendes Lösung als Zeuge.( ¬ x 1 , x 2 , x 3 , ¬ x 4 )Φ(x)=(x1,¬x2,x3)(x2,¬x3,x4)(x1,x2,¬x4)(¬x1,x2,x3,¬x4)

Zuerst beginnen wir mit den horizontalen Wänden, die die Gadgetreihen trennen. Wir zeigen die Quadrate und die Paare, die gezwungen sind, innerhalb der Wände zu kacheln.

Bildbeschreibung hier eingeben

Als nächstes zeigen wir die Gadgets. Der blaue Umriss stellt die Grenzen der Geräte dar; blau gestrichelt für die Forcing-Geräte, da diese nicht von Mauern umgeben sind. Beachten Sie, dass die Linie in der Mitte des Klausel-Gadgets nicht von einer Mauer umgeben ist. Es dient der besseren Übersichtlichkeit. Wenn Sie die Zeile entfernen, können in der oben erläuterten Klausel keine Zustände mehr auftreten. Wir zeigen jedoch die blaue Linie für diese Demonstration. Hinweis: Wir verwenden quadratische Namen, um die semantische Lesbarkeit der Zahlen zu gewährleisten. Jeder Name steht für einen numerischen Wert.

Bildbeschreibung hier eingeben

Hier füllen wir die senkrechten Wände aus.

Bildbeschreibung hier eingeben

Hier füllen wir die Zeugenlösung aus; Das heißt, dies ist die Kachellösung, wenn Sie die SAT-Lösung verwenden, um sie zu generieren.

Bildbeschreibung hier eingeben

Als nächstes kacheln wir den Füllbereich; Der Rest der Platine, so groß wie nötig, für so groß wie ist erforderlich, um bisher zu kacheln. Somit entladen wir die verbleibenden Paare im Plättchenset. Die gestrichelten Linien hier stellen eine gültige, aber nicht erzwungene Kachelung dar; Es könnte eine andere Möglichkeit geben, diese zu kacheln. Hier zeigen wir die linke untere Ecke.n

Bildbeschreibung hier eingeben

Hier füllen wir die restlichen Felder mit einer trivial gültigen Kachelung aus.

Bildbeschreibung hier eingeben

Hier zeigen wir die untere rechte Ecke des Gitters.

Bildbeschreibung hier eingeben

Hier zeigen wir die obere rechte Ecke des Gitters. Beachten Sie, dass die vertikalen Kacheln nicht mehr passen. Deshalb kacheln wir die oberste Reihe bei Bedarf horizontal.

Bildbeschreibung hier eingeben

Und schließlich die linke obere Ecke.

Bildbeschreibung hier eingeben

Das Generieren des gesamten Spielplans auf einmal über TeX schlägt fehl, da pdflatex nicht über genügend Arbeitsspeicher verfügt. Wenn Sie dies also sehen möchten, müssen Sie Clips generieren und diese zusammenfügen. Schauen Sie sich unbedingt den Notebook-Viewer an .


TikZ-Quellen

Spielgenerator:

  • graphtex.py

    Konvertiert TeX nach svg mit pdflatex, pdfcairo (poppler) und rsvg-convert (libsvg)

  • dominosa.py

    Enthält die Konvertierungslogik, die Spielelösungsüberprüfung und die Zeichenlogik

  • dominosa_demo.py

    Eine ausführbare Demo, die die in der obigen Antwort verwendeten Bilder generiert. Speichert Bilder in das aktuelle Arbeitsverzeichnis.

  • dominosa_demo.ipynb

    Eine ipython-Demo, die die in der obigen Antwort verwendeten Bilder generiert.


1
Dies ist spektakulär, vielen Dank ..
Yoav Bar Sinai

2
Bitte sagen Sie mir, dass Sie eine arXiv-Version davon haben. Es kann sinnvoller sein, dass diese Plattform eine grobe Skizze und einen Link zum vollständigen Artikel enthält.
Raphael

22

DOMINOSA ist NP-hart


Das Spiel zu spielen ist ein Optimierungsproblem. Finden einer gültigen Domino-Kachel, die alle Quadrate abdeckt. Die Entscheidungsversion dieses Problems ist:

Gibt es eine perfekte Kachelung für ein gegebenes Raster mit einzigartigen Kacheln?n(n+1)×(n+2)n

Offensichtlich ist das Optimierungsproblem, das Problem, tatsächlich eine Lösung für das Spiel zu finden, mindestens so schwer oder schwerer als das Entscheidungsproblem.

Wir konvertieren eine -Formel in ein entsprechendes Raster, das nur dann abgedeckt werden kann, wenn eine erfüllbare Zuordnung zur Formel vorliegt . Darüber hinaus kann die Abdeckung tatsächlich verwendet werden, um die zufriedenstellende Zuordnung wiederherzustellen.1-3-in-SAT

Wenn die vorgestellte Konstruktion korrekt ist und man ein Spiel in Polynomialzeit in einer DTM lösen könnte, würde dies bedeuten, dass . Dies impliziert, dass NP-hart ist.P=NPDOMINOSA

Reduzierung von auf1-3-in-SATDOMINOSA

Einführung

Die meisten der Probleme / Varianten ziemlich gut mit . Es kann wichtig sein, die Probleme parallel zu betrachten; Da sie miteinander verwandt sind, kann fast alles in einem Problem mit dem anderen verwandt sein.3-SATCIRCUITSAT

CIRCUITSAT hat eine planare Variante, auf die es reduziert, genannt . Diese Umwandlung ist sehr elegant und ermöglicht es Ihnen im Grunde, jede planare Einbettung vorzunehmen, die verbleibenden Kreuzungsdrähte zu finden und die Drähte mit einem "Gadget" über ein planares "Gate" kreuzen zu lassen (Sammlung von Gadgets mit Eingangs- und Ausgangsdrähten). .PLANAR-CIRCUITSAT

Praktischerweise haben die meisten der -Varianten auch Reduzierungen zu planaren Varianten, die parallel zu und sind sehr verwandt; leicht von einem zum anderen zu reduzieren und leicht zu überlegen. Wenn ich also zu einem planaren Problem komme, das möglicherweise NP-schwer ist, denke ich in Bezug auf die planaren Varianten von und deren Parallelen in .3-SATPLANAR-CIRCUITSAT3-SATPLANAR-CIRCUITSAT

Die planaren Varianten sind wichtig zu wissen, da sie dazu beitragen, planare / geometrische Probleme wie den euklidischen TSP zu reduzieren (im Übrigen eine ziemlich seltene Reduktion zum Finden und Lernen). Es gibt also und eine Parallele , um solche Reduzierungen zu unterstützen.PLANAR-3-SATPLANAR-CIRCUITSAT

Andere Varianten sind wichtig zu wissen, da einige von ihnen schwächer sind. das ist scheinbar "einfacher" und dennoch NP-vollständig. Sie scheinen auf den ersten Blick leichter zu lösen zu sein - und sie sind viel einfacher - und dennoch NP-vollständig. NP-vollständig, aber einfacher; und daher in vielen Fällen leichter zu reduzieren.3-SAT

Zum Beispiel gibt es . Bei einigen Problemen können Sie leicht ein Gadget mit genau , während Sie "mindestens 1 in 3" , wie beim Standard-Gadget mit Verwendungen, wären nicht naheliegend und würden zu riesigen Konstruktionen führen.1-in-3-SAT1-in-33-SAT

Ein anderes Beispiel ist . Monotone vereinfacht die Arbeit erheblich, wenn Sie eine Konstruktion haben, bei der Werte nicht einfach negiert werden können.MONOTONE-1-in-3-SAT

Noch erstaunlicher ist, dass eine planare Variante hat: ! Das macht die Sache also viel einfacher. Sie müssen keine "Drähte" kreuzen (denken Sie daran, es gibt Parallelen in zu diesen), und vertrauen Sie mir, während das Überqueren von Gadgets Spaß macht, sie zu machen neigen dazu, sehr nicht offensichtlich und schwierig zu sein.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. Reine buchstäbliche Eliminierung
  2. Schäfers Dichotomiesatz
  3. Das Problem kompatibler Vertreter
  4. Die Mindestgewichtstriangulation ist NP-hart
  5. Schäfers Dichotomiesatz
  6. Das Finden perfekter Auto-Partitionen ist NP-schwer
  7. Optimale Binärraum-Partitionen in der Ebene

Eine Möglichkeit, mit einer Reduzierung zu beginnen, besteht darin, "Gadgets" zu finden, die Drähten ähneln, und ein Gadget, das einer Klausel einer der -Varianten ähnelt . Als Bonus sind viele der Varianten eben, wir können wahrscheinlich davonkommen, ohne die Drähte zu kreuzen.3-SAT

Was ist ein "Gadget"? Ein Gadget ist eine Konstruktion im Problem, die als Baustein zum Erstellen von Gattern / Drähten / Klauseln hilfreich ist. Einige Geräte verfügen über eine eingeschränkte Anzahl von Status. Beispielsweise kann ein Gadget mit zwei Status als Variable verwendet werden. ein Zustand ist "wahr" und der andere ist "falsch". Ein Gadget mit zwei Zuständen, das "lang" sein kann, gebogen und geteilt werden kann, ist als Draht nützlich, wenn es mit einer Variablen interagieren und eingeschränkt werden kann, um den Zustand der Variablen auf eine andere Position zu erweitern. Ein Gadget mit genau drei Zuständen kann möglicherweise als Klausel verwendet werden. wenn es verwendet werden kann, um "einen von drei" Drähten über jeden seiner drei Zustände zu beschränken. In ähnlicher Weise kann man alle Arten von Logikgattern wünschen, wie z. B. ein Nicht-Gadget, ein Oder-Gadget, ein XOR-Gadget usw .;

Ein Baustein

  • Lassen Sie uns zunächst eine Zahl, zum Beispiel , auf der Tafel reservieren . Wir machen einem Baustein für alles andere.11
  • Wir werden eine Ecke verwenden, um sicherzustellen, dass keine Verbindung zu einer anderen , außer in dieser Ecke, in der dies erforderlich ist.11
  • Unten (in den drei Abbildungen) befindet sich die Ecke und wie wir die s dort platzieren.1
  • Wir werden den , um eindeutige Werte im gesamten Raster und in allen Diagrammen anzugeben.
  • In der Tat werden wir unser Raster mit Werten abdecken , bevor wir sie mit wichtigen Werten überlagern. Decken Sie daher standardmäßig alles mit Werten ab.

Bildbeschreibung hier eingeben

Wie Sie sehen können, durch die Platzierung s das Paar muss nach oben in dieser Konfiguration verwendet werden; es muss eines der gestrichelten Kacheln verwenden. Jetzt kann nirgendwo anders im Forum vorkommen, was wir brauchen.3   1(1,1) (1,1)

Es gibt verschiedene Möglichkeiten, eine Nummer zu reservieren, entweder an der Wand mit oder in der Mitte des Nirgendwo mit in einem Kreuz. Jeder Weg ist in Ordnung, solange erzwungen wird.45(1,1)

Eine Mauer

Jetzt wäre es sehr nützlich, überall "Wände" und "Ecken" zu erstellen, nicht nur an den Seiten des Gitters. Schauen Sie, was passiert, wenn wir Paare in einer Reihe aneinanderreihen. Die einen haben keine andere Wahl, als sich mit ihren Nachbarn zu paaren und eine "Wand" der Breite .4

Bilder unten von links nach rechts:

  1. Eine Reihe von Paaren von s.1
  2. Die einzig mögliche Kachelung dieses -Quadrats.1
  3. Die einzig mögliche Kachelung von (fast) allen s in der Zeile.1
  4. Die Mauerlinie, zur Hervorhebung gezeichnet.

Bildbeschreibung hier eingeben

Ein erster Versuch an einem Draht

Wenn Sie nun zwei "Wände" einander gegenüberstellen und einen Abstand von zwischen den Wänden lassen, können Sie sich vielleicht ein "Draht" -artiges Gerät ausdenken.1

In den Abbildungen unten (von links nach rechts) sind nur die Wandränder dargestellt:

  • Zwei gegenüberliegende Wände platzieren.
  • Eindeutige Zahlen eingeben.
  • Ganz rechts zwei: Zwei mögliche Drahtzustände .

Bildbeschreibung hier eingeben

Wie es funktioniert:

Es kann keine Löcher in dem Rohr / Draht sein, also , wenn die die Fliesen nach oben verschoben, dann sind sie alle nach oben verschoben werden müssen, die alle entlang der Röhre; Wenn sie nach unten verschoben werden, "saugt" es alle von ihnen. Auf diese Weise können wir ein "Signal" von einer Seite des Kabels zur anderen senden. Mit anderen Worten: Propagieren Sie einen Wert.

So können wir jetzt einen Wert über große Entfernungen verbreiten!

Verbleibende Einschränkungen sind:

  • Wir können keinen Draht biegen,
  • Wir können keinen Draht spalten,
  • Wir können keine Drähte kreuzen,
  • Wir haben möglicherweise lästige Layoutprobleme, weil wir auf die Parität der Kabellängen achten müssen.

Biegen eines Drahtes , Teil 1: Wand unten

Das nächste Problem ist, wir müssen in der Lage sein, einen Draht zu biegen, nicht nur geradeaus zu gehen ...

So. Wir werden das Biegeteil in zwei Teile zerlegen; der obere Teil und der untere Teil. Zuerst den unteren Teil. Ignorieren Sie den oberen Teil der Kurve, wir werden das später tun.

Die folgenden Abbildungen zeigen ein Problem mit dem Biegen. Die Oberseite des Drahtes ist "locker", es scheint schwierig zu sein, eine Wand herzustellen, die sich um 90 Grad dreht.

Links nach rechts:

  • Die Oberseite eines Drahtes ist "lose".
  • Was passiert, wenn wir versuchen, es zu biegen? Wir wollen verkabeln, um zwischen den blauen Linien zu sein. Auch der obere Teil der Kurve ignorieren, werden wir das später tun.
  • Wie Sie sehen können, sind die oberen s lose, sie können entlang der Wand oder durch den Draht fliesen ! Das ist nicht gut.1

Bildbeschreibung hier eingeben

Eine Lösung ist wie folgt:

  • Wähle ein Paar in der Nähe der Kurve. Nimm den Wert von square und nenne ihn . Dies bedeutet, dass die Nummer im gesamten Raster eindeutig ist, genau wie , und hier in dieser Kurve nur einmal verwendet wird . Da dieses mit einem gepaart ist , kann es nicht erneut mit einem gepaart werden. Aus diesem Grund platzieren wir es direkt über dem am weitesten rechts stehenden . Jetzt können wir deutlich sehen, dass die einzige Möglichkeit, die noch besteht, um zu koppeln, rechts davon ist. Dadurch wird die Wand verfestigt.(x,1)xqx1111

Abbildung unten, Beschreibung von links nach rechts:

  • Die Situation mit dem Problem.
  • Wähle ein Quadrat, sei der Quadratwert eines Quadrats in der Kurve (natürlich nicht s).q1
  • Die beiden togglings der am weitesten rechts-obersten tilings; Dieses Mal ist nur einer von ihnen gültig.1

Bildbeschreibung hier eingeben

Wie können wir jedoch sicher sein, dass den Draht nicht ruiniert? Unten sehen Sie die Zustände des Kabels und dass das nicht daran hindert.qq

Von links nach rechts:

  • Die aktuelle Konstruktion.
  • Zwei Zahlen ganz rechts: Die Zustände des Drahtes; empirisch gesehen werden sie durch die Einführung von nicht behindert .q

Bildbeschreibung hier eingeben

Jetzt haben wir noch eine lose oben; das ganz links-ganz oben- .11

Wir werden das Gleiche tun. Wähle ein Paar , das bereits in den Biegeplättchen gepaart ist, und platziere oben auf der linken-obersten- .(r,1)r1

Abbildung unten, von links nach rechts:

  • Unsere aktuelle Konstruktion.
  • 1
  • r1

Bildbeschreibung hier eingeben

Und wir bekommen endlich unsere untere Kurve. Abbildung unten, Beschreibungen von links nach rechts:

  • Links: Unsere endgültige Konstruktion für eine Kurve.
  • Rechts: So setzen Sie den Draht nach links fort.

Bildbeschreibung hier eingeben

Draht biegen , Teil 2: Wand oben

Die Wände für die obere Ecke der Kurve sind viel einfacher. Sie richten einfach eine vertikale Wand mit einer horizontalen Wand aus. Abbildung unten, Beschreibung von links nach rechts:

  • Die Drahtbiegung, die wir machen wollen.
  • Legen Sie den vertikalen Abschnitt der Wandquadrate nach unten.
  • Kacheln Sie die Quadrate der vertikalen Wand.
  • Platzierung und Verfliesung der waagerechten Wand; es kann die vertikale Wand treffen und eine Ecke bilden.

Bildbeschreibung hier eingeben

Jetzt sollten Sie überzeugt sein, dass wir Drähte platzieren und biegen können. Wir können aber immer noch keine Drähte teilen oder kreuzen, dazu später mehr.

Verbleibende Einschränkungen sind:

  • Wir können keinen Draht biegen,
  • Wir können keinen Draht spalten,
  • Wir können keine Drähte kreuzen,
  • Wir haben möglicherweise lästige Layoutprobleme, weil wir auf die Parität der Kabellängen achten müssen.

Ein geschätzter Draht

7TFTFQuadrat trennt sie. Unten abgebildet, Beschreibung von links nach rechts:

  • Links: Ein Draht.
  • Rechts: Die quadratische Konfiguration.

Bildbeschreibung hier eingeben

TF

  • Links, rechts: Die beiden Zustände des bewerteten Drahtes ;
  • T
  • F

Bildbeschreibung hier eingeben

3-SEINT

Verbleibende Einschränkungen sind:

  • Wir können keinen Draht spalten,
  • Wir können keine Drähte kreuzen,
  • Wir haben möglicherweise lästige Layoutprobleme, weil wir auf die Parität der Kabellängen achten müssen.

Nicht-Tor

Ein Nicht-Gatter ist nicht notwendig, da es implizit ist: Wenn wir einfach eine Drahtlänge von eins nach eins verwenden, können wir den Wert des Drahtes negieren.

Ein Klauseltor

3

Abbildungen unten, Beschreibungen von links nach rechts:

  • Das Wire-Layout des Klausel-Gadgets. Es macht ein "Plus" -Zeichen; das Verbinden von 3 Drähten an einer Stelle.
  • 1-im-3-SEINT

Bildbeschreibung hier eingeben

Betrachten wir nun die verschiedenen Zustände. Abbildung unten, Beschreibung von links nach rechts:

  • Der linke Draht wird in die Mitte gezogen; die beiden anderen werden rausgeschoben.
  • Der untere Draht wird in die Mitte gezogen; die beiden anderen werden rausgeschoben.
  • Das Kabel unten rechts wird in die Mitte gezogen. die beiden anderen werden rausgeschoben.

Bildbeschreibung hier eingeben

31-im-3

Verbleibende Einschränkungen sind:

  • Wir können keinen Draht spalten,
  • Wir können keine Drähte kreuzen,
  • Wir haben möglicherweise lästige Layoutprobleme, weil wir auf die Parität der Kabellängen achten müssen.

Draht spalten

TTTT1T2ein,b,cein,b,cTein,b,c

Abbildung unten, Beschreibung von links nach rechts:

  • Leitungslayout. Beachten Sie, dass die Wände etwas dick sind, sodass die Drähte zur Veranschaulichung enger zusammengezogen werden. In Wirklichkeit sind sie etwas weiter voneinander entfernt.
  • Tein,b,c

Bildbeschreibung hier eingeben

ein,bein,bein,b

  • Beispielzustand der linken Ader mit dem Wert true.
  • Schlechter Zustand des zweiten Drahtes; Es wird versucht, einen anderen Wert zu erhalten, aber dann wird ein doppeltes Paar erstellt.
  • Guter Zustand des zweiten Drahtes, jetzt haben sie den gleichen Wert und es gibt keine doppelten Paare.

Bildbeschreibung hier eingeben

ein,b,c

Verbleibende Einschränkungen sind:

  • Wir können keinen Draht spalten,
  • Wir können keine Drähte kreuzen,
  • Wir haben möglicherweise lästige Layoutprobleme, weil wir auf die Parität der Kabellängen achten müssen.

Ein schnurloser Draht!

Nun, zu meiner Freude stellte sich heraus, dass das Spalten eines Drahtes kabellos war! Das heißt, in den obigen Abbildungen lege ich die Drähte nebeneinander, aber es gibt keinen Grund dafür! Wir können die Drähte überall auf dem Gitter platzieren, und sie wären immer noch sozusagen "verwickelt". Das erspart uns viel Ärger:

  • Wir müssen uns nicht einmal um das Überqueren von Drähten sorgen. Dies ermöglicht es uns, nichtplanare Varianten von reduzieren3-SEINT
  • Wir müssen jede lästige Anordnung vornehmen, um die Drähte zu ihren Positionen zu bringen, es ist einfach! Wie ein schnurloses Telefon! Freiheit!
  • Wir müssen uns nicht um die Parität der Adernlängen / um das Layout nach dem anderen kümmern.
  • Wir können eine ziemlich minimale Verkleinerung vornehmen; Die Variablen erhalten jeweils einen Satz langer Drahtstreifen mit vielen kabellosen Verbindungen entlang der Drähte. Diese Verbindungen erfolgen zu Klausel-Gattern, die sich an ihrem eigenen Ort im Netz befinden. Die Klausel besteht nun nur noch aus dem Klausel-Gadget und drei herausstehenden Kabeln.

Verbleibende Einschränkungen sind:

  • Wir können keine Drähte kreuzen,
  • Wir haben möglicherweise lästige Layoutprobleme, weil wir auf die Parität der Kabellängen achten müssen.

Die Reduktion, erster Versuch

Φ(x)=ichCich1-im-3-SEINT

  • xjx
  • CichΦ(x)
  • xjCich3ein,b,c

Wie es aussehen könnte:

  • ein,b,c

Bildbeschreibung hier eingeben

Und so könnte das Raster aussehen:

  • Abbildung: Das resultierende Spielbrett. Die Variablen sind unten in Reihen angeordnet. Die Klauseln sind über die Oberseite verteilt. Dieses Layout führt zu einer quadratischen Vergrößerung. Ein intelligenteres Layout kann ein quadratisches Aufblasen vermeiden.

Bildbeschreibung hier eingeben

Last Minute Details

Erinnern Sie sich an das Entscheidungsproblem:

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

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

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

Diagrammquellen


[einich,bich]einich,bich=1 ..n

Ich werde all diese Kommentare in meine Antwort aufnehmen und sie in meiner nächsten großen Überarbeitung umfassender gestalten.
Realz Slaw

Ok, ich werde darauf warten!
Vor dem

@ RealzSlaw, vielen Dank! Ich hatte immer noch keine Zeit, das zu lesen, aber es sieht sehr schön aus.
Yoav Bar Sinai

@ RealzSlaw, gibt es eine Möglichkeit, Sie direkt zu kontaktieren?
Yoav Bar Sinai
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.