• Keine Ergebnisse gefunden

Studienbrief 3: Die NP-Vollständigkeitstheorie

3.4 Die NP-Vollständigkeit wichtiger Probleme

Wir werden nun die NP-Vollständigkeit einiger wichtiger, anwendungsorientierter Probleme, darunter CLIQUE, BP, KP und TSP, beweisen.

Um uns den Entwurf der polynomiellen Transformationen zu erleichtern, zeigen wir, dass bereits der Spezialfall von SAT, in dem Klauseln genau drei Literale enthalten, genannt 3-SAT, NP-vollständig ist. Es sei nur bemerkt, dass 2-SAT in P ist.

Satz. 3-SAT ist NP-vollständig.

Beweis. Da SAT in NP, ist auch 3-SAT in NP.

Sei nun C = (c1,...,cm) eine Eingabe für SAT, also ci eine Klausel über x1,¬x1,..., xn ,¬xn. Für die polynomielle Transformation behandeln wir die Klauseln einzeln. Hat eine Klausel nur ein Literal z, ersetzen wir die Klausel durch z v z v z. Hat eine Klausel die Form z v z', ersetzen wir sie durch z v z v z'. Klauseln mit drei Literalen übernehmen wir unverändert.

Sei nun eine Klausel C = z1 v ... v zk mit k ≤ 4 und z_i in {x1,¬x1,..., xn ,¬xn} gegeben. Wir ersetzen C durch k - 2 Klauseln und benutzen k - 3 neue Variablen yc,l, ..., yc,k-3, die nur in diesen Klauseln vorkommen. Die neuen Klauseln haben folgendes Aussehen:

- z1 v z2 v yc,1

- ¬yc,l v zl+2 v yc,l+1 für 1≤l ≤k - 4 und -¬yc,k-3 v zk-1 v zk

Diese Klauseln lassen sich offensichtlich in polynomieller Zeit konstruieren. Die Klauselmenge ist genau dann erfüllbar, wenn eines der z-Literale den Wert 1 erhält.

Die obige Reduktion benutzt eine so genannte lokale Ersetzung, da wir die gegebenen Klauseln unabhängig voneinander behandeln konnten.

Satz. CLIQUE ist NP-vollständig.

Beweis. Wir wissen bereits, dass CLIQUE in NP liegt. Es genügt nun, zu zeigen, dass 3-SAT <_p CLIQUE ist.

Sei C = (c1, ... ,cm) mit ci = zi,1 v zi,2 v zi,3 und zi,j in {x1,¬x1,..., xn ,¬xn} eine Eingabe für 3-SAT.

Die Eingabe f(C) = (G,k) mit G = (V,E) für das Cliquenproblem soll folgendermaßen aussehen. V enthält 3m Knoten (i,j), 1 ≤i ≤ m, 1 ≤ j ≤ 3, die die Literale in den Klauseln darstellen. in enthält die Kante zwischen (i,j) und (i',j'), wenn i ≠ i' ist (es handelt sich um Knoten aus verschiedenen

Klauseln) und zi,j ≠ ¬zi',j' ist (die Literale können gleichzeitig erfüllt sein). Schließlich sei k = m.

Natürlich ist f in polynomieller Zeit berechenbar.

Sei nun a eine Belegung, die alle Klauseln erfüllt. Dann ist in jeder Klausel mindestens ein Literal erfüllt. Wir betrachten die zugehörigen m Repräsentanten in G. Der Graph G enthält auf ihnen eine Clique, da die Literale aus verschiedenen Klauseln kommen und gleichzeitig erfüllt sind.

Wenn G andererseits eine Clique der Größe m enthält, müssen die Knoten der Clique Literale aus verschiedenen Klauseln repräsentieren. Darüber hinaus ist es möglich, alle diese Literale

gleichzeitig zu erfüllen. Die Klauselmenge C ist also erfüllbar.

Die obige Reduktion ist eine so genannte Transformation mit verbundenen Komponenten, da wir zunächst Komponenten für die einzelnen Klauseln bilden, diese aber durch die Kanten des Graphen verbinden.

Satz. KP ist NP-vollständig.

Beweis. Wir wissen bereits, dass KP in NP liegt. Es genügt also, zu zeigen, dass 3-SAT ist.

Sei C = (c1, ... ,cm) mit ci = zi,1 v zi,2 v zi,3 und zi,j in {x1,¬x1,..., xn ,¬xn} eine Eingabe für 3-SAT.

Die Eingabe f(C) für das Rucksackproblem wird einige spezielle Eigenschaften haben. Es wird ai = gi für alle i und A = G sein. Es stellt sich dann noch die Frage, ob es eine Auswahl der Objekte gibt, deren Gesamtnutzen genau A ist. Wir geben nun die Zahlen in Dezimaldarstellung an. Es sei A die Zahl, die aus m Vieren, gefolgt von n Einsen, besteht, also A=4...41...1.

