Das Problem ist NP-vollständig und lässt daher wahrscheinlich keinen Polynomzeitalgorithmus zu. Nachfolgend finden Sie einen Beweis für die NP-Vollständigkeit des Problems, der durch eine Reduzierung von 1-in-3-SAT gezeigt wird.
Sei eine Instanz von 1-IN-3-SAT, in der wir eine 3-CNF-SAT-Formel erhalten, die gebeten wird, eine zufriedenstellende Zuordnung zu finden, bei der jede Klausel durch genau ein Literal erfüllt wird. Sei V ( ϕ ) die Menge von n Variablen und C ( ϕ ) die Menge von m Klauseln.ϕV.( ϕ )nC.( ϕ )m
Wir konstruieren eine Instanz mit einem Budget von b = n + m (der zulässigen Anzahl blauer Eckpunkte).G = ( A , B , E.)b = n + m
Für jedes Variable , zwei rotes Konstrukt Eckpunkten v x und
v ¯ x in A zusammen mit B + 1 blauen Vertices in B angrenzend an beide. Diese Kräfte genau eine von v x oder v ¯ x gekippt werden. Wir haben auch n umgedrehte "variable Eckpunkte", wodurch der erste Teil des Budgets verwendet wird.x ∈ V.( ϕ )vxvx¯¯¯EINb + 1Bvxvx¯¯¯n
Bemerkung: sind die einzigen Knoten in
.A.{vx,vx¯¯¯∣x∈V(ϕ)}A
Für jede Klausel, sagen wir , erstellen wir blaue Eckpunkte und drei zusätzliche rote Eckpunkte , die alle in . Sei alle vollständig benachbart zu den blauen Eckpunkten und verbinde mit , mit
, und bis .b + 1 V x ∈ c , v ¯ y ∈ c , v z ∈ C B v x , v ¯ y , v z b + 1 v x v x ∈ C v y v ¯ y ∈ c v z v z ∈ cc=x∨y¯¯¯∨zb+1vx∈c,vy¯¯¯∈c,vz∈cBvx,vy¯¯¯,vzb+1vxvx∈cvyvy¯¯¯∈cvzvz∈c
Da jedes Klausel-Gadget blaue Eckpunkte hat, wissen wir, dass entweder ein
oder drei Literale in dieser Klausel umgedreht wurden. Angenommen, drei wurden für eine der Klauseln umgedreht. Aber dann verwenden wir mindestens Budget .n + m + 2b+1n+m+2
Angenommen, ist eine Ja-Instanz mit einer 1-in-3-Zuweisung . Drehen Sie jeden Scheitelpunkt, der . Da jede Klausel von genau einer Variablen erfüllt wird, gibt es jetzt für jede Klausel einen blauen Scheitelpunkt, und für jede Variable ist genau einer von ihnen blau, daher haben wir blaue Scheitelpunkte.ϕα:V(ϕ)→{⊤,⊥}αn+m=b
Pål GD erklärt, dass das Problem NP-schwer ist. Der nächste Schritt besteht darin, vernünftige Algorithmen für Ihr Problem zu finden.
Ich werde feststellen, dass Ihr Problem auf ein Minimum an Gewichtscode reduziert werden kann: Suchen Sie bei einem linearen Code ein Codewort mit minimalem Gewicht. Eine andere Möglichkeit, dieses Problem zu benennen, besteht darin , bei gegebener boolescher Matrix und eines booleschen Vektors einen booleschen Vektor ungleich Null zu finden, so dass das Hamming-Gewicht von minimiert wird. (Alle Arithmetik wird in Modulo 2 ausgeführt.) Das Mindestgewichtscodewort ist als NP-hart bekannt, es gibt jedoch einige Algorithmen, die schneller als Brute-Force sind.M y x Mx⊕y
Hier ist die Verbindung. Wenn es Eckpunkte gibt, kann man sich jeden Bit-Booleschen Vektor so vorstellen, dass er angibt, welche Eckpunkte durch eine bestimmte Flip-Operation gespiegelt werden. Somit erhalten wir für jeden Scheitelpunkt einen entsprechenden . Fügen Sie diese in eine Matrix ein, wobei jede Zeile einem anderen Flip-Vektor entspricht. Sei ein Bit-Boolescher Vektor, der die ursprünglichen Farben der Eckpunkte angibt (blau = 1, rot = 0). Nun ist das Ziel, einen booleschen Vektor x zu finden , der das Hamming-Gewicht von M v ⊕ y minimiertn n v mv n×n y n x Mv⊕y . Jeder solche Vektor entspricht sofort einer Reihe von Flip-Operationen, die die Anzahl der blauen Eckpunkte im Diagramm minimieren.
Vor diesem Hintergrund können Sie möglicherweise bekannte Algorithmen anwenden, um Codewörter mit minimaler Gewichtung in linearen Codes für Ihr Problem zu finden. Die Laufzeit ist immer noch exponentiell, aber schneller als alle Möglichkeiten für .x
quelle