2.7 Weitere NP-vollständige Probleme

Werbung
Wir definieren eine Belegung v folgendermaßen:
1 falls Xi = lj,sj für ein j,
v(Xi ) :=
0 sonst.
Diese Belegung erfüllt jede Klausel Cj , denn:
1. Fall : lj,sj ist eine Variable Xi . – Dann gilt v(Xi ) = 1 nach der Definition von v, also
enthält Cj ein wahres Literal.
2. Fall : lj,sj ist eine negierte Variable X̄i . – Weil V eine Clique in Gϕ ist, kann kein Literal
lj ,sj , j = j, gleich Xi sein. Also ist v(Xi ) = 0, nach der Definition von v; daraus folgt
v(X̄i) = 1 und v(Cj ) = 1.
2.7
2.7.1
Weitere NP-vollständige Probleme
Rucksackproblem
Zur Vorbereitung auf den Nachweis, dass das Rucksackproblem LRucksack NP-vollständig
ist, betrachten wir ein einfacheres Suchproblem Rucksack∗ ( spezielles Rucksackproblem“,
”
exaktes Rucksackproblem“, siehe Beispiel 1.3.2):
”
Gegeben:
(n Objekte mit) Volumina a1 , . . . , an , (Rucksack mit) Volumen b.
Aufgabe: Suche einige der Objekte aus, die den Rucksack exakt füllen.
Mathematisch ausgedrückt: Finde I ⊆ {1, . . . , n} mit i∈I ai = b, falls möglich.
Hierzu gehört, wie immer, eine Entscheidungsvariante:
Gegeben: Volumina a1 , . . . , an , Volumen b.
Frage: Gibt es I ⊆ {1, . . . , n} mit i∈I ai = b?
Die Entscheidungsvariante kann man als Sprache ausdrücken:
LRucksack∗
=
(a1 , . . . , an , b) n ≥ 1, a1 , . . . , an , b ∈ N, ∃I ⊆ {1, . . . , n} :
ai = b .
i∈I
2.7.1 Satz
LRucksack∗ ist NP-vollständig.
Beweis:
(i) LRucksack∗ ∈ NP: Übungsaufgabe.
(ii) LRucksack∗ ist NP-schwer: Wir benutzen die Reduktionsmethode und zeigen dazu:
L3-SAT ≤p LRucksack∗ .
175
Das heißt: Wir finden eine Reduktionsfunktion
f : {ϕ | ϕ 3-KNF-Formel} → {(a1 , . . . , an , b) | n ≥ 1, a1 , . . . , an , b ∈ N}
mit f ∈ FP und:
∀ 3-KNF-Formel ϕ:
⇔
ϕ erfüllbar
f (ϕ) = xϕ ∈ LRucksack∗ .
Wenn ϕ = C1 ∧ . . . ∧ Cr 3-KNF-Formel ist, benennen wir zunächst die Variablen in
X1 . . . , Xk um (alle diese Variablen kommen in ϕ vor), ohne dass sich an der Erfüllbarkeit
etwas ändert.
Beispiel :
Aus
(X19 ∨ X 404 ∨ X7 ) ∧ (X 15 ∨ X99 ∨ X404 ) ∧ (X19 ∨ X 99 ∨ X60 )
wird
(X1 ∨ X 2 ∨ X3 ) ∧ (X 4 ∨ X5 ∨ X2 ) ∧ (X1 ∨ X 5 ∨ X6 ).
Es ist leicht zu sehen, dass eine solche Transformation in polynomieller Zeit durchführbar
ist. Ab hier nehmen wir an, dass in ϕ selbst die Variablen X1 . . . , Xk sind und alle diese
Variablen vorkommen.
Die Eingabe f (ϕ) = xϕ = (a1 , . . . , an , b) für LRucksack∗ hat folgendes Format: n = 2k + 2r
und die Zahlen a1 , . . . , an und b haben k +r Ziffern. (Man kann sich Dezimalziffern vorstellen, technisch bequemer sind Oktalziffern, da dann die Übersetzung in das Binärsystem
einfacher ist.) Für jede Variable und für jede Klausel gibt es eine Ziffernposition: eine
Ziffer für jede Variable und eine für jede Klausel.
Beispiel : k = 12, r = 9. Die Zahl b sieht so aus:
1
k
k +1
1 1 1 1 1 1 1 1 1 1 1 1
k +r
4 4 4 4 4 4 4 4 4
Kurz: b = 111111111111
444444444
.
k
r
Die Zahlen a1 , . . . , an sind in vier Gruppen eingeteilt, deren Bedeutung gleich genauer
erklärt wird.
c 1 , . . . , ck
(für v(X1 ) = 1, . . . , v(Xk ) = 1);
d1 , . . . , dk
(für v(X1 ) = 0, . . . , v(Xk ) = 0);
p 1 , . . . , pr
(zum Auffüllen“);
”
(zum Auffüllen“).
”
q1 , . . . , qr
176
Also gibt es insgesamt n = 2k + 2r Zahlen, und
(a1 , . . . , an , b) = (c1 , . . . , ck , d1 , . . . , dk , p1 , . . . , pr , q1 , . . . qr , b).
Die Zahlen in den einzelnen Gruppen sind wie folgt aufgebaut:
ci , 1 ≤ i ≤ k:
Ziffer i ist 1, Ziffern 1 ≤ i ≤ k, i = i, sind 0;
Ziffer k + j ist 1, falls Xi in Cj vorkommt, 0 sonst.
di, 1 ≤ i ≤ k:
Ziffer i ist 1, Ziffern 1 ≤ i ≤ k, i = i, sind 0;
Ziffer k + j ist 1, falls X i in Cj vorkommt, 0 sonst.
pj , 1 ≤ j ≤ r:
Ziffer k + j ist 2, alle anderen sind 0.
qj , 1 ≤ j ≤ r: Ziffer k + j ist 1, alle anderen sind 0.
Beispiel : Wenn
ϕ = (X1 ∨ X 2 ∨ X3 ) ∧ (X2 ∨ X 3 ∨ X 4 ) ∧ (X 2 ∨ X3 ∨ X4 ),
dann sehen die Komponenten von f (ϕ) = xϕ wie folgt aus:
c1
c2
c3
c4
p1
p2
p3
b
=
=
=
=
=
=
=
=
1000 100
0100 010
0010 101
0001 001
0000 200
0000 020
0000 002
1111 444.
d1
d2
d3
d4
q1
q2
q3
=
=
=
=
=
=
=
1000 000
0100 101
0010 010
0001 010
0000 100
0000 010
0000 001
Man sieht sofort, dass aus ϕ = C1 ∧ . . . ∧ Cr die Zahlenfolge
f (ϕ) = xϕ = (c1 , . . . , ck , d1 , . . . , dk , p1 , . . . , pr , q1 , . . . qr , b)
in polynomieller Zeit berechnet werden kann, dass also f ∈ FP gilt. (Hier wird benutzt,
dass alle Variablen X1 , . . . , Xk in ϕ vorkommen, dass also die Kodierung von ϕ auf jeden
Fall mehr als k Zeichen hat.)
Ebenfalls ist klar, dass die Zahlen c1 , . . . , ck , d1 , . . . , dk , p1 , . . . , pr , q1 , . . . qr , b leicht (aus der
Oktaldarstellung) in Binärdarstellung zu übertragen sind.
Zu zeigen bleibt, dass f eine Reduktionsfunktion ist.
Behauptung:
∀ 3-KNF-Formel ϕ:
ϕ erfüllbar
⇔
f (ϕ) = xϕ ∈ LRucksack∗ .
“⇒“: Sei v eine erfüllende Belegung für ϕ. Wir wählen zuerst aus c1 , . . . , ck , d1 , . . . , dk die
folgenden k Zahlen:
177
ci , falls v(Xi ) = 1, bzw. di , falls v(Xi ) = 0, für 1 ≤ i ≤ k.
Wenn wir die ausgewählten Zahlen addieren, entsteht im Block der ersten k Ziffern an
. . ∗ ∗.
jeder Position eine 1, das Ergebnis ist also ist 11 .
. . 11 ∗ ∗ .
k
r
Beispiel : Die oben betrachtete Formel ϕ = (X1 ∨X 2 ∨X3 )∧(X2 ∨X 3 ∨X 4 )∧(X 2 ∨X3 ∨X4 )
wird von der Belegung v(X1 ) = v(X2 ) = v(X4 ) = 1 und v(X3 ) = 0 erfüllt. Wir wählen:
c1 , c2 , c4 , d3 . Die Summe dieser Zahlen ist 1111 121. In diesem Beispiel wählen wir weiter
p1 , q1 , p2 , p3 , q3 , um auf die Summe b = 1111 444 zu kommen.
Allgemein: In Ziffernpositionen im zweiten Block kann als Summe der ausgewählten ci
bzw. di eine 1, eine 2 oder eine 3 erscheinen. Es ist nicht möglich, dass eine 0 erscheint, da
v erfüllende Belegung ist, es also für jede Klausel Cj eine Variable Xi mit der richtigen“
”
Belegung gibt, so dass das gewählte ci bzw. di an Stelle k + j eine 1 hat. Es ist aber auch
nicht möglich, dass die Summe in Position k + j größer als 3 wird, da Klausel Cj nur 3
Literale hat.
Mit einer passenden Auswahl aus pj , qj , 1 ≤ j ≤ r können wir jede Position auf 4 auffüllen
und so die Summe b = 111 . . . 11144 . . . 44 erreichen.
Wir haben gezeigt, dass es eine Auswahl aus den Zahlen c1 , . . . , ck , d1 , . . . , dk , p1 , . . . , pr , q1 ,
. . . qr gibt, die sich zu b summiert. Also ist xϕ ∈ LRucksack∗ .
“⇐“: Sei nun eine Auswahl aus den Zahlen c1 , . . . , ck , d1 , . . . , dk , p1 , . . . , pr , q1 , . . . qr gegeben, die sich zu b summiert. – Die wesentliche Beobachtung ist, dass es beim Summieren
von irgendwelchen dieser n Zahlen im Oktalsystem (oder Dezimalsystem) keine Überträge
zwischen Ziffernpositionen geben kann. Dies liegt an folgendem: In einer Ziffernposition
i, 1 ≤ i ≤ k, gibt es nur zweimal die Ziffer 1, die Summe aller Ziffern in Ziffernposition
k + j, 1 ≤ j ≤ r, ist 6 (nämlich 3 von den Komponenten ci und di und nochmals 3 von
den Komponenten pj und qj ). Man kann sich daher vorstellen, dass die Addition wie bei
Vektoren funktioniert, also komponentenweise.
Weil die ersten k Ziffern von b alles 1en sind, muss die Auswahl für jedes i genau eine der
Zahlen ci oder di enthalten. Wir definieren eine Belegung wie folgt:
1 , falls ci in der Auswahl,
v(Xi ) =
0 , falls di in der Auswahl.
Wir betrachten nun eine Klausel Cj . Die Summe der Ziffern der ausgewählten Zahlen in
Position k + j ist 4 (wegen des Formats von b). Da pj und qj zu dieser Position maximal
3 beitragen können, muss die Summe der Positionen k + j der aus den ci , di , 1 ≤ i ≤ k
ausgewählten Zahlen mindestens 1 ergeben. Wenn z. B. ci gewählt wurde und ci an Stelle
k + j eine 1 hat, dann ist Xi in Cj enthalten (nach Definition von ci ) und v(Xi ) = 1 (nach
Definition von v). Also enthält Cj ein wahres Literal. Analog argumentiert man (mit X i ),
wenn di gewählt wurde und di an Stelle k + j eine 1 hat. Also erfüllt die Belegung v jede
Klausel Cj von ϕ; das heißt, dass ϕ erfüllbar ist.
Nun können wir endlich auch beweisen, dass das volle“ Rucksackproblem (siehe Bei”
spiel 2.3.5) NP-vollständig ist.
178
2.7.2 Satz
LRucksack ist NP-vollständig.
Beweis: (i) LRucksack ∈ NP: Übung.
(ii) Mit der Reduktionsmethode zeigen wir, dass LRucksack NP-schwer ist. Dazu zeigen wir:
LRucksack∗ ≤p LRucksack .
Die Reduktionsfunktion ist ganz einfach:
f : (a1 , . . . , an , b) → (a1 , . . . , an , a1 , . . . , an , b, b),
für beliebige Inputs (a1 , . . . , an , b) für LRucksack∗ . (Inputs, die nicht das richtige Format haben, bilden wir z. B. auf (1, 1, 1, 2) ∈
/ LRucksack ab.) Wieso ist das eine Reduktionsfunktion?
Offensichtlich gilt für (a1 , . . . , an , b) und jedes I ⊆ {1, . . . , n}:
ai = b ⇔
ai ≤ b ∧
ai ≥ b.
i∈I
i∈I
i∈I
Damit gilt
∃I ⊆ {1, . . . , n} :
ai = b
⇔
∃I ⊆ {1, . . . , n} :
i∈I
i∈I
ai ≤ b ∧
ai ≥ b,
i∈I
also
(a1 , . . . , an , b) ∈ LRucksack∗
⇔
(a1 , . . . , an , a1 , . . . , an , b, b) ∈ LRucksack .
f ((a1 ,...,an ,b))
2.7.2
Partition und Binpacking
Es gibt zwei weitere Probleme, deren NP-Vollständigkeit durch direkte Reduktion von
LRucksack∗ nachgewiesen werden kann: das Partition-Problem und das Binpacking-Problem.
Wir formulieren das Partition-Problem als Suchproblem:
Gegeben:
(n Objekte mit) Volumina a1 , . . . , an .
Aufgabe: Teile die Objekte in zwei Teilmengen auf, die genau das gleiche Volumen haben.
Mathematisch ausgedrückt: Finde I ⊆ {1, . . . , n} mit i∈I ai = i∈I
/ ai , falls möglich.
(Falls nicht möglich, gib unmöglich“ aus.)
”
Beispiel: Bei Eingabe (1, 2, 2, 8, 3, 4) wäre I = {3, 4} eine legale Ausgabe. Bei Eingabe
(1, 2, 4, 8, 16) wäre die Ausgabe unmöglich“.
”
Hierzu gehört, wie immer, eine Entscheidungsvariante:
Gegeben: Zahlen a1 , . . . , an ∈ N.
179
Frage: Gibt es I ⊆ {1, . . . , n} mit
i∈I
ai =
i∈I
/
ai ?
Die Entscheidungsvariante kann man als Sprache ausdrücken:
LPartition
=
(a1 , . . . , an ) a1 , . . . , an ∈ N, ∃I ⊆ {1, . . . , n} :
ai =
ai .
i∈I
/
i∈I
LPartition ist NP-vollständig.
2.7.3 Satz
Beweis: Dass LPartition ∈ NP gilt, zeigt man durch Angabe einer NTM (ganz ähnlich der
für LRucksack ).
Dass LPartition NP-schwer ist, wird mit der Reduktionsmethode nachgewiesen. Wir zeigen:
LRucksack∗ ≤p LPartition .
Die Reduktionsfunktion hierfür sieht wie folgt aus:
f ((a1 , . . . , an , b)) = (a1 , . . . , an , s + 1, 2b + 1), für s =
1≤i≤n
ai .
Wir müssen zeigen, dass dies eine Reduktionsfunktion ist, dass also gilt:
(a1 , . . . , an , b) ∈ LRucksack∗ ⇔ (a1 , . . . , an , s + 1, 2b + 1) ∈ LPartition .
⇒“: Sei (a1 , . . . , an , b) ∈ LRucksack∗ . Das heißt, man kann I ⊆ {1, . . . , n} finden mit
”
i∈I ai = b. Dann ist
(s + 1) +
ai = s + 1 + b = (2b + 1) + s − b = (2b + 1) +
ai ,
i∈I
/
i∈I
also (a1 , . . . , an , s + 1, 2b + 1) ∈ LPartition .
⇐“: Sei y = (a1 , . . . , an , s + 1, 2b + 1) ∈ LPartition . Man kann also die Komponenten von
”
y in zwei Teile mit derselben Summe aufteilen. Weil (s + 1) + (2b + 1) = s + 2b + 2 >
s = 1≤i≤n ai , müssen die Komponenten (s + 1) und (2b + 1) auf verschiedenen Seiten
der Aufteilung stehen. Daher gibt es eine Menge I ⊆ {1, . . . , n} mit
ai = (s + 1) +
ai ,
(2b + 1) +
i∈I
/
woraus folgt:
2b = s −
oder
i∈I
i∈I
/
i∈I
ai +
i∈I
ai = 2 ·
ai ,
i∈I
ai = b, wie gewünscht.
Das Binpacking-Problem wurde in der Vorlesung nicht besprochen; es gehört
nicht zum Prüfungsstoff.
180
Das Binpacking2 -Problem ist folgendes Optimierungsproblem:
Gegeben:
(n Objekte mit) Volumina a1 , . . . , an , eine Behälterkapazität b.
Aufgabe: Teile die Objekte auf möglichst wenige Behälter auf, so dass in keinem Behälter
Objekte mit Gesamtvolumen größer als b sind.
Mathematisch ausgedrückt: Finde eine Funktion3 : {1, . . . , n} → {1, . . . , k} (dabei gibt
(i) die Nummer des Behälters an, in dem Objekt i landet), wobei für jedes j ∈ {1, . . . , k}
gilt:
ai ≤ b,
1≤i≤n
(i)=j
und die Anzahl k der Behälter möglichst klein ist.
Beispiel : Bei Eingabe (a1 , . . . , a7 , b) = (1, 4, 2, 1, 3, 2, 2, 4) ist folgende Zuordnung legal
(5 Behälter, maximale Füllhöhe 4):
i
ai
(i)
1
1
1
2 3 4
4 2 1
2 1 3
5 6
3 2
4 3
7
2
5
5 6
3 2
4 1
7
2
3
und folgende Zuordnung optimal (4 Behälter):
i
ai
(i)
1
1
1
2 3 4
4 2 1
2 3 4
Wie üblich besitzt das Binpackingproblem eine Parameteroptimierungsvariante ( Was ist
”
die kleinste Anzahl von Behältern, mit der man auskommt?“) sowie eine Entscheidungsvariante ( Genügen k Behälter, um die Objekte zu verpacken?“). Die Entscheidungsvariante
”
wird durch die folgende Sprache formal dargestellt:
LBinpacking
= (a1 , . . . , an , b, k) a1 , . . . , an , b, k ∈ N,
∃ : {1, . . . , n} → {1, . . . , k} :
ai ≤ b .
∀j ∈ {1, . . . , k} :
1≤i≤n
(i)=j
2.7.4 Satz
2
3
LBinpacking ist NP-vollständig.
bin (engl.): Behälter.
“: rho“.
”
”
181
Beweis: Dass LBinpacking ∈ NP gilt, zeigt man wie üblich durch Angabe einer NTM
(Übung).
Dass LBinpacking NP-schwer ist, wird mit der Reduktionsmethode nachgewiesen. Wir zeigen:
LPartition ≤p LBinpacking .
Die Idee ist hier sehr einfach: Eine Menge von Objekten mit Volumina a1 , . . . , an lässt
sich in zwei gleich umfangreiche Teile teilen
genau dann wenn man die Objekte in zwei
Behälter packen kann, die jeweils Größe 12 1≤i≤n ai haben. – Formal gibt es noch die
kleine Schwierigkeit, dass s ungerade sein könnte. Dann gibt es aber bestimmt keine
Aufteilung. Für diesen Fall benutzen wir, dass (1, 1, 1, 1) ∈
/ LBinpacking . – Formal:
(1, 1, 1, 1)
, falls s = 1≤i≤n ai ungerade,
f ((a1 , . . . , an )) =
(a1 , . . . , an , s/2, 2) , falls s = 1≤i≤n ai gerade.
Wir müssen zeigen, dass dies eine Reduktionsfunktion ist, dass also gilt:
(a1 , . . . , an ) ∈ LPartition ⇔ f ((a1 , . . . , an )) ∈ LBinpacking .
⇒“: Sei (a
1 , . . . , an , b)
∈ LPartition .
”
finden mit i∈I ai = i∈I
/ ai = s/2.
die anderen in Behälter 2. Formal:
1
(i) =
2
Dann ist s gerade, und man kann I ⊆ {1, . . . , n}
Wir packen die Objekte ai mit i ∈ I in Behälter 1,
, falls i ∈ I,
, falls i ∈ {1, . . . , n} − I.
Damit ist f ((a1 , . . . , an )) = (a1 , . . . , an , s/2, 2) ∈ LBinpacking .
/ LBinpacking , muss s = 1≤i≤n ai gerade
⇐“: f ((a1 , . . . , an )) ∈ LBinpacking . Weil (1, 1, 1, 1) ∈
”
sein und f ((a1 , . . . , an )) = (a1 , . . . , an , s/2, 2) gelten. Man kann also die Objekte mit
Volumina a1 , . . . , an so auf zwei Behälter aufteilen, dass jeder ein Volumen von maximal
s/2 erhält. Dann muss aber jeder der beiden Behälter
Objekte vom Gesamtvolumen genau
s/2 enthalten. Also gibt es eine Menge I mit i∈I ai = s/2, und (a1 , . . . , an ) ∈ LPartition .
2.7.3
Hamiltonkreis und TSP
Auch der Inhalt dieses Kapitels wurde in der Vorlesung nicht besprochen und
ist nicht prüfungsrelevant.
In Beispiel 2.2.3 wird das Hamiltonkreisproblem für ungerichtete Graphen beschrieben
und diskutiert. Auch in gerichteten Graphen ist die Frage nach der Existenz einer Rundreise, die jeden Knoten genau einmal berührt, sinnvoll.
Wir definieren: Sei G = ({1, . . . , m}, E) ein Digraph. Ein (gerichteter) Hamiltonkreis
in G ist ein (gerichteter) Kreis, der jeden Knoten von G genau einmal berührt. Technisch
182
ist dies eine Permutation π von {1, . . . , m} mit der Eigenschaft, dass (π(1), π(2)), . . . ,
(π(m − 1), π(m)), (π(m), π(1)) in E sind.
Zu diesem Begriff gehört das Suchproblem, zu einem gegebenen Digraphen G einen solchen
Hamiltonkreis zu finden, falls er existiert, und das Entscheidungsproblem, zu gegebenem
G zu entscheiden, ob es in G einen Hamiltonkreis besitzt oder nicht. Zu letzterem gehört
die folgende Sprache:
LDHC = {G | G Digraph mit ∃π Permutation: π ist Hamiltonkreis in G}.
2.7.5 Satz
LDHC ist NP-vollständig.
Beweis: Dass LDHC ∈ NP gilt, zeigt man wie in Beispiel 2.3.6 für das ungerichtete Hamiltonkreisproblem.
Dass LDHC NP-schwer ist, zeigen wir mit der Reduktionsmethode. Wir zeigen:
L3-SAT ≤p LDHC .
Wir definieren dazu eine Funktion f , die 3-KNF-Formeln in Digraphen transformiert:
f : {ϕ | ϕ ist 3-KNF-Formel} → {G | ∃m ∈ N : G = ({1, . . . , m}, E) ist Digraph}.
Mit f (ϕ) = Gϕ muss dabei für jede 3-KNF-Formel ϕ gelten:
ϕ erfüllbar
Gϕ ∈ LDHC ,
⇔
d. h.
ϕ besitzt erfüllende Belegung
⇔
Gϕ besitzt Hamiltonkreis.
Gegeben sei ϕ = C1 ∧. . .∧Cr , eine 3-KNF-Formel mit den Variablen X1 , . . . , Xk , wobei wir
annehmen wollen, dass die Variablen alle in ϕ vorkommen. (Wie beim Rucksackproblem
besprochen, kann man andernfalls die Variablen umbenennen.)
Im folgenden wird der Digraph Gϕ = (Vϕ , Eϕ ) beschrieben. Die Knotenmenge Vϕ enthält
k + 6r Knoten, nämlich einerseits k Knoten v1 , . . . , vk (die Variablenknoten“, wobei
”
vi der Variablen Xi zugeordnet ist), und andererseits für jede Klausel Cj sechs Knoten
uj1, uj2, uj3, wj1, wj2, wj3 , die zusammen die Klauselkomponente“ Kj für Klausel Cj bil”
den. Innerhalb von Kj gibt es genau neun Kanten, nämlich
(uj1, wj1), (uj2, wj2), (uj3, wj3), (uj1, uj2), (uj2, uj3), (uj3, uj1), (wj2, wj1), (wj3, wj2 ), (wj1, wj3).
Die drei u-Knoten bilden einen gerichteten Kreis, ebenso die drei w-Knoten, aber andersherum orientiert. Man kann von ujs nach wjs gelangen, für s = 1, 2, 3, aber nicht
umgekehrt. (Siehe Abb. 2.10.)
183
u
X3
w1
j1
j
X7
u
j2
w
j2
X9
u
w
j3
j3
Abbildung 2.10: Komponente Kj , wenn Cj = (X3 ∨ X 7 ∨ X9 ) ist.
Wenn Cj = (lj1 ∨ lj2 ∨ lj3 ) ist, dann wird dem Knotenpaar (ujs , wjs) das Literal ljs zugeordnet, und zwar ujs als Eintrittsknoten“ (in Kj ) und wjs als Austrittsknoten“.
”
”
Beispiel : Wenn Cj = (X3 ∨ X 7 ∨ X9 ), dann ist uj1 der Eintrittsknoten für X3 und wj1 der
Austrittsknoten für X3 in Kj , analog für X 7 und X9 . (Siehe Abb. 2.10.)
Nun bleibt noch, die Variablenknoten v1 , . . . , vk mit den Klauselkomponenten zu verbinden. Dazu stellt man sich vor, dass von vi ausgehend zwei gerichtete Wege zum Knoten
vi+1 (bzw. v1 , falls i = k) laufen: ein Xi -Weg“ und ein X i -Weg“. Der Xi -Weg verlässt vi
”
”
mit einer Kante, die zu einem Xi -Eintrittsknoten ujs einer Klauselkomponente führt. Die
nächste Kante führt vom entsprechenden Xi -Austrittsknoten wjs zu einem anderen Xi Eintrittsknoten uj s , dann vom entsprechenden Xi -Austrittsknoten wj s wieder zu einem
Xi -Eintrittsknoten usw., bis alle Xi -Eintrittsknoten verbraucht sind. Vom entsprechenden
Austrittsknoten führt dann eine Kante zum Knoten vi+1 (falls i < k) oder zum Knoten v1
(falls i = k). Zusammenfassend kann man anschaulich sagen, dass auf dem Xi -Weg alle
Klauselkomponenten Kj aufgefädelt“ sind, für die gilt, dass Xi in Cj vorkommt.
”
Xi
Xi
Xi
Xi
v i +1
vi
Xi
Xi
Xi
Abbildung 2.11: Xi -Weg und X i -Weg von vi nach vi+1 .
Der X i -Weg“ führt ebenfalls von vi zu vi+1 (bzw. v1 , falls i = k), und zwar über alle
”
Paare von Eintritts-/Austrittsknoten für X i .
Der resultierende Graph heißt Gϕ . Wir setzen f (ϕ) := Gϕ . (Siehe Abb. 2.11.)
184
Behauptung 1: f ∈ FP. – Es ist nicht schwer, sich klarzumachen, dass Gϕ mit seinen
k + 6r Knoten und 2k + 12r Kanten (in jeden Knoten führen exakt zwei Kanten) in
polynomieller Zeit aus ϕ konstruiert werden kann. Das Hauptproblem ist dabei, geeignete
Namen für die Knoten von Gϕ festzulegen und zu verwalten.
⇔
Behauptung 2: ϕ ist erfüllbar
Gϕ besitzt einen (gerichteten) Hamiltonkreis.
⇒“: Sei v : {X1 , . . . , Xk } → {0, 1} eine Belegung mit v(ϕ) = 1. Das heißt, dass jede
”
Klausel Cj ein, zwei oder drei Literale besitzt, die von v den Wert 1 ( wahr“) bekommen.
”
Der gesuchte Hamiltonkreis ergibt sich nun wie folgt. Wir beschreiben, wie die Rundreise
verläuft; die Anordnung ergibt sich daraus.
Wir bauen zunächst einen rudimentären Kreis Z0 wie folgt: Von vi nach vi+1 (bzw. v1
für i = k) benutzen wir die Kanten des Xi -Wegs, wenn v(Xi ) = 1, und die Kanten
des X i -Wegs, wenn v(Xi ) = 0. Innerhalb einer Klauselkomponente benutzen wir die
direkten Verbindungen von Eintrittsknoten ujs zum entsprechenden Austrittsknoten wjs .
Da jede Klausel ein wahres Literal enthält, wird auf diesem vorläufigen Kreis Z0 auch jede
Klauselkomponente erreicht.
Was noch fehlt, ist der Besuch jedes Knotens in jeder Klauselkomponente Kj . Betrachte
ein festes solches Kj . Es gibt drei Fälle.
1. Fall : Cj hat drei wahre Literale. – In diesem Fall betritt und verlässt Z0 die Klauselkomponente dreimal und besucht dabei alle sechs Knoten. Es ist nichts weiter zu
tun.
u
X3
j1
w1
j
X7
u
j2
u
X9
j3
w
j2
w
j3
Abbildung 2.12: Komponente mit drei wahren Literalen, v(X3 ) = v(X 7 ) = v(X9 ) = 1.
2. Fall : Cj hat zwei wahre Literale. – Der Einfachheit halber nehmen wir an, dass dies
lj1 und lj2 sind (sonst wird umnummeriert). Der Kreis Z0 betritt Kj zweimal und
besucht dabei uj1 und wj1 , uj2 und wj2 . Wir ersetzen in Z0 die Kante (uj2, wj2)
durch die drei Kanten
185
u
X3
j1
w1
j
X7
u
j2
X9
u
j3
w
j2
w
j3
Abbildung 2.13: Komponente mit zwei wahren Literalen, v(X3 ) = v(X 7 ) = 1.
(uj2 , uj3), (uj3, wj3), (wj3, wj2). Dadurch werden die zwei fehlenden Knoten uj3 , wj3
in den Kreis eingebaut“. (Man beachte, wie hier benutzt wird, dass der u-Kreis“
”
”
und der w-Kreis“ in Ku gegenläufig gerichtet sind.)
”
3. Fall : Cj hat ein wahres Literal. – Wir nehmen an, dass dies lj1 ist. Wir ersetzen in Z0 die
Kante (uj1 , wj1) durch die fünf Kanten
u
X3
j1
w1
j
X7
u
j2
u
X9
j3
w
j2
w
j3
Abbildung 2.14: Komponente mit einem wahren Literal, v(X3 ) = 1.
(uj1 , uj2), (uj2, uj3), (uj3, wj3 ), (wj3, wj2), (wj2, wj1). Dadurch werden die vier fehlenden Knoten uj2, uj3, wj2, wj3 in den Kreis eingebaut“. (Wieder wird benutzt, dass
”
der u-Kreis“ und der w-Kreis“ in Ku gegenläufig gerichtet sind.)
”
”
Den durch diese Korrekturen in jeder Klauselkomponente entstandenen Kreis nennen wir
Z. Dieser ist ein Hamiltonkreis in Gϕ : Jeder Knoten wird genau einmal besucht.
⇐“: Sei Z ein Hamiltonkreis in Gϕ . – Wir müssen eine Belegung v konstruieren, die ϕ
”
wahr macht, das heißt, in jeder Klausel mindestens ein Literal wahr macht.
Die Definition von v ist einfach: Sei 1 ≤ i ≤ k. Der Kreis Z besucht den Knoten vi und
verlässt ihn auf einer der beiden Kanten. Falls dies die erste Kante des Xi -Wegs ist, setzen
wir v(Xi) = 1, falls es die erste Kante des X i -Wegs ist, setzen wir v(Xi ) = 0.
186
Nun müssen wir zeigen, dass v eine erfüllende Belegung ist, d. h. dass jede Klausel Cj ein
wahres Literal enthält. Die Idee ist zu zeigen, dass Z exakt so aussehen muss, wie wir den
Kreis in Teil ⇒“ konstruiert haben. Insbesondere gilt: Wenn Z den Knoten vi mit der
”
ersten Kante des Xi -Weges verlässt, dann muss Z diesen Weg komplett bis zum Knoten
vi+1 (bzw. v1 ) durchlaufen und kann nicht unterwegs ausbrechen“. Die analoge Aussage
”
gilt, wenn Z den Knoten vi mit der ersten Kante des X i -Weges verlässt.
Um zu verstehen, woran das liegt, betrachten wir eine feste Klauselkomponente K mit
Knoten u1 , u2, u3 , w1 , w2 , w3 . Der Index j wird unterdrückt. Wir nehmen an, dass Z die
Eintrittskante von v1 benutzt, und zeigen, dass der Teilweg von Z in K, der v1 betritt,
K bei w1 verlassen muss. (Daraus folgt, dass Z den gesamten Xi -Weg enthalten muss,
wenn er die erste Kante des Xi -Wegs enthält, die vi verlässt, und natürlich entsprechend
für den X i -Weg.) Der Beweis ist indirekt.
Annahme 1: Z betritt K bei v1 und verlässt K bei w2 .
1. Fall : Z enthält die Kante (u1 , w1 ). – Um nach w2 zu kommen, muss sich (w1 , w3 ) anschließen. Dann kann aber weder die Kante (u3 , u1 ) noch die Kante (u3 , w3 ) auf Z
liegen, also wird u3 nicht besucht, Widerspruch.
u1
X3
w1
X7
u2
u3
X9
w2
w3
2. Fall : Z enthält die Kante (u1 , u2 ). – Dann können die Kanten (u1 , w1 ) und (w2 , w1 ) nicht
in Z liegen. Das heißt, dass Z Knoten w1 nicht besucht, Widerspruch.
u1
X3
w1
X7
u2
u3
X9
w2
w3
Annahme 2: Z betritt K bei v1 und verlässt K bei w3 .
187
1. Fall : Z erreicht bei diesem Besuch Knoten w3 mit Kante (w1 , w3 ). – Dann kann aber
weder (u3 , u1 ) noch (u3, w3 ) auf Z liegen, also wird u3 nicht besucht, Widerspruch.
u1
X3
w1
X7
u2
u3
X9
w2
w3
2. Fall : Z erreicht w3 mit Kante (u3, w3 ). – Dann muss die Kante (u2 , u3 ) benutzt werden,
und die Kanten (u2 , w2 ) und (w3 , w2) liegen nicht auf Z, also wird w2 nicht besucht,
Widerspruch.
u1
X3
w1
X7
u2
u3
X9
w2
w3
Behauptung: Jedes Cj hat mindestens ein Literal, das unter v den Wert 1 erhält.
Beweis der Behauptung: Wir wissen, dass Z die Komponente Kj mindestens einmal besucht. Nach der obigen Überlegung ist dieser Besuch Teilstück eines Xi -Wegs oder X i Wegs für ein Literal Xi bzw. X i , das in Cj vorkommt. Nach Wahl der Belegung v muss
dieses Literal von v den Wert 1 erhalten.
Eine Variante des Problems Gerichteter Hamiltonkreis“ ist das Problem Gerichteter
”
”
Hamiltonweg“. Dabei ist ein gerichteter Graph G gegeben und es wird gefragt, ob es in
G einen gerichteten Weg (π(1), . . . , π(m)) gibt, so dass jeder Knoten auf dem Weg genau
einmal vorkommt (einen Hamiltonweg“). Zu diesem Problem gehört die Sprache
”
LDHP = {G | G Digraph mit ∃ Hamiltonweg in G}.
Man zeigt LDHP ∈ NP wie üblich, und L3-SAT ≤p LDHP mit demselben Beweis wie
eben. Der einzige Unterschied ist, dass Xk -Weg und X k -Weg von vk zu einem weiteren
Variablenknoten vk+1 führt anstatt zu v1 . Es folgt:
188
2.7.6 Satz
LDHP ist NP-vollständig.
Nun wenden wir uns der ungerichteten Version des Hamiltonkreisproblems zu. Hier ist
der gegebene Graph G ungerichtet. Die zugehörige Sprache ist:
LHC = {G | G Graph, G besitzt einen Hamiltonkreis}.
2.7.7 Satz
LHC ist NP-vollständig.
Beweis: Der Beweis für LHC ∈ NP“ erfolgt wie üblich. Um zu zeigen, dass LHC NP-schwer
”
ist, müssen wir eine Reduktionsfunktion finden, die eine NP-vollständige Sprache L auf
LHC reduziert. Wir benutzen hier L = LDHC ; dies macht die Reduktion besonders einfach.
Eine Reduktion dieser Art nennt man übrigens Reduktion durch lokale Ersetzung“, da
”
nur kleine, lokale Umbauten vorgenommen werden.
Wir benötigen eine Funktion f , die einen gerichteten Graphen G in einen ungerichteten
Graphen G transformiert, derart dass gilt:
⇔
G besitzt gerichteten H.-Kr.
G besitzt ungerichteten H.-Kr.
Gegeben sei also G = (V, E).4 Wir bauen G = (V , E ) wie folgt: Für jeden Knoten v ∈ V
gibt es drei Knoten vin , vc , vout in V , die durch zwei Kanten (vin , vc ) (vc , vout ) in E zu
einem Weg der Länge 2 zusammengehängt sind. Der mittlere Knoten vc hat also Grad 2.
Für jede gerichtete Kante (v, w) ∈ E enthält E die ungerichtete Kante (vout , win).
Beispiel :
u out
u
c
u
x
v
u
w
x out
x
x
c
in
v out
v
in
wout
c
v
w
c
w
in
in
Abbildung 2.15: Transformation von Digraph G in Graph f (G) = G .
Es ist offensichtlich, dass man G aus G in polynomieller Zeit konstruieren kann.
Behautpung: G besitzt Hamiltonkreis ⇔ f (G) = G besitzt Hamiltonkreis.
4
Der naheliegende Ansatz, in G einfach die Kantenrichtungen zu ignorieren und so zu G zu kommen,
funktioniert nicht, wie man sich leicht an einem kleinen Beispiel – drei Knoten genügen – überlegt.
189
Beweis der Behauptung:
⇒“: Sei ein Hamiltonkreis K = (v1 , v2 , . . . , vm , v1 ) in G gegeben. Dann ist
”
(2.1)
K = ((v1 )in , (v1 )c , (v1 )out , (v2 )in , (v2 )c , (v2 )out , . . . , (vm )in , (vm )c , (vm )out , (v1 )in )
Hamiltonkreis in G .
⇐“: Sei ein Hamiltonkreis K in G gegeben. Jeder Knoten vc wird von K besucht, hat
”
aber nur zwei Kanten. Daraus folgt, dass alle inneren“ Kanten (vin , vc ) und (vc , vout ) zu
”
K gehören müssen. Betrachte nun vout . Kante (vc , vout ) gehört zu K . Also gibt es in K genau eine Kante (vout , win) für einen Knoten w. Von win muss der Kreis auf den Kanten
(win, wc ) und (wc , wout ) weitergehen. Diese Argumentation wird iteriert. Es folgt, dass sich
beim Start in (v1 )in mit Kante ((v1 )in , (v1 )c ) und Weiterverfolgen von K eine Knotenfolge
wie in (2.1) ergeben muss. Dann ist K = (v1 , . . . , vm , v1 ) ein Hamiltonkreis in G.
Schließlich kommen wir zum Problem des Handungsreisenden (TSP). Dieses wurde in Beispiel 2.3.7 eingeführt; zur Entscheidungsvariante gehört die Sprache LTSP . Man beachte,
dass sich diese Formulierung auf ungerichtete kantengewichtete Graphen bezieht.
2.7.8 Satz
LTSP ist NP-vollständig.
Beweis: Dass LTSP ∈ NP ist, zeigt man analog zum Hamiltonkreisproblem in Beispiel 2.3.6.
Um zu zeigen, dass LTSP NP-schwer ist, benutzen wir die Reduktionsmethode. Wir zeigen:
LHC ≤p LTSP .
Die Reduktionsfunktion f transformiert einen Graphen G = (V, E) mit Knotenmenge
V = {1, . . . , m} in einen Gewichtssatz y = (aij )1≤i<j≤m für den vollständigen Graphen
Km auf m Knoten, so dass G einen Hamiltonkreis besitzt genau dann wenn es in Km mit
Gewichten y eine Rundreise mit Kosten m gibt. Weil jede Rundreise aus genau m Kanten
besteht, können wir einfach jeder Kante (u, v) ∈ E Gewicht 1 geben, den anderen Kanten
größeres Gewicht, zum Beispiel 2. Formal:
f (G) = (m, a12 , . . . , a1m , a23 , . . . , a2m , . . . , am−2,m−1 , am−2,m , am−1,m , m),
wobei
aij =
1 , falls 1 ≤ i < j ≤ m und (i, j) ∈ E,
2 , falls 1 ≤ i < j ≤ m und (i, j) ∈
/ E.
Man sieht sofort, dass f in Polynomialzeit berechenbar ist.
190
fett: 1
dünn: 2
Abbildung 2.16: Ein Graph G und die Gewichte in K6 , die f (G) entsprechen.
Behauptung:
G besitzt einen Hamiltonkreis ⇔ f (g) ∈ LTSP .
Beweis der Behauptung:
⇒“: Sei ein Hamiltonkreis K = (v1 , v2 , . . . , vm , v1 ) in G gegeben. Die Kanten dieses
”
Kreises erhalten in f (G) Gewicht 1, bilden also eine Rundreise in Km mit den Gewichten
aus f (G) mit Gesamtkosten m. Also ist f (G) ∈ LTSP .
⇐“: f (G) ∈ LTSP . Das heißt, dass es in Km mit den Gewichten aus f (G) eine Rundreise
”
mit Gesamtkosten m gibt. Diese Rundreise muss m Kanten haben. Da als Gewichte nur
1 und 2 vorkommen, kann auf der Rundreise keine Kante mit Gewicht 2 liegen; alle
Gewichte müssen gleich 1 sein. Nach der Definition der aij bildet diese Rundreise einen
Hamiltonkreis in G.
Auch das TSP hat eine gerichtete Variante und weitere Varianten, die nicht nach Kreisen
fragen, sondern nach Wegen, die alle Knoten berühren.
Bemerkung: Wir schließen mit der Bemerkung, dass es inzwischen viele Tausend Berechnungsprobleme gibt, für die man die NP-Vollständigkeit nachweisen konnte. Für keines
dieser Probleme wurde ein Polynomialzeitalgorithmus gefunden. Wenn man bedenkt, wie
viele Forscher sich mit diesen Problemen beschäftigt haben, ist es offensichtlich selbst im
Falle P = NP extrem schwierig, einen solchen Algorithmus zu finden. Es ist also legitim,
für die aktuelle Arbeit beim Algorithmendesign von der Hypothese P = NP auszugehen
und zu versuchen, NP-vollständige Probleme entweder zu umgehen oder mit heuristischen
oder approximativen Ansätzen zu bearbeiten. Diese sind Gegenstand in weiterführenden
Vorlesungen über Algorithmen.
191
Herunterladen