Wir können die Zahl A in polynomieller Zeit hinschreiben. Die Zahl A ist jedoch astronomisch groß.

Muss das so sein? Die Antwort ist (leider?) ja. Wenn wir nur Zahlen polynomieller Größe

konstruieren würden, könnte das Problem nicht schwierig sein. Diese im Augenblick erstaunliche Behauptung zeigen wir in Kapitel 3.5.

Kehren wir zu unserer polynomiellen Transformation zurück. Das Rucksackproblem besteht aus 2n + 2m Objekten, deren Nutzenwerte wir mit ai, bi , cj, dj , 1 ≤ i ≤ n, 1≤j ≤ m bezeichnen. Die Zahlen haben jeweils n + m Dezimalstellen.

Die Zahl ai bezieht sich auf das Literal xi. Im vorderen Block der Länge m gibt sie an Position j an, wie oft xi in der j-ten Klausel vorkommt. Im hinteren Block der Länge n steht an Position i eine Eins, die restlichen Positionen enthalten Nullen. Die Zahl bi ist wie die Zahl ai aufgebaut, nur bezieht sie sich auf ¬xi.

Die Zahl ci gilt der möglichen Ergänzung. Sie enthält im vorderen Block an der Position i eine Eins und sonst Nullen. Die Zahl d_i dient ebenfalls der möglichen Ergänzung. Es ist di = 2 * ci. Die Zahlen können in polynomieller Zeit berechnet werden.

Um die Zahl A aus den Zahlen ai, bi , ci und di zusammenzusetzen, haben wir nicht viele Freiheiten.

Im hinteren Block gibt es für jede Position genau zwei Zahlen, die dort eine Eins haben, für Position i sind dies ai und bi, alle anderen Zahlen haben dort Nullen. Es kann also an den hinteren Positionen nicht zu Überträgen kommen. Um A als Summe zu erhalten, müssen wir für jedes i genau eine der Zahlen ai und bi wählen; damit entscheiden wir uns entweder dafür, dass xi wahr ist oder dass ¬xi wahr ist. An den vorderen Positionen ist nach Konstruktion die Summe aller ai und bi

genau 3. Genau dann, wenn an jeder Position die Summe der ausgewählten a- und b-Zahlen mindestens 1 beträgt, können wir unsere Auswahl durch c- und d-Zahlen so ergänzen, dass die

Gesamtsumme A ergibt.

Damit haben wir die wesentlichen Ideen für den Beweis der Korrektheit unserer Transformation zusammengetragen. Wenn es eine Belegung gibt, die alle Klauseln erfüllt, wählen wir die zugehörigen a- und b-Zahlen aus. Diese haben als Zwischensumme an der vorderen Position mindestens 1 stehen, da in jeder Klausel mindestens ein Literal erfüllt ist. Also können passende Ergänzungswerte gewählt werden.

Wenn wir die Summe A aus den gegebenen Zahlen bilden können, erhalten wir dann, wie oben beschrieben, eine kanonische Belegung der Variablen. Damit sich an den vorderen Positionen die Summe 4 ergibt, muss in jeder Klausel mindestens ein Literal erfüllt sein.

Beispiel: C= (c1, c2,c3), c1 = x1 v ¬x2 v x_3, C2 = ¬x1 v x2 v ¬x4, c3 = ¬x1 v ¬x2 v ¬x3, also m = 3, n = 4. Wir haben

A = 4441111, a1 = 100 1000, a2 = 010 0100, a3 = 100 0010, a4 = 000 0001 sowie b1 =011 1000, b2 =101 0100, b3 =001 0010, b4 =010 0001,

c1= 100 0000, d1 = 200 0000, c2= 010 0000, d2 = 020 0000, c3= 001 0000, d3 = 002 0000 Es ist (1,1,0,0) eine erfüllende Belegung und die Summe

a1 + a2 + b3 + b4 + c1 + c3 +d 1 + d2 + d3 = A.

Auf dem Weg zum Beweis der NP-Vollständigkeit von BP zeigen wir die NP-Vollständigkeit des Problems der exakten Zweiteilung.

PARTITION: Gegeben sind b1, ...,bn in IN. Gibt es eine Teilmenge I {1,..., n}, so dass die Summe⊆ aller bi , i in I, gleich der Summe aller bi , i nicht in I, ist?

Satz. PARTITION ist NP-vollständig.

Beweis. PARTITION in NP, da wir I raten können.

Im Beweis von obingen Satz haben wir sogar gezeigt, dass ein sehr spezielles Rucksackproblem KP* NP-vollständig ist. Für a1,...,an soll entschieden werden, ob es I aus {1,...,n} gibt, so dass die Summe aller ai, i in I, genau A beträgt.

