In einer zweimal gelesenen entgegengesetzten CNF-Formel erscheint jede Variable zweimal, einmal positiv und einmal negativ.
Ich interessiere mich für das Problem , das darin besteht, die Parität der Anzahl zufriedenstellender Zuweisungen einer zweimal gelesenen entgegengesetzten CNF-Formel zu berechnen.
Ich konnte keinen Hinweis auf die Komplexität eines solchen Problems finden. Die nächstgelegene ich war in der Lage zu finden , ist , dass die Zählung Version ist -komplette (Abschnitt 6.3 live in diesem Beitrag ).# P.
Vielen Dank im Voraus für Ihre Hilfe.
Update 10. April 2016
- In diesem Papier , das Problem sein gezeigt -komplette jedoch die durch Reduktion hergestellt aus Formel nicht in CNF und Sobald Sie versuchen, es wieder in CNF umzuwandeln, erhalten Sie eine dreimal lesbare Formel.⊕ P 3 SAT
- Die monotone Version wird in diesem Dokument als -vollständig dargestellt . In einem solchen wird am Ende von Abschnitt 4 schnell erwähnt: Valiant sagt, es sei entartet. Mir ist nicht klar, was Entartung genau bedeutet und was es in Bezug auf die Härte bedeutet.⊕ P ⊕ Rtw-Opp-CNF
Update 12. April 2016
Es wäre auch sehr interessant zu wissen, ob jemals jemand die Komplexität des Problems hat. Bei einer zweimal gelesenen entgegengesetzten CNF-Formel muss bei einem solchen Problem die Differenz zwischen der Anzahl der erfüllenden Zuweisungen mit einer ungeraden Anzahl von Variablen, die auf true gesetzt sind, und der Anzahl der zufriedenstellenden Zuweisungen mit einer geraden Anzahl von Variablen, die auf true gesetzt sind, berechnet werden. Ich habe keine Literatur darüber gefunden.
Update 29. Mai 2016
Wie Emil Jeřábek in seinem Kommentar , ist es nicht wahr, dass Valiant sagte, dass das Problem entartet ist. Er sagte nur, dass eine eingeschränktere Version eines solchen Problems, , entartet ist. In der Zwischenzeit weiß ich immer noch nicht, was degeneriert genau bedeutet, aber zumindest scheint es jetzt klar zu sein, dass es ein Synonym für mangelnde Ausdruckskraft ist.⊕ Pl-Rtw-Opp-3CNF
quelle
Antworten:
Es stellt sich heraus, dass jede Formel, die zweimal gegengelesen wird, eine gerade Anzahl zufriedenstellender Zuordnungen aufweist. Hier ist ein schöner Beweis dafür, obwohl man wahrscheinlich die graphentheoretische Terminologie eliminieren könnte.
Sei eine CNF-Formel, die zweimal gegengelesen wird. Ohne Verlust der Allgemeinheit enthält keine Klausel sowohl eine Variable als auch deren Negation.ϕ
Betrachten Sie den Graphen dessen Scheitelpunktmenge die Klauseln von , und fügen Sie für jede Variable eine (ungerichtete) Kante hinzu, die auf die beiden Klauseln mit fällt . Unsere WLOG-Annahme in besagt, dass dieses Diagramm keine Selbstschleifen aufweist. Denken Sie außerdem daran, jede Kante mit der sie definierenden Variablen zu kennzeichnen. Auf diese Weise können wir zwischen parallelen Kanten unterscheiden.ϕ x x ϕG ϕ x x ϕ
Eine Ausrichtung von ist ein gerichteter Graph, dessen Kanten durch Zuweisen einer Richtung zu jeder Kante in . Nennen Sie eine Ausrichtung von zulässig, wenn jeder Scheitelpunkt von eine ausgehende Kante hat. Es ist leicht zu erkennen, dass zufriedenstellende Zuordnungen zu in bijektiver Entsprechung mit zulässigen Orientierungen von .G G G ϕ G.G G G G ϕ G
Jetzt behaupte ich, dass die Anzahl der zulässigen Orientierungen von ist. Das Argument ist "durch Involution": Ich konstruiere eine Karte mit den folgenden Eigenschaften:ΦG Φ
Sobald diese festgelegt sind, können wir beobachten, dass die Bahnen von Größe 2 haben und die zulässigen Orientierungen von . Daraus folgt, dass die Anzahl der zulässigen Orientierungen gerade ist.G.Φ G
Um zu definieren , sei eine zulässige Orientierung und erwäge, in seine stark verbundenen Komponenten zu zerlegen. sendet dann an die Ausrichtung, die durch Umkehren aller Kanten innerhalb der stark verbundenen Komponenten gebildet wird. Die Eigenschaften werden dann einfach überprüft:→ G → G Φ → G.Φ G⃗ G⃗ Φ G⃗
quelle
Ich bin mir nicht sicher, ob meine Idee verständlich ist, deshalb werde ich am Beispiel von Giorgio erklären:
Zuerst muss ich dies auf dem DNF-Formular ändern:
Dies sollte die gleiche Antwort geben. Und egal ob ich die Anzahl der Lösungen modulo 2 dafür berechne:
oder dafür:
Also wähle ich die zweite. Ich habe Implikanten:
Jetzt baue ich ein Gleichungssystem:
Dieses System hat eine Lösung. 1 mod 2 = 1, also ist die Antwort 1. Aber kommt nur einmal vor. Wenn jede Variable zweimal vorkommt, kann die Antwort = 1?x6
quelle
Entschuldigung für die große Verzögerung. Bisher war das Problem wahrscheinlich gelöst. Wenn nicht, werde ich meinen Polynomalgorithmus zum Lösen von . Versuchen wir zunächst, die Anzahl der Lösungen Modulo 2 dieser Gleichung zu berechnen: . Wobei f und g logische Funktionen sind und X ein Vektor von Variablen ist. Der gemeinsame Teil tritt zweimal auf (einmal in f (X) und einmal in g (X)). In Modulo 2 ist der gemeinsame Teil also nicht wichtig. Wir können die Anzahl der Lösungen Modulo 2 von und die Anzahl der Lösungen Modulo 2 von berechnen und dann die Ergebnisse Modulo 2 summieren. Nehmen wir nun an, dass die Funktion in dieser Form dargestellt wird:⊕Rtw-Opp-CNF f(X)⊕g(X) f(X)∧g(X) f(X) g(X)
Dabei ist ein Implikant (ich meine Variablen, die durch den AND-Operator verbunden sind; zum Beispiel: ).ij x0∧x1∧¬x2
Um die Anzahl der Lösungen dieser Funktion Modulo 2 zu berechnen, können wir einfach die Anzahl der Lösungen jedes Implikanten Modulo 2 berechnen und alle Ergebnisse Modulo 2 summieren. Wenn wir einen Vektor der Variablen X haben und im Implikanten nicht alle Variablen dieses Vektors vorhanden sind, dann wissen wir es Diese Anzahl von Lösungen Modulo 2 für diesen Implikanten ist 0, da es Lösungen gibt, wobei k die Anzahl der fehlenden Variablen ist. Wenn der Implikant alle Variablen hat, beträgt die Anzahl der Lösungen 1 (k = 0). Die Berechnung der Anzahl der Lösungen modulo 2 von ist daher einfach. Betrachten wir nun:2k i0⊕i1⊕i2⊕...⊕in−1
Wir wissen, dass . Im Allgemeinen kann die ODER-Verknüpfung durch XOR jeder Teilmenge von Implikanten ersetzt werden, die durch den UND-Operator verbunden sind. Und das ist ein wichtiger Schritt: Wir interessieren uns nur für die Teilmengen, die:a∨b=a⊕b⊕(a∧b)
1) hat alle Variablen,
2) Jede Variable kommt genau eins vor (wenn die Variable zweimal vorkommt, haben wir positiv und negativ in einem Implikanten, also ergibt dies 0).
Nehmen wir an, wir haben positives im impliziten und negatives im impliziten . Dann können wir schreiben und gleichsetzen:x0 i0 x0 i1
In dieser Gleichung entsprechen die Variablen und Implikanten und . Ich meine, wenn zum Beispiel der implizite in einer Teilmenge auftritt, dann ist = 1. Andernfalls ist = 0. Wenn wir dies für alle Variablen machen, erhalten wir einen Satz von XOR-Gleichungen und müssen die Anzahl der Lösungen dieser Menge berechnen. Dieses Problem ist einfach. Anzahl der Lösungen, wenn immer , wenn l ein zu findender Wert ist. Das ist alles. Ich weiß, dass dies kein formaler Beweis ist, aber ich hoffe, dass es verständlich ist.j0 j1 i0 i1 i0 j0 j0 2l
quelle