Bipartite Graphen neu einfärben


8

Bei einem zweigeteilten Graphen bei dem jeder Scheitelpunkt entweder rot oder blau gefärbt ist, versuche ich, die Anzahl der blauen Scheitelpunkte mit der folgenden Operation zu minimieren:G=(A,B,E)

  1. Wählen Sie einen Scheitelpunkt in A.vaA
  2. die Farben von , was bedeutet, dass und jeder Nachbar von die Farbe ändern.v a v aN[va]vava

Gibt es einen Polynomzeitalgorithmus zur Auswahl einer Umfärbungsmenge , der die Anzahl der blauen Eckpunkte minimiert? Die Anzahl der erforderlichen Umfärbungen ist nicht relevant.XA

Beachten Sie, dass die Reihenfolge des Spiegelns keine Rolle spielt, und für jeden Scheitelpunkt in drehen Sie ihn entweder um oder nicht. Wir können uns die Farben als eine Zahl vorstellen, die in Modulo 2 inkrementiert wird. Dies ergibt einen trivialen -Algorithmus.O ( 2 | A |n )AO(2|A|n)

Antworten:


6

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=(EIN,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.xV.(ϕ)vxvx¯EINb+1Bvxvx¯n

Bemerkung: sind die einzigen Knoten in .A.{vx,vx¯xV(ϕ)}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 ¯ yc , v z C B v x , v ¯ y , v z b + 1 v x v x C v y v ¯ yc v z v z cc=xy¯zb+1vxc,vy¯c,vzcBvx,vy¯,vzb+1vxvxcvyvy¯cvzvzc

Reduktions-Gadget

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


Im dritten Absatz gehen die für jedes hinzugefügten Eckpunkte in ? xXB
Luke Mathieson

+1. Ich habe eine naive Frage: Warum enthält jede Gruppe blauer Eckpunkte 6 Punkte (anstelle von 5 = 3 + 1 + 1)?
Hengxin

1
@hengxin Ich wollte nur "genug" blaue Eckpunkte zeichnen. Solange es mindestens Eckpunkte gibt, funktioniert alles, aber ja, Sie haben Recht. b+1
Pål GD

3

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.MyxMxy

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 minimiertnnvmvn×nynxMvy. 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


Das ist eigentlich ziemlich lustig, da ich beim Versuch, ein lineares System Mod 2 zu lösen, darauf gestoßen bin. Ich wusste nicht, dass das Problem als Codewort für Mindestgewicht bezeichnet wurde. Vielen Dank!
Davis Yoshida
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.