Es genügt nun, zu zeigen, dass KP* <_p PARTITION gilt. Sei (a1..., an, A) eine Eingabe für KP*.

Daraus konstruieren wir in polynomieller Zeit die Eingabe (a1,...,an,S - A + 1, A + 1) für

PARTITION, wobei S die Summe aller a_i ist. Falls I eine Lösung für das KP* ist, erhalten wir mit I {n+1} eine Lösung für PARTITION, da∪

Σi in I ai + S - A + 1 = S+1= Σi nicht in I ai + A + 1

Die Summe aller Zahlen in der Eingabe für PARTITION beträgt 2S+2. Eine Lösung für

PARTITION muss also so aussehen, dass jeder Teil sich zu S + 1 aufsummiert. Damit müssen die Zahlen S - A + 1 und A + 1 in verschiedenen Teilen sein. Die Zahlen, die S - A + 1 zu S + 1 ergänzen, haben die Summe A und bilden eine Lösung für die Eingabe von KP*.

Satz. BP ist NP-vollständig.

Beweis. Wir wissen bereits, dass BP in NP liegt. Wir zeigen, dass PARTITION <_p BP gilt. Sei

(b1,...,bn) eine Eingabe für PARTITION. In polynomieller Zeit berechnen wir folgende Eingabe für das Problem BP. Sie enthält n Objekte mit den Größen b1,...,bn . Die Behältergröße ist b = (b1 + ... + bn) /2 und die Zahl der Behälter k = 2.

Ist b1 + ... + bn ungerade, hat PARTITION keine Lösung und die Objekte passen sicher nicht in 2 Behälter der Größe b < (b1 + ... + bn)/2. Ist b1 + ... + bn gerade, passen die Objekte genau dann in zwei Behälter der Größe b = (b1 + ... + bn)/2, wenn sie sich in zwei gleich große Teilmengen aufteilen lassen, das heißt wenn PARTITION eine Lösung hat.

Die letzte Reduktion war besonders einfach, da PARTITION ein Spezialfall des BP ist. Eine derartige Reduktion wird auch Restriktion genannt. Damit haben wir bereits Beispiele für die drei wichtigsten Reduktionstypen kennengelernt: Restriktion, lokale Ersetzung und Transformation mit verbundenen Komponenten.

Auf dem Weg zur NP-Vollständigkeit von TSP beweisen wir die NP-Vollständigkeit des folgenden Problems:

DIRECTED HAMILTONIAN CIRCUIT DHC: Gegeben ein gerichteter Graph G = (V, E). Es ist zu entscheiden, ob G einen gerichteten Hamiltonkreis enthält.

Satz. DHC ist NP-vollständig.

Beweis. DHC ist in NP enthalten, da wir den Kreis raten können. Wir zeigen: 3-SAT <_p DHC.

Sei C = (c1, ... ,cm) mit ci = zi,1 v zi,2 v zi,3 und zi,j in {x1,¬x1,..., xn ,¬xn} eine Eingabe für 3-SAT.

Wir konstruieren den gerichteten Graphen f(C) = G = (V, E) in mehreren Schritten. Dass die Transformation f in polynomieller Zeit berechenbar ist, wird jeweils klar sein.

Der Graph G soll n + 6m Knoten enthalten. Die n Knoten sollen die Variablen repräsentieren. Dazu gibt es m Teilgraphen mit je 6 Knoten, die die Klauseln repräsentieren. Diese Teilgraphen stellen wir zunächst als rechteckige Knoten dar. Die Variablenknoten haben zwei eingehende und zwei ausgehende Kanten. Die Klauselkomponenten haben drei eingehende und drei ausgehende Kanten.

Für die Variablenknoten repräsentieren die beiden ausgehenden Kanten die positiven und negativen Vorkommen der Variablen.

Die erste Kante aus dem Variablenknoten i ist die l-te eingehende Kante in die j-te Klauselkomponente, wenn die j-te Klausel die erste ist, in der xi

vorkommt, wobei xi das l-te vorkommende Literal ist. Die l-te ausgehende Kante der j-ten Klauselkomponente ist dann die l'-te eingehende Kanl'-te in die j'-l'-te Klauselkomponenl'-te, wenn die j'-l'-te Klausel die zweil'-te ist, in der x_i vorkommt, wobei xi das l'-te vorkommende Literal ist, usw. Wenn es kein weiteres Vorkommen von xi gibt, ist die aus der Klauselkomponente ausgehende Kante die erste in den Variablenknoten i + 1 (1, falls i = n) eingehende Kante. Die zweite aus einem Variablenknoten ausgehende Kante hat die

gleiche Funktion für das negative Literal xi.

Unser Ziel ist es, die Klauselkomponenten so zu entwerfen, dass der Graph genau dann einen gerichteten Hamiltonkreis enthält, wenn die Klauselmenge erfüllbar ist. Wie wir die einzelnen Variablenknoten verlassen, soll die Variablenbelegung widerspiegeln. Die Komponente soll also so entworfen werden, dass wir auf Hamiltonkreisen die Komponente über die l-te Kante verlassen (müssen), wenn wir sie über die l-te Kante erreichen.

Da in einer erfüllten Klausel ein, zwei oder drei Literale erfüllt sein können, muss es durch den Hamiltonkreis möglich sein, die Komponente ein-, zwei- oder dreimal zu passieren.

Es gibt eine Klausel-Komponente mit Knotenmenge 1,1'2,2',3,3' die alle Anforderungen erfüllt (i ist mit i' verbunden, i mit i+1 mod 3, sowie i' mit i' mod 3).

Sei c = z1 v z2 v z3 die zugehörige Klausel. Wenn genau ein Literal, o. B. d. A. z_1, erfüllt ist, erreichen wir die Komponente über die Kante zu 1 und durchlaufen sie über 3,2,2',3',1'. Sind zwei Literale, zum Beispiel z_l und z_2, erfüllt, erreichen wir die Komponente zweimal, über die erste und die zweite Kante. Wir durchlaufen sie über die Knoten 1,3,3', l' und 2,2'. Sind alle drei Literale erfüllt, durchlaufen wir die Komponente dreimal, über 1, l' sowie 2,2' und 3,3'. Ist kein Literal erfüllt, werden wir die Komponente nicht in einen Hamiltonkreis " einordnen " können. Welche Möglichkeiten haben wir, die Komponente zu durchlaufen, wenn wir sie über die Kante zu 1 erreichen (analog für die anderen Kanten)?

- 1, 1' oder 1,3,3',1' oder 1,3,2,2',3',1', wobei wir die Komponente jeweils an 1' verlassen.

- 1,1',2' oder 1,1',2',3', dann kann ein Hamiltonkreis 2 nicht durchlaufen.

- 1,3,3',1',2', auch dann ist Knoten 2 isoliert.

- 1,3,3', dann ist Knoten 1' isoliert.

- 1,3,2,2' oder 1,3,2,2',3', dann ist ebenfalls Knoten l' isoliert.

Nun können wir die Korrektheit unserer Transformation nachweisen. Sei zunächst eine erfüllende Belegung gegeben. Dann starten wir den Hamiltonkreis am Variablenknoten 1 und beginnen mit der Kante, die der Variablenbelegung entspricht.

Die erreichten Klauselkomponenten werden so durchlaufen, wie es oben beschrieben wurde, wobei berücksichtigt wird, wie viele Literale der Klausel erfüllt sind. Wir erreichen Variablenknoten 2 und fahren entsprechend fort. Auf diese Weise konstruieren wir einen Hamiltonkreis.

Sei nun ein Hamiltonkreis gegeben. Wir durchlaufen ihn am Variablenknoten 1 beginnend.

Abhängig von der Kante, die der Hamiltonkreis wählt, belegen wir x_1. Dann durchlaufen wir die erste Klauselkomponente, die das erfüllte x1- Literal enthält.

Nach den obigen Überlegungen wird diese Komponente so verlassen, dass wir die zweite Klauselkomponente erreichen, usw., bis wir den Variablenknoten 2 erreichen.

Auf diese Weise konstruieren wir eine Belegung der Variablen. Wir haben nur Klauselkomponenten durchlaufen, die erfüllte Literale enthalten. Da wir einen Hamiltonkreis durchlaufen haben, müssen

alle Klauseln erfüllt sein.

Satz. HC ist NP-vollständig.

Beweis. Es ist HC in NP und wir DHC < HC durch lokale Ersetzung. Substitutionsbeispiel:

              Ein gerichteter Hamiltonkreis im gegebenen Graphen lässt sich sofort in einen ungerichteten

Hamiltonkreis im neuen Graphen übersetzen. Wenn im neuen Graphen ein ungerichteter

Hamiltonkreis gegeben ist, haben wir zwei mögliche "Richtungen", ihn zu durchlaufen. Wir legen eine Richtung fest, indem wir für eine beliebige Kante die Richtung wählen, die ihr im gerichteten Graphen entspricht. Wir erhalten dann direkt einen gerichteten Hamiltonkreis. Würden wir nämlich den linkesten Knoten in der ungerichteten Komponente von links erreichen und nach links

verlassen, wäre der mittlere Knoten nicht mehr auf einem Hamiltonkreis passierbar.

Satz. TSP ist NP-vollständig.

Beweis. Wir wissen bereits, dass TSP in NP liegt und dass HC <_p TSP gilt.

3.5 Pseudopolynomielle Algorithmen und starke