Approximationsalgorithmen - fbi.h-da.de

Werbung
Approximationsalgorithmen
Kapitel 1: Motivation und Einordnung
Kapitel 2: Begriffe und Notationen
Kapitel 3: Grundlagen aus der Komplexitätstheorie
Kapitel 4: Approximationsalgorithmen konstanter Güte
Kapitel 5: Approximationsschemata
Kapitel 6: Vollständige Approximationsschemata
Kapitel 7: Approximationsalgorithmen nichtkonstanter Güte
Kapitel 8: Entwurfstechniken
Kapitel 9: Anhang
Kapitel 10: Verzeichnisse
Autor:
Prof. Dr. Steffen Lange
1. Auflage
Hochschule Darmstadt
© 2016 Hochschule Darmstadt
Fachbereich Informatik
Haardtring 10
64295 Darmstadt
1. Auflage (14. Dezember 2016)
Das Werk einschließlich seiner Teile ist urheberrechtlich geschützt. Jede
Verwendung außerhalb der engen Grenzen des Urheberrechtsgesetzes
ist ohne Zustimmung der Verfasser unzulässig und strafbar. Das gilt
insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen
und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Inhaltsverzeichnis
Seite 3
Inhaltsverzeichnis
Einleitung zum Vorlesungsskript
I.
II.
III.
Kapitel 1
1.1
1.2
Motivation und Einordnung
Begriffe und Notationen
3.1
3.2
3.3
Grundlagen aus der Komplexitätstheorie
4.1
4.2
Approximationsalgorithmen konstanter Güte
Prozessoptimierung . . . . . . . . . . . . . . . . . . .
4.1.1 Ein Job-Scheduling-Problem . . . . . . . . .
4.1.2 Das metrische Traveling-Salesman-Problem .
Nichtapproximierbarkeitsergebnisse . . . . . . . . .
Kapitel 5
5.1
5.2
6.1
6.2
7.1
7.2
7.3
8.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
41
46
60
65
Vollständige Approximationsschemata
65
69
75
Approximationsalgorithmen nichtkonstanter Güte
75
83
89
Graphentheoretische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Maximale Cliquen und maximale unabhängige Mengen . . . . . . . . . . . . . . . . . . . . . . 91
Minimale Knotenfärbungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Entwurfstechniken
Entwurfstechnik Randomisierung . . . . . . . . . . . . . . . . .
8.1.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.2 Anwendungsbeispiel: Maximale Schnitte . . . . . . . . .
Entwurfstechnik Lineare Programmierung . . . . . . . . . . . .
8.2.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.2 Anwendungsbeispiel: Minimale Knotenüberdeckungen .
Kapitel 9
9.1
9.2
.
.
.
.
Das Rucksackproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Komplexitätstheoretische Einordnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kapitel 8
8.1
.
.
.
.
Approximationsschemata
Kapitel 7
25
28
37
41
.
.
.
.
Ein Job-Scheduling-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Maximale-Teilsummen-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kapitel 6
19
20
21
25
Die Komplexitätsklassen P und NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NP-vollständige Entscheidungsprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NP-schwere Optimierungsprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kapitel 4
7
14
19
Effiziente Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Optimierungsprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Approximationsalgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kapitel 3
4
5
6
7
Fallstudie: Ein Packungsproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fazit und Ergänzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kapitel 2
2.1
2.2
2.3
4
Abkürzungen der Randsymbole und Farbkodierungen . . . . . . . . . . . . . . . . . . . . . .
Zum Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modullehrziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Anhang
117
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
117
119
129
141
143
151
159
Maximale Schnitte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Hamiltonsche Kreise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Kapitel 10
Verzeichnisse
169
10.1 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Seite 4
Einleitung zum Vorlesungsskript
Einleitung zum Vorlesungsskript
I. Abkürzungen der Randsymbole und Farbkodierungen
Beispiel
B
Definition
D
Exkurs
E
Satz
S
Übung
Ü
Zum Autor
Seite 5
II. Zum Autor
Steffen Lange promovierte 1988 an der Humboldt-Universität zu Berlin mit einer Arbeit zur induktiven Programmsynthese. Im Jahr 2000 habilitierte er an der
Universität Leipzig mit einer Arbeit zum induktiven Lernen von rekursiven Sprachen. Er war Senior Researcher am Deutschen Forschungszentrum für Künstliche
Intelligenz und dort in Forschungs- und Industrieprojekten in den Bereichen ELearning und IT-Sicherheit tätig. Seit April 2004 ist Steffen Lange Professor für
Theoretische Informatik an der Hochschule Darmstadt.
Seite 6
Einleitung zum Vorlesungsskript
III. Modullehrziele
Die Studierenden sollen:
• ein Verständnis für ausgewählte Prinzipien zum Entwurf approximativer Algorithmen entwickeln,
• die Fähigkeit entwickeln, Optimierungsprobleme in Bezug auf ihre Schwere zu analysieren,
• Approximationsalgorithmen für unterschiedliche Problembereiche kennenlernen, verstehen und anwenden
• die Fähigkeit herausbilden, Approximationsalgorithmen in Bezug auf die Güte der von ihnen bestimmten Lösungen und auf deren Laufzeit zu analysieren.
Kapitel 1 Motivation und Einordnung
Seite 7
Kapitel 1 Motivation und Einordnung
Im Fokus unserer Untersuchungen stehen Optimierungsprobleme. Bei einem Optimierungsproblem geht es darum, zu jeder Probleminstanz unter allen zulässigen Lösungen eine zu bestimmen, die in Bezug auf eine zuvor präzisierte Gütefunktion optimal ist. Bei einem Maximierungsproblem ist eine zulässige Lösung
maximaler Güte, bei einem Minimierungsproblem eine minimaler Güte zu bestimmen.
Es gibt eine Vielzahl praktisch relevanter Optimierungsprobleme, für die man bisher keinen Algorithmus kennt, mit dem man zu jeder Probleminstanz in vertretbarer Zeit eine optimale Lösung bestimmen kann. Mehr noch, man vermutet, dass es
für diese Optimierungsprobleme höchstwahrscheinlich gar keine effizienten Lösungsalgorithmen gibt. Mit solchen Optimierungsproblemen werden wir uns im
Folgenden auseinandersetzen. Um sie adäquat zu behandeln, gibt man die Forderung auf, stets optimale Lösungen bestimmen zu müssen. Stattdessen versucht
man Algorithmen zu entwerfen, die zu jeder Probleminstanz in vertretbarer Zeit
eine zulässige Lösung bestimmen, die nachweislich ein bestimmtes Qualitätskriterium erfüllt. Solche Algorithmen nennt man Approximationsalgorithmen.
Methoden zum Entwurf und zur Beurteilung von Approximationsalgorithmen
bilden den zentralen Gegenstand unserer Untersuchungen. Um einen ersten Eindruck davon zu bekommen, beschäftigen wir uns im nächsten Abschnitt mit einem ersten Optimierungsproblem.
1.1 Fallstudie: Ein Packungsproblem
In dieser Fallstudie werden wir uns recht detailliert mit dem Optimierungsproblem MinBinPacking beschäftigen. Bei diesem Optimierungsproblem geht es um
folgende Aufgabenstellung: Es sind Objekte bestimmter Größe gegeben, die in Behälter einer festen Größe einzupacken sind. Ziel ist es, die Anzahl der benötigten
Behälter zu minimieren.
Beispiel 1.1
Es seien 5 Objekte der Größe 6 und 7 Objekte der Größe 4 gegeben. Wenn die
zur Verfügung stehenden Behälter die Größe 10 haben, genügen offensichtlich 6 Behälter, um diese Objekte einzupacken.
Formal wird eine Probleminstanz (kurz: Instanz) des Optimierungsproblems MinBinPacking durch ein Tripel I = (O, s, b) beschrieben, wobei gilt:
• O = {o1 , . . . , on } ist eine Menge von n Objekten,
• s ist eine Funktion, die jedem Objekt in O seine Größe, also eine Zahl aus
Q+ zuordnet,1
• b ist eine Zahl aus Q+ , die die Größe der verfügbaren Behälter angibt, wobei
b ≥ s(o) für alle o ∈ O gilt.
Eine Zerlegung B = (B1 , . . . , Bk ) der Menge O in disjunkte Teilmengen ist eine
zulässige Lösung für eine Instanz I = (O, s, b), wenn für jede Teilmenge Bj gilt,
1 Mit
Q+ bezeichnen wir die Menge aller rationalen Zahlen echt größer Null.
B
Seite 8
Kapitel 1 Motivation und Einordnung
P
dass die Objekte in Bj in einen Behälter passen, also o∈Bj s(o) ≤ b gilt. Die Güte
von B für I entspricht der Anzahl k der Teilmengen in dieser Zerlegung.
Im Folgenden bezeichnen wir mit Opt(I) eine optimale Lösung für eine Instanz I,
d.h. eine zulässige Lösung mit einer minimalen Anzahl von Teilmengen, und mit
w(Opt(I)) deren Güte.
Optimierungsproblem MinBinPacking
Eingabe: Instanz I = (O, s, b)
Ausgabe: zulässige Lösung B = (B1 , . . . , Bk ) minimaler Güte für die Instanz I
Wie wir in Kapitel 3 sehen werden, ist MinBinPacking ein NP-schweres Optimierungsproblem. Deshalb vermutet man, dass es höchstwahrscheinlich keinen effizienten Lösungsalgorithmus für MinBinPacking gibt, d.h. keinen effizienten Algorithmus, der zu jeder Instanz I eine zulässige Lösung der Güte w(Opt(I)) bestimmt.
Für MinBinPacking gibt es einige Approximationsalgorithmen, die sich sich in
Bezug auf ihre Laufzeit und die Qualität der von ihnen bestimmten Lösungen
unterscheiden.
Der Approximationsalgorithmus NextFit für MinBinPacking arbeitet wie folgt:
Im ersten Schritt wird ein neuer Behälter geöffnet, in den das erste Objekt eingepackt wird. In jedem Folgeschritt wird geprüft, ob das aktuell betrachtete Objekt
in den zuletzt geöffneten Behälter passt. Falls dem so ist, kommt es in diesem Behälter; andernfalls wird es in ein neuen Behälter eingepackt. NextFit ist ein so
genannter Online-Algorithmus.2
B
Beispiel 1.2
Es seien die Objekte o1 , o2 , o3 , o4 mit den Gewichten s(o1 ) = s(o2 ) = 6 und
s(o3 ) = s(o4 ) = 4 gegeben. Wenn die Behälter die Größe 10 haben, bestimmt
der Online-Algorithmus NextFit die folgende zulässige Lösung (B1 , B2 , B3 )
mit B1 = {o1 }, B2 = {o2 , o3 } und B3 = {o4 }, also eine Lösung der Güte 3.
Es sei angemerkt, dass offensichtlich w(Opt(I)) = 2 gilt.
Der Approximationsalgorithmus NextFit kann wie folgt beschrieben werden:
Algorithmus NextFit für MinBinPacking
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
k := 1;
Bk := {o1 };
sk := s(o1 );
for i := 2 to n do
if sk + s(oi ) ≤ b then
Bk := Bk ∪ {oi };
2 Online-Algorithmen
verarbeiten die Eingabe sequentiell. Sie treffen Entscheidungen, bevor die gesamte Eingabe verarbeitet wurde, und können eine einmal getroffene Entscheidung in der Regel
nicht mehr revidieren. Mit Blick auf unseren Approximationsalgorithmus NextFit bedeutet das:
Wurde ein Objekt in einen Behälter eingepackt, so kann dieses Objekt nicht mehr aus diesem Behälter entfernt werden, und zwar auch dann nicht, wenn sich diese Entscheidung im nachhinein
als wenig glücklich herausstellt.
1.1 Fallstudie: Ein Packungsproblem
Seite 9
sk := sk + s(oi );
else
k := k + 1;
Bk := {oi };
sk := s(oi );
fi
od
for j := 1 to k do
return Bj
od
7
8
9
10
11
12
13
14
15
16
NextFit benötigt offenbar maximal O(n) viele Rechenschritte, um für eine Instanz
I = (O, s, b) mit |O| = n eine zulässige Lösung zu bestimmen.
Wir zeigen jetzt, dass die von NextFit bestimmten Lösung immer höchstens doppelt so viele Behälter wie eine optimale Lösung benutzt.
Satz 1.1
Es sei I = (O, s, b) eine Instanz des Optimierungsproblems MinBinPacking
und B = (B1 , . . . , Bk ) die vom Approximationsalgorithmus NextFit bestimmte Lösung. Dann gilt:
S
• k ≤ 2 · w(Opt(I)).
Beweis. Wir betrachten irgendwelche zwei aufeinanderfolgenden Mengen Bj und
Bj+1 in der von NextFit bestimmten Lösung. Dann gilt
X
X
s(o) +
s(o) > b,
o∈Bj
o∈Bj+1
da andernfalls alle Objekte aus dem Behälter Bj+1 auch in den Behälter Bj gepasst
hätten.
Sei nun m = k2 .3 . Da in einen Behälter nur Objekte mit einer Gesamtgröße kleiner gleich b eingepackt werden können und in den Behältern B1 , . . . , B2m Objekte mit einer Gesamtgröße echt größer als m · b verstaut sind, muss jede zulässige
Lösung für I mindestens einen weiteren Behälter, als mindestens m + 1 Behälter
benutzen. Also gilt m+1 ≤ w(Opt(I)) und damit auch 2m+2 ≤ 2·Opt(I). Wegen
m ≤ k2 ≤ m + 1 folgt damit auch k ≤ 2 · w(Opt(I)).
Satz 1.1 gibt nur eine obere Schranke für die Güte der von NextFit bestimmten Lösungen an. Dass es keine deutlich bessere obere Schranke gibt, belegt das folgende
Beispiel.
Beispiel 1.3
Wir betrachten die folgende Instanz I = (O, s, b) von MinBinPacking:
x ∈ Q+ Dann bezeichnen wir wie üblich mit bxc die größte natürliche Zahl, die kleiner gleich
x ist, und mit dxe die kleinste natürliche Zahl größer gleich x.
3 Sei
B
Seite 10
Kapitel 1 Motivation und Einordnung
• O = {o1 , . . . , o4m },
• s(o2i−1 ) = 2m, falls 1 ≤ i ≤ 2m gilt,
• s(o2i ) = 2, falls 1 ≤ i ≤ 2m gilt
• b = 4m.
Die optimale Lösung enthält genau m + 1 Teilmengen, und zwar {o1 , o3 },
. . . , {o4m−3 , o4m−1 } und {o2 , . . . , o4m }. Die von NextFit bestimmte Lösung {B1 , . . . , Bk } enthält aber 2m Teilmengen, und zwar {o1 , o2 }, . . . ,
{o4m−1 , o4m }. Also gilt: k ≥ 2 · w(Opt(I)) − 2.
FirstFit ist ebenfalls ein Online-Algorithmus für MinBinPacking. Statt immer
dann einen neuen Behälter zu öffnen, wenn das aktuell betrachtete Objekt nicht
mehr in den zuletzt geöffneten Behälter passt, öffnet FirstFit nur dann einen neuen Behälter, wenn dieses Objekt in keinen der bereits geöffneten Behälter passt.
Der auf dieser Idee basierende Online-Algoithmus für MinBinPacking kann wie
folgt beschrieben werden:
Algorithmus FirstFit für MinBinPacking
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
k := 1;
Bk := {o1 };
sk := s(o1 );
for i := 2 to n do
j := 0;
repeat
j := j + 1;
until (j > k) || (sj + s(oi ) ≤ b)
if j ≤ k then
Bj := Bj ∪ {oi };
sj := sj + s(oi );
else
k := k + 1;
Bk := {oi };
sk := s(oi );
fi
od
for j := 1 to k do
return Bj
od
FirstFit benötigt offenbar O(n2 ) Rechenschritte, um für eine Instanz I = (O, s, b)
mit |O| = n eine zulässige Lösung zu bestimmen. Man kann sich leicht überlegen,
dass die von FirstFit bestimmten Lösungen garantiert nicht schlechter als die von
NextFit bestimmten sind. Eine etwas aufwändigere Analyse zeigt, dass man für
die Güte der von NextFit bestimmten Lösungen eine obere Schranke beweisen
kann, die in vielen Fällen besser ist (siehe Csirik and Johnson [1991]).
1.1 Fallstudie: Ein Packungsproblem
Satz 1.2
Es sei I = (O, s, b) eine Instanz des Optimierungsproblems MinBinPacking
und die Zerlegung B = (B1 , . . . , Bk ) die vom Approximationslgorithmus
FirstFit bestimmte Lösung. Dann gilt:
Seite 11
S
• k ≤ d 17
10 · w(Opt(I))e + 1.
Der bisher betrachteten Ansatz, Online-Algorithmen zu benutzen, um approximative Lösungen für das Optimierungsproblem MinBinPacking zu bestimmen, hat
prinzipielle Grenzen wie das nächste Ergebnis zeigt.
Satz 1.3
S
Es gibt keinen Online-Approximationsalgorithmus für das Optimierungsproblem MinBinPacking, der für jede Instanz I = (O, s, b) eine Zerlegung
B = (B1 , . . . , Bk ) als Lösung bestimmt, für die gilt:
• k<
4
3
· w(Opt(I)).
Beweis. Wir nehmen das Gegenteil an. Sei also A ein Online-Algorithmus, der
für jede Instanz I von MinBinPacking eine Zerlegung (B1 , . . . , Bk ) als Lösung bestimmt, für die k < 43 · w(Opt(I)) gilt.
Wir betrachten nun die folgende Instanz I = (O, s, b) von MinBinPacking:
• O = {o1 , . . . , o4m },
• s(oi ) = 4, falls 1 ≤ i ≤ 2m gilt,
• s(oi ) = 6, falls 2m + 1 ≤ i ≤ 4m gilt
• b = 10.
Offenbar gilt w(Opt(I)) = 2m sowie w(Opt(I 0 )) = m, wobei I 0 diejenige Instanz
von MinBinPacking bezeichnet, die genau die ersten 2m Objekte von O, also die
Menge O0 = {o1 , . . . , o2m } enthält.
Da A ein Online-Approximationsalgorithmus ist, muss A nach Verarbeitung der
Objekte in O0 , d.h. bei Eingabe der Instanz I 0 , eine Zerlegung B 0 = (B10 , . . . , Bk0 0 )
bestimmen, für die k 0 < 43 · w(Opt(I 0 )) = 43 m gilt. Man beachte, dass es in dieser
Zerlegung nur Behälter geben kann, in die ein bzw. zwei Objekte aus der Menge
O0 eingepackt wurden.
Sei nun k10 die Anzahl der Behälter mit einem Objekt und k20 die Anzahl der Behälter mit zwei Objekten in der Zerlegung B 0 = (B10 , . . . , Bk0 0 ). Da 2m Objekte zu
O0 gehören, gilt: k10 + 2k20 = 2m. Also gilt k10 + k20 = 2m − k20 . Aus k10 + k20 = k 0 folgt
zusammen mit k 0 < 34 m sofort 2m − k20 < 43 m. Also erhalten wir: k20 > 32 m.
Wir analysieren jetzt, wie A die Instanz I von MinBinPacking verarbeitet. Da A
ein Online-Algorithmus ist, muss A nach Verarbeitung der Objekte o1 , . . . , o2m
die Zerlegung B 0 = (B10 , . . . , Bk0 0 ) bestimmt haben. Im Anschluss daran, müssen
nacheinander die restlichen Objekte o2m+1 , . . . , o4m eingepackt werden, wobei A
eines dieser Objekte entweder in einen der bereits geöffneten Behälter B10 , . . . , Bk0 0
Seite 12
Kapitel 1 Motivation und Einordnung
(und zwar in einen, in dem sich aktuell nur ein Objekt befindet) oder in einen neu
zu öffnenden Behälter einpacken kann. Da jedes der Objekte o2m+1 , . . . , o4m die
Größe 6 hat, kann A sowohl in jeden der bereits geöffneten Behälter B10 , . . . , Bk0 0
als auch in jeden neu geöffneten Behälter nur eines dieser Objekte einpacken.
Also muss k ≥ k 0 + 2m − k10 = k10 + k20 + 2m − k10 = k20 + 2m gelten. Wegen
k20 > 32 m und w(Opt(I)) = 2m folgt also k > 32 m + 2m = 38 m = 43 · w(Opt(I)),
was unmittelbar unserer Annahme k < 43 · w(Opt(I)) widerspricht.
Für MinBinPacking gibt es auch Approximationsalgorithmen, die qualitativ
bessere Lösungen bestimmen. Diese Algorithmen sind natürlich keine OnlineAlgorithmen – sie analysieren zunächst die gegebene Instanz I = (O, s, b) als
Ganzes, bevor sie damit beginnen, ihre Lösung zu bestimmen.
Der im Folgenden vorgestellte Approximationsalgorithmus FirstFitDecreasing sortiert zunächst die Objekte der gegebenen Instanz I absteigend nach ihrer Größe
und verarbeitet im Anschluss die so modifizierte Eingabe auf die selbe Art und
Weise wie FirstFit.
Algorithmus FirstFitDecreasing für MinBinPacking
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Bestimme die bzgl. ihrer Größe absteigend sortierte Reihenfolge
o01 , . . . , o0n der Objekte in O;
k := 1;
Bk := {o01 };
sk := s(o01 );
for i := 2 to n do
j := 0;
repeat
j := j + 1;
until (j > k) || (sj + s(o0i ) ≤ b)
if j ≤ k then
Bj := Bj ∪ {o0i };
sj := sj + s(o0i );
else
k := k + 1;
Bk := {o0i };
sk := s(o0i );
fi
od
for j := 1 to k do
return Bj
od
FirstFitDecreasing benötigt O(n log(n)) + O(n2 ) Rechenschritte, um für eine Instanz I = (O, s, b) mit |O| = n eine zulässige Lösung zu bestimmen. Die Qualität der von FirstFitDecreasing bestimmten Lösungen kann wie folgt charkterisiert
werden.
1.1 Fallstudie: Ein Packungsproblem
Satz 1.4
Es sei I = (O, s, b) eine Instanz des Optimierungsproblems MinBinPacking
und die Zerlegung B = (B1 , . . . , Bk ) die vom Approximationsalgorithmus
FirstFitDecreasing bestimmte Lösung. Dann gilt: k ≤ 32 · w(Opt(I)) + 1.
Beweis. Sei I = (O, s, b) die gegebene Instanz des Optimierungsproblems MinBinPacking, B = (B1 , . . . , Bk ) die von FirstFitDecreasing bestimmte Lösung und
Opt(I) eine optimale Lösung für die Instanz I.
Wir betrachten die folgende Zerlegung der Menge O der einzupackenden Objekte:
• M1 = {o ∈ O; 32 b < s(o)},
• M2 = {o ∈ O; 21 b < s(o) ≤ 23 b},
• M3 = {o ∈ O; 13 b < s(o) ≤ 12 b},
• M4 = {o ∈ O; s(o) ≤ 13 b}
Zunächst interessieren wir uns für folgende Instanz I 0 = (O0 , s0 , b0 ) von MinBinPacking mit:
• O 0 = M1 ∪ M2 ∪ M3 ,
• s0 (o) = s(o) für alle o ∈ O0 ,
• b0 = b.
Sei Opt(I 0 ) eine optimale Lösung für die Instanz I 0 und B 0 = (B10 , . . . , Bk0 0 ) die
von FirstFitDecreasing bestimmte Lösung für die Instanz I 0 .
Beobachtung. w(Opt(I 0 )) = k 0 .
Begründung: Da 12 ·b < s(o) für jedes Objekt in M1 ∪M2 gilt, kann in jeden Behälter
der optimalen Lösung Opt(I 0 ) nur ein Objekt aus M1 ∪M2 eingepackt worden sein.
Da 31 · b < s(o) ≤ 12 · b für jedes Objekt in M3 gilt, folgt:
• in keinen Behälter der optimalen Lösung Opt(I 0 ), der ein Objekt aus M1
enthält, kann ein Objekt aus M3 eingepackt werden,
• in keinen Behälter der optimalen Lösung Opt(I 0 ), der ein Objekt aus M2
enthält, kann mehr als ein Objekt aus M3 eingepackt werden.
• in einen Behälter der optimalen Lösung Opt(I 0 ), der kein Objekt aus M1 ∪
M2 enthält, können jeweils zwei beliebig gewählte Objekte aus M3 eingepackt werden.
FirstFitDecreasing sortiert nun zunächst die Objekte aus O0 absteigend nach ihrer
Größe und verarbeitet sie in dieser Reihenfolge. Für jedes Objekt aus M1 ∪M2 wird
ein extra Behälter geöffnet. Da FirstFitDecreasing in jeden Behälter, der ein Objekt
aus M2 enthält und in den noch ein Objekt aus M3 passt, auch irgendwann ein Objekt aus M3 einpackt und da FirstFitDecreasing alle übrig gebliebenen Objekte aus
M3 bestmöglich auf die neu zu öffnende Behälter verteilt, folgt die Behauptung.
Wir betrachten nun, wie FirstFitDecreasing die gegebene Instanz I von MinBinPacking verarbeitet und die Zerlegung B = (B1 , . . . , Bk ) bestimmt. Nachdem alle
Objekte aus M1 ∪ M2 ∪ M3 verarbeitet wurden und FirstFitDecreasing bereits k 0
Seite 13
S
Seite 14
Kapitel 1 Motivation und Einordnung
Behälter geöffnet hat, beginnt FirstFitDecreasing damit, die Objekte aus M4 einzupacken.
Wir unterscheiden die folgenden beiden Fälle:
Fall 1. FirstFitDecreasing öffnet keinen neuen Behälter.
Offenbar gilt nun k 0 = k. Da natürlich w(Opt(I)0 ) ≤ w(Opt(I)) gilt, folgt aus
unserer Beobachtung, dass FirstFitDecreasing in diesem Fall sogar eine optimale
Lösung bestimmt. Damit gilt natürlich auch k ≤ 23 · w(Opt(I)) + 1.
Fall 2. FirstFitDecreasing öffnet zusätzliche Behälter.
Sei k 00 die Anzahl der zusätzlich geöffneten Behälter, die offenbar nur Objekte aus
M4 enthalten. Da s(o) ≤ 31 · b für jedes Objekt o in M4 gilt, erhalten wir nun:
• in jedem der ersten k 0 Behälter der von FirstFitDecreasing bestimmten Lösung B sind Objekte mit einer Gesamtgröße größer 23 b enthalten (andernfalls hätte ein in einen zusätzlichen Behälter gepacktes Objekt aus M4 in
den entsprechenden Behälter gepasst),
• in den zusätzlich geöffneten k 00 Behältern der von FirstFitDecreasing bestimmten Lösung B sind – mit Ausnahme des letzten Behälters – ebenfalls
Objekte mit einer Gesamtgröße größer 23 b enthalten (da in jeden zusätzlichen Behälter möglichst viele Objekte aus M4 eingepackt werden).
Also erhalten wir 23 b · (k 0 +Pk 00 − 1) ≤ G, wobei G die Gesamtgröße der Objekte
in O bezeichnet, d.h. G := o∈O s(o). Wegen k = k 0 + k 00 muss demzufolge auch
k − 1 ≤ 32 · Gb gelten.
Da in jeden Behälter der optimalen Lösung Opt(I) nur Objekte mit einer Gesamtgröße größer oder gleich b passen, gilt Gb ≤ w(Opt(I)). Also erhalten wir
k − 1 ≤ 23 · w(Opt(I)), was sofort k ≤ 23 · w(Opt(I)) + 1 impliziert.
Wie wir in Kapitel 3 sehen werden, gibt es höchstwahrscheinlich keinen effizienten
Approximationsalgorithmus für MinBinPacking, der Lösungen bestimmt, die im
Allgemeinen eine deutlich bessere Güte als die von FirstFitDecreasing bestimmten
Lösungen haben.
1.2 Fazit und Ergänzungen
Im Rahmen unserer Fallstudie haben wir unterscheidliche Approximierungsalgorithmen für das Optimierungsproblem MinBinPacking kennengelernt und analysiert. Da es sich bei MinBinPacking um ein Minimierungsproblem handelt, haben
wir obere Schranken für die Güte der von den beiden Approximationsalgorithmen NextFit und FirstFitDecreasing bestimmten Lösungen abgeleitet.
Beim Nachweis dieser oberen Schranken sind wir wie folgt vorgangen: In einem
ersten Schritt haben wir
(a) anhand der Eigenschaften der gegeben Instanz I = (O, s, b) von MinBinPacking bzw.
(b) anhand der Eigenschaften der vom verwendeten Approximationsalgorithmus bestimmten Lösung für I
1.2 Fazit und Ergänzungen
Seite 15
eine untere Schranke für die Güte einer optimale Lösung abgeleitet. In einem zweiten Schritt haben wir die gemäß (a) bzw. (b) abgleiteten unteren Schranken für die
Güte einer optimale Lösung verwendet, um die gesuchte obere Schranke für die
Güte der vom verwendeten Approximationsalgorithmus bestimmten Lösung zu
beweisen.
Exkurs 1.1
Seien t1 , t2 zwei Terme. Um zu zeigen, dass t2 eine obere Schranke für t1 ist,
genügt es einen Term t zu finden, der sowohl eine untere Schranke für t2 als
auch eine obere Schranke für t1 ist. Offensichtlich folgt aus t ≤ t2 und t1 ≤ t
sofort t1 ≤ t2 .
E
Bei der Analyse von FirstFitDecreasing sind wir im ersten Schritt gemäß (a) vorgegangen und haben uns überlegt, dass die optimale Lösung für I = (O, s, b) mindestens d Gb e viele Behälter benötigt, wobei G die Gesamtgröße der Objekte in O
ist. Bei der Analyse von NextFit sind wir im ersten Schritt gemäß (b) vorgegangen.
Wir haben gezeigt, dass die von NextFit bestimmte Lösung B für I die Eigenschaft
hat, dass in je zwei aufeinanderfolgende Behälter Objekte mit einem Gesamtgröße echt größer b eingepackt worden sind. Diese Eigenschaft garantiert, dass die
optimale Lösung für die Instanz I mindestens b k2 c + 1 Behälter benötigt, wobei k
die Anzahl in der Lösung B benutzen Behälter angibt
Diese Herangehensweise wird uns bei der Analyse von Approximationsalgorithmen immer wieder begegnen. Auf diese Art kann man Aussagen über die Güte
optimaler Lösungen ableiten, die wir gar nicht kennen und die wir höchstwahrscheinlich auch nicht effizient bestimmen können.
Um die Qualität der Lösungen eines Approximationsalgorithmus für ein Maximierungsproblem zu beurteilen, verwendet man untere Schranken anstelle von
oberen Schranken. Zur Illustration betrachten wir das Optimierungsproblem MaxSubsetSum.
Beim Maximierungsproblem MaxSubsetSum geht es darum, aus einer gegebenen
Menge von Objekten bestimmter Größe solche auszuwählen, die zusammen in
einen Behälter einer vorgegebenen Größe passen. Ziel ist es, Objekte auszuwählen,
die den zur Verfügung stehenden Behälter so gut wie möglich füllen.
Beispiel 1.4
Es seien 2 Objekte der Größe 6 und 3 Objekte der Größe 4 gegeben. Wenn
der zur Verfügung stehende Behälter die Größe 17 hat, sollten alle Objekte
der Größe 6 und ein Objekt der Größe 4 ausgewählt werden.
Formal wird eine Instanz des Optimierungsproblem MaxSubsetSum durch ein Tripel I = (O, s, b) beschrieben, wobei gilt:
• O = {o1 , . . . , on } ist eine Menge von n Objekten,
• s ist eine Funktion, die jedem Objekt in O seine Größe, also eine Zahl aus
Q+ zuordnet,
• b ist eine Zahl aus Q+ , die die Größe des zur Verfügung stehende Behälters
angibt, wobei b ≥ s(o) für alle o ∈ O gilt.
B
Seite 16
Kapitel 1 Motivation und Einordnung
Eine Teilmenge O0 ⊆ O ist eine zulässige Lösung für eine Instanz I = (O, s, b)
von MaxSubsetSum, wenn die Gesamtgröße der Objekte in O0 die vorgegebene
Größe
des zur Verfügung stehenden Behälters nicht überschreitet, d.h. es gilt
P
s(o)
≤ b. Die Güte einer zulässigen Lösung O0 für I entspricht dann der
0
o∈O
Gesamtgröße der Objekte in O0 .
Optimierungsproblem MaxSubsetSum
Eingabe: Instanz I = (O, s, b)
Ausgabe: zulässige Lösung O0 maximaler Güte für die Instanz I
E
Exkurs 1.2
Man kann das Optimierungsproblem auch alternativ wie folgt spezifizieren.
Gegeben ist eine Liste L = (a1 , . . . , an , b) von n + 1 Zahlen aus Q+ . Ziel
ist es, Zahlen aus der Teilliste (a1 , . . . , an ) auszuwählen, die aufsummiert
eine möglichst große Zahl b0 ≤ b ergeben. Diese Formulierung verdeutlicht,
weshalb dieses Optimierungsproblem den Namen MaxSubsetSum hat.
Im Folgenden bezeichnen wir wieder mit Opt(I) eine optimale Lösung für eine Instanz I von MaxSubsetSum und mit w(Opt(I)) deren Güte. Das Maximierungsproblem MaxSubsetSum ist ebenfalls ein NP-schweres Optimierungsprobleme (siehe
Kapitel 3). Man vermutet also wieder, dass es keinen effizienten Lösungsalgorithmus für dieses Optimierungsproblem gibt.
Für das Optimierungsproblem MaxSubsetSum gibt es einen sehr elementaren Approximationsalgorithmus Greedy, den wir im Folgenden vorstellen.
Algorithmus Greedy für MaxSubsetSum
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
Bestimme die bzgl. ihrer Größe absteigend sortierte Reihenfolge
o01 , . . . , o0n der Objekte in O;
k := 1;
O0 := {o01 };
b0 = s(o01 );
for i := 2 to n do
if b0 + s(o0i ) ≤ b then
O0 := O0 ∪ {o0i };
b0 := b0 + s(o0i );
fi
od
for j := 1 to k do
return O0
od
Der Approximationsalgorithmus Greedy benötigt O(n log(n)) + O(n) Rechenschritte, um für eine Instanz I = (O, s, b) mit |O| = n eine zulässige Lösung zu
bestimmen.
1.2 Fazit und Ergänzungen
Satz 1.5
Es sei I = (O, s, b) eine Instanz des Optimierungsproblems MaxSubsetSum
und O0 die vom Approximationsalgorithmus Greedy bestimmte Lösung und
k die Güte dieser Lösung. Dann gilt:
•
1
2
Seite 17
S
· w(Opt(I)) ≤ k.
Beweis. Sei O0 die vom Approximationsalgorithmus
P Greedy bestimmte Lösung
für die gegebene Instanz I = (O, s, b) und sei k = o∈O0 s(o).
Wir unterscheiden zwei Fälle:
Fall 1. O0 = O.
Dann ist O0 offenbar eine optimale Lösung. Also gilt k = Opt(I) und folglich gilt
auch 21 · w(Opt(I)) ≤ k.
Fall 2. O0 ⊂ O.
Sei o01 , . . . , o0n die vom Approximationsalgorithmus Greedy verwendete Anordnung der Objekte in O. Sei i ∈ {1, . . . , n} so gewählt, dass {o01 , . . . , o0i−1 } ⊆ O0
und o0i ∈
/ O0 gilt. (Wenn es ein solches i nicht gibt, kann nicht O0 ⊂ O gelten.)
Sei nun k 0 die Gesamtgröße der Objekte in der Menge {o01 , . . . , o0i−1 } ⊆ O0 , d.h.
Pi−1
0
k 0 :=
j=1 s(oj ). Da O eine zulässige Lösung für die Instanz I = (O, s, b) ist,
0
muss einerseits k ≤ b gelten. Wegen o0i ∈
/ O0 gilt andererseits b < k 0 + s(oi ). (An0
dernfalls hätte Greedy das Objekt oi eingepackt.) Da die Objekte aus O in der von
Greedy verwendeten Anordnung o01 , . . . , o0n bzgl. ihrer Größe absteigend sortiert
sind, muss außerdem s(oi ) ≤ k 0 gelten. Also gilt b < 2k 0 und, wegen k 0 ≤ k, auch
b < 2k. Da w(Opt(I)) ≤ b gelten muss, folgt sogar 21 · w(Opt(I)) < k.
Im Beweis von Satz 1.5 haben wir die oben diskutierte Vorgehensweise zur Analyse der Güte von Approximationsalgorithmen angepasst. Da MaxSubsetSum ein
Maximierungsproblem ist, sind wir an einer unteren Schranke für die Güte der
von Greedy bestimmten Lösungen interessiert. Da wir die optimale Lösung nicht
kennen, haben wir benutzt, dass die Größe b des verfügbaren Behälters eine obere Schranke für die Güte einer optimalen Lösung ist. Diese obere Schranke haben
wir im Anschluss verwendet, um die gesuchte untere Schranke zu beweisen.
Exkurs 1.3
Seien t1 , t2 zwei Terme. Um zu zeigen, dass t2 eine untere Schranke für t1 ist,
genügt es einen Term t zu finden, der sowohl eine obere Schranke für t2 als
auch eine untere Schranke für t1 ist. Offensichtlich folgt aus t2 ≤ t und t ≤ t1
sofort t2 ≤ t1 .
E
Seite 18
Kapitel 1 Motivation und Einordnung
Kapitel 2 Begriffe und Notationen
Seite 19
Kapitel 2 Begriffe und Notationen
In diesem Kapitel werden wir einige der bisher verwendeten Begriffe präzisieren. Im Mittelpunkt stehen die Begriffe effizienter Algorithmus, Optimierungsproblem und Approximationsalgorithmus.
2.1 Effiziente Algorithmen
Sei A irgendein Algorithmus, der zu jeder Eingabe x ∈ X eine Ausgabe y ∈ Y
berechnet. Um die Rechenzeit von A geeignet abschätzen zu können, setzen wir
voraus, dass
• die Eingaben und die Ausgaben geeignet kodiert sind und
• präzisiert ist, was ein Rechenschritt im zugrunde liegenden Berechnungsmodell ist.
Zu jedem x ∈ X und jedem y ∈ Y bezeichen wir mit |x| bzw. |y| die Größe von
x bzw. y, d.h. die Anzahl der Bits, die benötigt werden, um x bzw. y möglichst
platzsparend zu kodieren. Wir nennen A einen effizienten Algorithmus, wenn es
ein Polynom p gibt, das die Rechenzeit von A nach oben beschränkt, d.h. für alle Eingaben x ∈ X benötigt A maximal p(|x|) Rechenschritte, um die Eingabe x
zu verarbeiten und die zugehörige Ausgabe y zu berechnen. Man beachte, dass
daraus unmittelbar |y| ≤ p(|x|) folgt.
Exkurs 2.1
E
Die Festlegung, nur solche Algorithmen als effizient anzusehen, die polynomiell viele Rechenschritte benötigen, hat u.a. den Grund, dass solche Algorithmen in vertretbarer Rechenzeit vergleichsweise große Eingaben verarbeiten können. Algorithmen, die mindestens exponentiell viele Rechenschritte
benötigen, können das definitiv nicht.
In der folgenden Tabelle ist dargestellt, wie viel Rechenzeit unterschiedliche
Algorithmen benötigen, um ihre Eingaben zu verarbeiten. Dabei gehen wir
davon aus, dass der von uns verwendete Computer 109 Operationen pro Sekunde durchführen kann. Die in der ersten Spalte angegebenen Funktionen
beschreiben, wie viele Rechenschritte die betrachteten Lösungsalgorithmen
maximal benötigen, um eine Eingabe der Länge n zu verarbeiten.
benötigte
Rechenschritte
n1
n2
n3
n4
2n
benötigte Zeit für Eingaben der Länge
n = 10
n = 100
n = 1000
−8
−7
10 s
10 s
10−6 s
−7
−5
10 s
10 s
10−3 s
−6
−3
10
10 s
1s
10−5
10−1 s
103 s
≥ 10−7 s ≥ 1011 s
≥ 10189 s
Zieht man in Betracht, dass ein Tag ca. 105 Sekunden und ein Jahr ca. 108 Sekunden hat, sieht man sofort, dass der in der letzten Zeile betrachtete Algorithmus Jahrhunderte braucht, um Eingaben der Größe 100 zu verarbeiten.
Seite 20
Kapitel 2 Begriffe und Notationen
Im Rahmen unserer Untersuchungen verwenden wir an einigen Stellen die so genannte O-Notation, um zu beschreiben, wie viele Rechenschritte eine Algorithmus maximal benötigt, um seine Eingaben zu verarbeiten und ein Ergebnis zu
bestimmen. Wir sagen, dass ein Algorithmus O(g(n)) viele Rechenschritte benötigt, wenn es ein c > 0 gibt, so dass für jedes n ∈
gilt, dass der Algorithmus
maximal c · g(n) Rechenschritte benötigt, um zu einer Eingabe x ∈ X mit |x| = n
seine Ausgabe y ∈ Y zu bestimmen.
N
2.2 Optimierungsprobleme
Ein Optimierungsproblem ist gegeben durch:
• eine Menge von Instanzen I,
• eine Funktion f , die jeder Instanz I ∈ I die Menge der zulässigen Lösungen
f (I) zuordnet
• eine Gütefunktion w, die jeder zulässigen Lösung S einen Wert w(S) aus
Q+ zuordnet.
Handelt es sich bei einem Optimierungsproblem (I, f, w) um ein Minimierungsproblem, ist zu jeder Instanz I ∈ I eine Lösung S ∈ f (I) minimaler Güte zu
bestimmen. Bei einem Maximierungsproblem soll zu jeder Instanz I ∈ I eine Lösung S ∈ f (I) maximaler Güte bestimmt werden.
Sei nun (I, f, w) ein Optimierungsproblem. Für jede Instanz I und jede Lösung
S ∈ f (I) bezeichnen wir |I| bzw. |S| deren Größe, d.h. die Anzahl der Bits um die
Instanz I bzw. die Lösung S möglichst platzsparend zu kodieren.
B
Beispiel 2.1
Wir betrachten noch einmal das Minimierungsproblem MinBinPacking aus
Kapitel 1.
Um eine Instanz I = (O, s, b) von MinBinPacking mit |O| = n zu beschreiben,
genügt es anzugeben:
• wie viele Objekte zu O gehören,
• zu jedem o ∈ O seine Größe s(o) anzugeben,
• die Größe b der zur Verfügung stehenden Behälter anzugeben.
Also genügen |bin(n)|+(n+1)·|bin(b)| viele Bits um, die Instanz I = (O, s, b)
zu kodieren, wobei |bin(n)| und |bin(b)| angeben, wie viele Bits benötigt werden um die Zahlen n bzw. b binär zu kodieren.
Um eine zulässige Lösung B = (B1 , . . . , Bk ) für eine Instanz I = (O, s, b) zu
beschreiben, genügt es
• eine Liste der Länge n anzugeben, in der für jedes o ∈ O päzisiert ist,
in welchen der Behälter B1 , . . . Bk es eingepackt wurde.
Da in jeden Behälter mindestes ein Objekt aus O eingepackt wird, genügen
n · |bin(n)| viele Bits, um die Lösung B zu kodieren.
2.3 Approximationsalgorithmen
Seite 21
Ein Lösungsalgorithmus A für ein Optimierungsproblem (I, f, w) ist ein Algorithmus, der zu jeder Instanz I ∈ I eine zulässige Lösung S ∈ f (I) minimaler
bzw. maximaler Güte, also eine optimale Lösung bestimmt. Ein Lösungsalgorithmus A für (I, f, w) ist effizient, wenn es ein Polynom p gibt, so dass A zu jeder
Instanz I ∈ I in maximal p(|I|) Rechenschritten eine optimale Lösung S ∈ f (I)
bestimmt.
Wie schon erläutert, beschäftigen wir uns mit Optimierungsproblemen, für die es
höchstwahrscheinlich keine effizienten Lösungsalgorithmen gibt (siehe Kapitel 3).
Um sicher zu stellen, dass die Antwort auf die Frage, ob es überhaupt einen effizienten Lösungsalgorithmus gibt, nicht von vornherein mit ‘Nein’ zu beantworten
ist, gehen wir davon aus, dass für jedes betrachtete Optimierungsproblem (I, f, w)
gilt:
• es gibt ein Polynom q, so dass |S| ≤ q(|I|) für jede Instanz I ∈ I und jede
zulässige Lösung S ∈ f (I) gilt.
Es sei angemerkt, dass wir nur solche Optimierungsprobleme (I, f, w), für die
zusätzlich gilt:
• die Gütefunktion w lässt sich effizient berechnen, d.h. es gibt ein Polynom
q 0 und einen Algorithmus, mit dem man für eine zulässige Lösung S in
maximal q 0 (|S|) Rechenschritten deren Güte w(S) bestimmen kann.
Warum diese zweite Forderung von Relevanz ist, sehen wir bspw. in Kapitel 3.
Beispiel 2.2
Wir betrachten noch einmal das Minimierungsproblem MinBinPacking. Sei
I = (O, s, b) eine Instanz und B eine zulässige Lösung für I.
Aus den Überlegungen in Beispiel 2.1 folgt sofort dass |B| ≤ c · |I|2 gilt. Also
ist die Größe von B polynomiell in der Größe von I beschränkt.
Um die Güte w(B) der zulässigen Lösung B zu bestimmen, muss bestimmt
werden, wie viele verschiedene Zahlen in der Liste vorkommen, die die Lösung B beschreibt. Hierzu genügen ganz sicher O(|B|2 ) viele Rechenschritte.
2.3 Approximationsalgorithmen
Ein Approximationsalgorithmus A für ein Optimierungsproblem (I, f, w) ist nun
ein Algorithmus, der folgende Eigenschaften hat:
• A bestimmt zu jeder Instanz I ∈ I eine Lösung S ∈ f (I),
• A ist ein effizienter Algorithmus, d.h. es gibt ein Polynom p, so dass A maximal p(|I|) Rechenschritte benötigt, um zu einer Instanz I ∈ I eine Lösung
S ∈ f (I) zu bestimmen.
Darüber hinaus fordern wir, dass die Güte der von einem Approximationsalgorithmus bestimmten Lösungen noch zu präzisierende Qualitätskriterien zu erfüllen hat. Es gibt unterschiedliche Ansätze, solche Qualitätskriterien zu definieren.
B
Seite 22
Kapitel 2 Begriffe und Notationen
Im Rahmen unserer Untersuchungen diskutieren wir das Qualitätskriterium relative Approximationsgüte.1
Sei (I, f, w) ein Optimierungsproblem und A ein Approximationsalgorithmus für
(I, f, w). Dann bezeichnen wir für jede Instanz I ∈ I mit A(I) die von A bestimmte
zulässige Lösung und mit Opt(I) eine optimale Lösung für I. Die Approximationsgüte δA (I) von A für I ist wie folgt definiert:
δA (I) :=
w(A(I))
.
w(Opt(I))
Es sei angemerkt, dass δA (I) ≤ 1 sein muss, wenn (I, f, w) ein Maximierungsproblem ist. Falls (I, f, w) ein Minimierungsproblem ist, muss natürlich δA (I) ≥ 1
gelten.
Q
Sei nun δ eine Funktion, die jeder Instanz I ∈ I eine Zahl δ(I) ∈ + zuordnet. Die
Funktion δ beschreibt die Approximationsgüte des Approximationsalgorithmus
A, falls für jede Instanz I ∈ I gilt:
• δ(I) ≤ δA (I), wenn (I, f, w) ein Maximierungsproblem ist,
• δ(I) ≥ δA (I), wenn (I, f, w) ein Minimierungsproblem ist.
Einen Approximationsalgorithmus, dessen Approximationsgüte durch eine Funktion δ beschränkt ist, nennen wir Approximationsalgorithmus mit multiplikativer
Güte.
B
Beispiel 2.3
Wir betrachten das Maximierungsproblem MaxSubsetSum aus Kapitel 1.
Satz 1.5 belegt, dass 12 · w(Opt(I)) ≤ w(A(I)) für alle Instanzen I von MaxSubsetSum gilt, wobei A(I) die vom Approximationsalgorithmus Greedy
bestimmten Lösung bezeichnet. Also gilt δA (I) ≤ 12 für alle Instanzen I und
folglich beschreibt die Funktion δ mit δ(I) := 21 für alle I die (relative) Approximationsgüte von Greedy.
Wir betrachten das Minimierungsproblem MinBinPacking. Satz 1.4 zeigt,
dass w(A(I)) ≤ 23 · w(Opt(I)) + 1 für alle Instanzen I von MinBinPacking
gilt, wobei A(I) jetzt die vom Approximationsalgorithmus FirstFitDecrea1
≤ 32 + Gb
sing bestimmten Lösung bezeichnet. Damit gilt δA (I) ≤ 32 + w(Opt(I))
für alle Instanzen I. (Man beachte, dass Gb ≤ w(Opt(I)) gilt, wobei G die Gesamtgröße der Objekte in der betrachteten Instanz I = (O, s, b) bezeichnet.)
Also beschreibt die Funktion δ mit δ(I) := 32 + Gb für alle I die Approximationsgüte von FirstFitDecreasing.
Wie das Beispiel zeigt, kann man mitunter konstante Funktionen δ benutzen,
um die Approximationsgüte eines Approximationsalgorithmus A zu beschreiben.
Wenn das möglich ist, so nennen wir A einen Approximationsalgorithmus konstanter mutiplikativer Güte (kurz: konstanter Güte). Der einzige Funktionswert
von δ (den wir auch mit δ bezeichnen) wird dann Approximationsfaktor von A
genannt.
1 Da wir keine anderen Qualitätskriterien, wie etwa das Kriterium absolute Approximationsgüte, dis-
kutieren, verzichten wir im Weiteren darauf darauf, dass Adjektiv relativ zu verwenden.
2.3 Approximationsalgorithmen
Beispiel 2.4
Greedy ist ein Approximationsalgorithmus konstanter Güte für MaxSubsetSum mit dem Approximationsfaktor 12 (siehe Satz 1.5), während NextFit
ein Approximationsalgorithmus konstanter Güte für MinBinPacking ist, der
den Approximationsfaktor 2 hat (siehe Satz 1.1).
Seite 23
B
Seite 24
Kapitel 2 Begriffe und Notationen
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Seite 25
Kapitel 3 Grundlagen aus der Komplexitätstheorie
In diesem Kapitel werden wir uns mit der Frage beschäftigen, weshalb man davon ausgeht, dass es für bestimmte Optimierungsprobleme höchstwahrscheinlich
keinen effizienten Lösungsalgorithmus gibt. Zur Beantwortung dieser Frage benötigen wir einige Begriffe und Ergebnisse aus der Komplexitätstheorie.
3.1 Die Komplexitätsklassen P und NP
Ein wesentliches Ziel in der Komplexitätstheorie ist es, algorithmische Probleme
in Bezug auf die Rechenzeit, die die schnellsten Algorithmen zur Lösung dieser
Probleme benötigen, zu klassifizieren. Um die zentralen Begriffsbildungen möglichst einfach zu halten, befasst man sich nur mit einem ganz bestimmten Typ von
algorithmischen Problemen, mit so genannten Entscheidungsproblemen.
Ein Entscheidungsproblem Π ist gegeben durch:
• eine Menge I von Instanzen und
• eine Menge YI von sogenannten ‘Ja’-Instanzen, d.h. eine Teilmenge von I
die diejenigen Instanzen enthält, die eine interessierende Eigenschaft haben.
Bei einem Entscheidungsproblem Π = (I, YI ) geht es darum, die Frage zu beantworten, ob eine gegebene Instanz I ∈ I eine ‘Ja’-Instanz ist.
Beispiel 3.1
Wir betrachten das Entscheidungsproblem CompositeNumber. Hierbei geht
es um die Frage, ob sich eine gegebene natürliche Zahl als Produkt zweier natürlicher Zahlen ungleich 1 darstellen lässt. Eine Zahl mit dieser Eigenschaft
nennt man zusammengesetzte Zahl.
Formal ist die Menge I der Instanzen dieses Entscheidungsproblems die
Menge der natürlichen Zahlen. Die Menge YI der ‘Ja’-Instanzen enthält alle
zusammengesetzten Zahlen.
Sei Π = (I, YI ) ein Entscheidungsproblem. Ein Algorithmus A, der zu jeder Instanz I ∈ I als Ausgabe entweder das Ergebnis ‘true’ oder ’false’ bestimmt, ist
ein effizienter Lösungsalgorithmus für Π, wenn es ein Polynom p gibt, so dass
gilt:
• A benötigt maximal p(|I|) Rechenschritte, um für eine Instanz I ∈ I seine
Ausgabe zu bestimmen.
• Wenn I ∈ YI gilt, so berechnet A bei Eingabe von I die Ausgabe ‘true’.
• Wenn I ∈
/ YI gilt, so berechnet A bei Eingabe von I die Ausgabe ’false’.
Man beachte, dass |I| wie gehabt die Größe der Instanz I bezeichnet, d.h. die Anzahl an Bits, die benötigt werden, um die Instanz I möglichst platzsparend zu
kodieren.
B
Seite 26
D
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Definition 3.1
Ein Entscheidungsproblem Π gehört genau dann zur Komplexitätsklasse P,
wenn es einen effizienten Lösungsalgorithmus für Π gibt.
Neben der Komplexitätsklasse P ist die Komplexitätsklasse NP für die folgenden
Betrachtungen wesentlich. Bei der Definition von NP spielt der Begriff effizienter
Verifikationsalgorithmus die selbe Rolle wie der Begriff effizienter Lösungsalgorithmus bei der Definition von P.
Ein Verifikationsalgorithmus für ein Entscheidungsproblem Π = (I, YI ) erhält neben einer Instanz I ∈ I einen Binärstring w als Eingabe, in dem bestimmte Zusatzinformationen kodiert sind. Im Unterschied zu einem Lösungsalgorithmus soll
ein Verifikationsalgorithmus nur die Frage beantworten, ob die im Binärstring w
kodierte Information belegt, dass I eine ‘Ja’-Instanz ist. Einen Binärstring mit dieser Eigenschaft nennt man einen Zeugen bzw. Beweis dafür, dass I ein ’Ja’-Instanz
ist.
Die Anforderungen an einen Verifikationsalgorithmus sind also schwächer als die
an einen Lösungsalgorithmus.
B
Beispiel 3.2
Wir betrachten noch einmal das Entscheidungsproblem CompositeNumber.
Sei w ein Binärstring. Um die Frage zu beantworten, ob die in w kodierte
Information belegt, dass eine gegeben natürliche Zahl n eine ’Ja’-Instanz ist,
genügt es wie folgt vorzugehen.
Algorithmus Verifikationsalgorithmus V für CompositeNumber
Eingabe: n ∈ und Binärstring w
1
Interpretiere w als Binärstring, der ein Paar (a, b) von natürlichen
Zahlen kodiert und bestimme a und b;
2
if (a = 1) ||(b = 1) then
3
return 0 false0 ;
4
else
5
if n = a · b then
6
return 0 true0 ;
7
else
8
return 0 false0 ;
9
fi
10
fi
N
Sei Π = (I, YI ) ein Entscheidungsproblem. Ein Algorithmus V , der zu jeder Instanz I ∈ I und jedem Binärstring w als Ausgabe entweder das Ergebnis ’true’
oder ’false’ bestimmt, ist ein effizienter Verifikationsalgorithmus für Π, falls es
ein Polynom p gibt, so dass gilt:
• V benötigt maximal p(|I|) Rechenschritte, um für eine Instanz I ∈ I und
einen Binärstring w seine Ausgabe zu bestimmen.
• Wenn I ∈ YI gilt, so gibt es einen Binärstring w, so dass V bei Eingabe von
I und w die Ausgabe ’true’ berechnet.
3.1 Die Komplexitätsklassen P und NP
Seite 27
• Wenn I ∈
/ YI gilt, so gilt für alle Binärstrings w, dass V bei Eingabe von I
und w die Ausgabe ’false’ berechnet.
Man beachte, dass gefordet ist, dass die Rechenzeit von V polynomiell in der Größe der zu verarbeitenden Instanz I beschränkt ist. Also kann V in der zur Verfügung stehenden Zeit nur Binärstrings w verarbeiten, für die |w| ≤ p(|I|) gilt.
Beispiel 3.3
Ob der in Beispiel 3.2 vorgestellte Verifikationsalgorithmus V effizient arbeitet, hängt wesentlich davon ab, wie man die Anweisung in Zeile 1 realisiert.
Man erhält einen effizienten Verifikationsalgorithmus, wenn man wie folgt
vorgeht.
B
• Man testet zunächst, ob w kurz genug ist, um ein Paar (a, b) von natürlichen Zahlen mit a, b < n zu kodieren.
• Ist das der Fall, wird mit der Anweisung in Zeile 2 fortgesetzt. Andernfalls wird ‘false’ ausgegeben, da garantiert n 6= a · b gilt.
Da man in O(|bin(n)|3 ) Rechenschritten überprüfen kann, ob n = a · b für
zwei natürliche Zahlen a, b gilt, weiß man, dass polynomiell viele Rechenschritte genügen, um die Anweisung in Zeile 5 auszuführen. Wenn man in
Betracht zieht, dass man das Paar (a, b) mit Hilfe eines Binärstrings der Länge 2 · (|bin(a)| + |bin(b)| + 1) kodieren kann, kann man sich überlegen, dass
auch polynomiell viele Rechenschritte genügen, um die Anweisungen in der
modifizierten Zeile 1 (siehe oben) auszuführen.
Anmerkung: Das Paar (a, b) mit a = 5 und b = 4 kann man nun wie folgt
mit Hilfe des Binärstrings w = 11 10 11 00 11 10 10 kodieren, wobei der
Teilstring 00 als Trennsymbol interpretiert wird und die Teilstrings 10 und
11 kodieren, dass in der Binärdarstellung von a bzw. b (also 101 bzw. 100) an
der enstprechenden Stelle eine 0 bzw. eine 1 vorkommt.
Wir kommen jetzt zur Defintion der Komplexitätsklasse NP.
Definition 3.2
Ein Enscheidungsproblem Π gehört genau dann zur Komplexitätsklasse NP,
wenn es einen effizienten Verfikationsalgorithmus für Π gibt.
Man beachte, dass Entscheidungsprobleme Π = (I, YI ) aus NP die Eigenschaft
haben, dass es “kurze” Zeugen bzw. Beweise dafür gibt, dass eine gegebene Instanz I eine ’Ja’-Instanz ist. (Kurz bedeutet hierbei, dass die Länge von w polynomiell in der Größe von I beschränkt ist.) Daraus folgt sofort, dass es für jedes
Entscheidungsproblem Π in NP einen Lösungsalgorithmus mit exponentieller
Laufzeit gibt.
D
Seite 28
E
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Exkurs 3.1
Sei Π = (I, YI ) ein Entscheidungsproblem aus NP, V ein effizienter Verfikationsalgorithmus für Π sowie p ein Polynom, das die Rechenzeit von V
beschränkt.
Um die Frage zu beantworten, ob eine gegebene Instanz I ∈ I eine ’Ja’Instanz ist, kann man wie folgt vorgehen:
Algorithmus Lösungsgorithmus für Π
Eingabe: Instanz I
1
Erzeuge eine Liste L = (w1 , . . . , wm ) aller Binärstrings w mit
|w| ≤ p(|I|);
2
i := 1;
3
y := 0 false0 ;
4
while (i ≤ m) || (y = 0 false0 ) do
5
y := V (I, w);
6
i := i + 1;
7
od
8
return y;
Offenbar benötigt dieser Lösungsalgorithmus für Π maximal O(2p(|I|) ·p(|I|))
Rechenschritte, um zu entscheiden, ob I eine ‘Ja’-Instanz ist.
3.2 NP-vollständige Entscheidungsprobleme
Aus den Definitionen der beiden Komplexitätsklassen P und NP folgt offensichtlich, dass jedes Entscheidungsproblem aus P auch zu NP gehört, d.h. es gilt
P ⊆ NP.
E
Exkurs 3.2
Sei Π = (I, YI ) ein Entscheidungsproblem aus P und A ein effizienter Lösungsalgorithmus für Π. Ein effizienter Verifikationsalgorithmus V für Π arbeitet wie folgt.
Algorithmus Verifikationsalgorithmus für Π
Eingabe: Instanz I und Binärstring w
1
y := A(i);
2
if y = 0 true0 then
3
return 0 true0 ;
4
else
5
return 0 false0 ;
6
fi
Beim P = NP–Problem geht es um die Frage, ob die Komplexitätsklassen P und
NP zusammenfallen, d.h. ob P = NP gilt. Da P ⊆ NP gilt, geht es also im Kern
um die Frage, ob jedes Entscheidungsproblem aus NP auch zu P gehört, also
NP ⊆ P gilt. Man vermutet, dass es Entscheidungsprobleme gibt, für die es einen
3.2 NP-vollständige Entscheidungsprobleme
Seite 29
effizienten Verifikationsalgorithmus, aber keinen effizienten Lösungsalgorithmus
gibt, und folglich P 6= NP.
Ein Indiz dafür, dass höchstwahrscheinlich P 6= NP gilt, ist die folgende Erfahrung, die Studierende und Dozenten gleichermaßen teilen:
In der Regel ist es komplizierter, einen Beweis für eine interessierende
Aussage zu finden, als zu verifizieren, ob ein vorgeschlagener Beweis
für diese Aussage korrekt ist.
Exkurs 3.3
Man beachte, dass derjenige, der einen Verifikationsalgorithmus V für ein
Entscheidungsproblem Π = (I, YI ) kennt, verifizieren kann, ob ein vorgeschlagener Beweis für die Aussage “I ist eine ‘Ja’-Instanz” korrekt ist. Derjenige, der einen Lösungsalgorithmus A für Π kennt, kann A benutzen, um für
jedes I ∈ YI die Aussage “I ist eine ‘Ja’-Instanz” zu beweisen, d.h. er kennt
einen Beweis für diese Aussage.
E
Ein weiteres Indiz dafür, dass höchstwahrscheinlich P 6= NP gilt, hat mit dem
Begriff NP-vollständiges Entscheidungsproblem zu tun, den wir im Folgenden
untersuchen werden. NP-vollständige Entscheidungsprobleme sind anschaulich
gesprochen die kompliziertesten Probleme in der Komplexitätsklasse NP. Wenn
man einen effizienten Lösungsalgorithmus für ein NP-vollständiges Problem Π
kennt, so kann man auch für jedes andere Entscheidungsproblem in NP einen
effizienten Lösungsalgorithmus angeben.
Aktuell ist für mehr als zweitausend NP-vollständige Entscheidungsprobleme
nachgewiesen, dass sie NP-vollständig sind. Trotz intensiver Versuche ist es bisher nicht gelungen, auch nur für eines davon einen effizienten Lösungsalgorithmus zu finden. Deshalb geht man davon aus, dass es höchstwahrscheinlich für
kein einziges NP-vollständiges Entscheidungsproblem einen effizienten Lösungsalgorithmus gibt, und vermutet, dass P 6= NP gilt.
Um den zentralen Begriff NP-vollständiges Entscheidungsproblem präzise fassen
zu können, benötigen wir den folgenden Hilfsbegriff.
Definition 3.3
Seien Π1 = (I1 , YI1 ) und Π2 = (I2 , YI2 ) Entscheidungsprobleme. Ein Algorithmus R, der zu jeder Instanz I1 ∈ I1 eine Instanz I2 ∈ I2 bestimmt,
reduziert Π1 auf Π2 , wenn es ein Polynom q gibt, so dass gilt:
• R benötigt maximal q(|I1 |) Rechenschritte, um bei Eingabe von I1 seine Ausgabe zu bestimmen.
• Wenn I1 ∈ YI1 gilt, so berechnet R bei Eingabe von I1 als Ausgabe
eine Instanz I2 ∈ YI2 .
• Wenn I1 ∈
/ YI1 gilt, so berechnet R bei Eingabe von I1 als Ausgabe
eine Instanz I2 ∈
/ YI2 .
Wenn es einen Algorithmus gibt, der Π1 auf Π2 reduziert, so sagen, wir dass
Π1 polynomiell auf Π2 reduzierbar ist, und schreiben dafür Π1 ≤poly Π2 .
D
Seite 30
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Man beachte, dass die gerade definierte Relation ≤poly transitiv ist, d.h. für alle
Entscheidungsprobleme Π1 , Π2 , Π3 gilt, dass aus Π1 ≤poly Π2 und Π2 ≤poly Π3
sofort Π1 ≤poly Π3 folgt.
B
Beispiel 3.4
Eine Instanz I = (O, s) des Entscheidungsproblems Partition ist gegeben
durch:
• eine endliche Menge O von Objekten,
• eine Funktion s, die jedem Objekt o aus O seine Größe, also eine Zahl
aus Q+ zuordnet.
I = (O, s) ist eine ‘Ja’-Instanz dieses Entscheidungsproblems,
falls
P
Psich O in
zwei Teilmengen O1 und O2 zerlegen lässt, so dass o∈O1 s(o) = o∈O2 s(o)
gilt.
Eine Instanz I = (O, s, b) des Entscheidungsproblems SubsetSum ist gegeben
durch:
• eine endliche Menge O von Objekten,
• eine Funktion s, die jedem Objekt o aus O seine Größe, also eine Zahl
aus Q+ zuordnet,
• eine Zahl b aus Q+ , wobei s(o) ≤ b für alle o ∈ O gilt.
I = (O, s, b) ist eine ‘Ja’-Instanz dieses Entscheidungsproblems,
P falls es eine
Teilmenge O0 von O mit der Gesamtgröße b gibt, d.h. für die o∈O0 s(o) = b
gilt.
Wir argumentieren jetzt, dass Partition ≤poly SubsetSum gilt.
P
Sei I1 = (O, s) eine Instanz von Partition und G := o∈O s(o). Wir ordnen
nun I1 die Instanz I2 = (O, s, G
2 ) von SubsetSum zu. Offensichtlich kann man
die I1 zugeordnete Instanz I2 effizient anhand von I1 bestimmen. Genauso
offensichtlich ist, dass I1 genau dann eine ‘Ja’-Instanz von Partition ist, wenn
die I1 zugeordnete Instanz I2 eine ‘Ja’-Instanz von SubsetSum ist.
Offenbar gilt:
S
Satz 3.1
Seien Π1 und Π2 Entscheidungsprobleme mit Π1 ≤poly Π2 . Dann gilt:
• Wenn es einen effizienten Lösungsalgorithmus für Π2 gibt, so gibt es
auch einen effizienten Lösungsalgorithmus für Π1 , d.h. aus Π2 ∈ P
folgt Π1 ∈ P.
Beweis. Seien Π1 = (I1 , YI1 ) und Π2 = (I2 , YI2 ) die betrachteten Entscheidungsprobleme. Ferner sei R ein Algorithmus, der Π1 auf Π2 reduziert, und A2 ein effizienter Lösungalgorithmus für Π2 . Weiterhin seien a, b ∈ so gewählt, dass die
N
3.2 NP-vollständige Entscheidungsprobleme
Seite 31
beiden Polynome q = xa und p = xb die Rechenzeit der Algorithmen R und A2
beschränken.
Um die Frage zu beantworten, ob eine Instanz I1 ∈ I1 eine ‘Ja’-Instanz für Π1 ist,
genügt es, wie folgt vorzugehen:
Algorithmus Lösungsgorithmus A1 für Π1
Eingabe: Instanz I1
1
2
3
4
5
6
7
I2 := R(I1 );
y := A2 (I2 );
if y = 0 true0 then
return 0 true0 ;
else
return 0 false0 ;
fi
Es ist klar, dass |I2 | ≤ |I1 |a . Also benötigt A1 nur O(|I1 |a + |I1 |a·b ) Rechenschritte,
um die Frage zu beantworten, ob I1 eine ’Ja’-Instanz von Π1 ist. Folglich ist A1 ein
effizienter Lösungsalgorithmus für Π1 .
Der Begriff NP-vollständiges Entscheidungsproblem ist nun wie folgt definiert:
Definition 3.4
Ein Entscheidungsproblem Π = (I, YI ) ist NP-vollständig, wenn gilt:
D
• Π gehört zu NP,
• Jedes Entscheidungsproblem Π1 aus NP ist polynomiell auf das Entscheidungsproblem Π reduzierbar.
Völlig analog zum Beweis von Satz 3.1 kann man zeigen, dass NP-vollständige
Entscheidungsprobleme die folgende Eigenschaft haben:
Satz 3.2
Sei Π ein NP-vollständiges Entscheidungsproblem. Dann gilt:
• Wenn es einen effizienten Lösungsalgorithmus für das Entscheidungsproblem Π gibt, so gibt es für jedes andere Entscheidungsproblem Π1
in NP ebenfalls einen effizienten Lösungsalgorithmus, d.h. aus Π ∈ P
folgt Π1 ∈ P für alle Π1 ∈ NP.
Satz 3.2 belegt, dass die NP-vollständigen Entscheidungsprobleme die schwierigsten Probleme in NP sind. Ist ein NP-vollständiges Entscheidungsproblem
effizient lösbar, so sind alle Entscheidungsproblem aus NP effizient lösbar. Also würden die Komplexitätsklassen P und NP zusammenfallen, d.h. es würde
P = NP gelten.
S
Seite 32
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Wie oben erläutert, vermutet man, dass P 6= NP gilt. Deshalb geht man davon
aus, dass es für kein NP-vollständiges Entscheidungsproblem einen effizienten
Lösungsalgorithmus gibt.
E
Exkurs 3.4
Aussagenlogische Formeln bestehen aus aussagenlogischen Variablen
x1 , x2 , . . . und den logischen Operatoren ∧, ∨, ¬. Ein Literal ist eine Variablen xi oder eine negierte Variable ¬xi . Seien y1 , . . . , yk Literale. Dann
nennt man die Formel (y1 ∨ · · · ∨ yk ) Klausel. Falls c1 , . . . , cm Klauseln sind,
so ist die Formel c1 ∧ · · · ∧ cm eine Formel in konjunktiver Normalform. Wir
sagen, dass eine Formel α erfüllbar ist, wenn es eine Belegung der Variablen
in α mit den Wahrheitswerten true und false gibt, so dass α unter dieser
Belegung den Wahrheitswert true zugeordnet bekommt. Ist α eine Formel,
in den nur die Variablen x1 , . . . , xn vorkommen, so ist eine Belegung nichts
anderes als eine Abbildung
µ : {x1 , . . . , xn } −→ {wahr, falsch}.
Man beachte dass eine Belegung µ genau dann eine Formel α = c1 ∧ · · · ∧ cm
in konjunktiver Normalform erfüllt, wenn µ jede Klausel ci von α erfüllt.
Das Erfüllbarkeitsproblem für aussagenlogische Formeln in konjunktiver Normalform (kurz: das Entscheidungsproblem SAT) war historisch das erste Problem, für
welches man nachweisen konnte, dass es NP-vollständig ist. Da ein entsprechender Nachweis relativ aufwändig ist, verzichten wir darauf, ihn anzugeben, und
verweisen stattdessen auf eines der vielen Standardlehrbücher der Komplexitätstheorie.
S
Satz 3.3
Das Entscheidungsproblem SAT ist NP-vollständig.
Die Erkenntnis, dass es überhaupt ein NP-vollständiges Entscheidungsproblem
gibt, ist von grundlegender Bedeutung. Da die Relation ≤poly transitiv ist, kann
man nun wie folgt nachweisen, dass ein Entscheidungsproblem Π2 ebenfalls NPvollständig ist:
(1) Man zeigt, dass Π2 zur Komplexitätsklasse NP gehört.
(2) Man zeigt, dass sich ein Entscheidungsproblem Π, das bekanntermaßen
NP-vollständig ist, polynomiell auf Π2 reduzieren lässt.
Man beachte, dass es im Prinzip vollkommen egal ist, welches NP-vollständige
Entscheidungsproblem Π man in (2) auswählt. Wenn Π2 wirklich NP-vollständig
ist, so kann man jedes andere NP-vollständige Entscheidungsproblem Π (also insbesondere auch das Entscheidungsproblem SAT) polynomiell auf Π2 reduzieren.
In vielen Fällen ist jedoch konzeptionell einfacher, ein anderes NP-vollständiges
Entscheidungsproblem auszuwählen.
Um dieses Vorgehen zu illustrieren, werden wir nun für die beiden in Beispiel 3.4
vorgestellten Entscheidungsprobleme zeigen, dass sie NP-vollständig sind. Zuvor betrachten wir noch die folgende Version des Entscheidungsproblem SAT.
3.2 NP-vollständige Entscheidungsprobleme
Seite 33
Gegenstand des Entscheidungsproblem 3SAT sind aussagenlogische Formel α0 in
konjunktiver Normalform, die die Eigenschaft haben, dass jede Klausel von α0
genau drei paarweise verschiedene Literale enthält. Eine solche Formel α0 nennt
man auch aussagenlogische Formel in 3-konjunktiver Normalform. α0 ist genau
dann eine ’Ja’-Instanz von 3SAT, wenn α erfüllbar ist.
Da man zu jeder aussagenlogischen Formel α in konjunktiver Normalform effizient eine erfüllbarkeitsäquivalente aussagenlogische Formel α0 in 3-konjunktiver
Normalform konstruieren kann, gilt:
Satz 3.4
Das Entscheidungsproblem 3SAT ist NP-vollständig.
S
Wir verzichten auf einen fomalen Beweis und illustrieren die zugrunde liegende
Idee an einem Beispiel.
Beispiel 3.5
Sei α = (x1 ∨ ¬x4 ) ∧ (x1 ∨ ¬x2 ∨ ¬x3 ∨ x4 ∨ ¬x5 ) die gegebene Instanz von
SAT. Zu jeder der beiden Klauseln c1 und c2 von α konstruieren wir erfüllbarkeitsäquivalente aussagenlogische Formeln α10 bzw. α20 in 3-konjunktiver
Normalform. Offenbar ist dann α0 := α10 ∧ α20 eine Instanz von 3SAT, die
genau dann erfüllbar ist, wenn α erfüllbar ist.
B
Die zu c1 = (x1 ∨ ¬x4 ) bzw. c2 = (x1 ∨ ¬x2 ∨ ¬x3 ∨ x4 ∨ ¬x5 ) konstruierten
erfüllbarkeitsäquivalenten Formeln sind die folgenden:
• α10 := (x1 ∨ ¬x4 ∨ z1 ) ∧ (x1 ∨ ¬x4 ∨ ¬z1 ),
• α20 := (x1 ∨ ¬x2 ∨ z2 ) ∧ (¬z2 ∨ ¬x3 ∨ z3 ) ∧ (¬z3 ∨ x4 ∨ ¬x5 ).
Um zu verifizieren, dass bspw. c2 und α20 erfüllbarkeitsäquivalent sind, argumentiert man wie folgt:
Sei µ eine Belegung der Variablen x1 , . . . , x5 , die die Klausel c2 erfüllt. Sei
bspw. µ(x3 ) = false. Dann kann man einfach nachrechnen, dass die Belegung µ0 mit µ0 (xi ) := µ(xi ) für alle i mit 1 ≤ i ≤ 5 sowie µ0 (z2 ) := true und
µ0 (z3 ) := false die Formel α20 erfüllt.
Sei nun umgekehrt µ0 eine Belegung der Variablen x1 , . . . , x5 , z2 , z3 , die die
Formel α20 erfüllt. Dann kann relativ einfach sehen, dass die Belegung µ mit
µ(xi ) := µ0 (xi ) für alle i mit 1 ≤ i ≤ 5 die Klausel c2 erfüllt.
Wir benutzen Satz 3.4, um nachzuweisen, dass die Entscheidungsprobleme SubsetSum und Partition ebenfalls NP-vollständig sind.
Satz 3.5
Das Entscheidungsproblem SubsetSum ist NP-vollständig.
S
Seite 34
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Beweis. Sei I = (O, s, b) eine Instanz von SubsetSum und O0 eine Teilmenge von O.
Um herauszubekommen, ob O0 belegt, dass I eine ’Ja’-Instanz von SubsetSum ist,
genügt es, die Gesantgröße G von O0 zu bestimmen und zu überprüfen, ob G = b
gilt. Folglich gibt es einen effizienten Verifikationsalgorithmus für SubsetSum, und
damit gehört SubsetSum zu NP.
Wir zeigen nun, dass 3Sat ≤poly SubsetSum gilt. Sei dazu α eine Instanz von 3Sat,
die wir in der Form schreiben können:
α = (a1,1 ∨ a1,2 ∨ a1,3 ) ∧ · · · ∧ (ak,1 ∨ ak,2 ∨ ak,3 )
N
mit ai,j ∈ {x1 , . . . , xn } ∪ {¬x1 , . . . , ¬xn } für alle i, j ∈ mit i ≤ k und j ≤ 3. Im
Folgenden nennen wir ci = ai,1 ∨ ai,2 ∨ ai,3 die i-te Klausel von α.1
Wir ordnen der gegebenen Formel α mit den Klauseln c1 , . . . , ck über der Variablenmenge X = {x1 , . . . , xn } die folgende Instanz I = (O, s, b) von SubsetSum
zu.
Die Menge O enthält die Zahlen p1 , . . . , pk und p01 , . . . , p0k sowie die Zahlen
v1 , . . . , vn und v10 , . . . , vn0 .
Die Funktion s ordnet jedem Objekt o ∈ O seine Größe, und zwar eine natürliche
Zahl s(o) mit k + n Dezimalstellen zu. Für jedes i ∈ mit i ≤ k ist
N
· · 0} .
• s(pi ) := 0i−1 10n−i , d.h. s(pi ) = 0| ·{z
· · 0} 1 0| ·{z
(i−1) mal
•
s(p0i )
i−1
=0
20
n−i
, d.h.
s(p0i )
= 0| ·{z
· · 0} 2 0| ·{z
· · 0} .
(i−1) mal
Für jedes z ∈
(n−i) mal
(n−i) mal
N mit z ≤ n ist
• s(vz ) := bz,1 · · · bz,k 0z−1 10n−z , d.h. s(vi ) = bz,1 · · · bz,k 0| ·{z
· · 0} 1 0| ·{z
· · 0} ,
(z−1) mal
•
s(vz0 )
:=
b0z,1
· · · b0z,k 0z−1 10n−z ,
d.h.
s(vi0 )
= bz,1 · · · bz,k 0| ·{z
· · 0} 1 0| ·{z
· · 0} ,
(z−1) mal
wobei für alle i ∈
(n−z) mal
(n−z) mal
N mit i ≤ k gilt:
• bz,i := 1, falls in der Klausel ci das Literal xz vorkommt,
• bz,i := 0, falls in der Klausel ci das Literal xz nicht vorkommt,
• b0z,i := 1, falls in der Klausel ci das Literal ¬xz vorkommt.
• b0z,i := 0, falls in der Klausel ci das Literal ¬xz nicht vorkommt.
Die Zahl b ist ebenfalls eine natürliche Zahl mit k + n Dezimalstellen, und zwar
b := 4k 1n , d.h. b = |4 ·{z
· · 4} 1| ·{z
· · 1}.
k mal n mal
B
Beispiel 3.6
Sei α = (x1 ∨¬x2 ∨¬x3 )∧(¬x1 ∨¬x2 ∨x3 ). Dann wird α die folgende Instanz
I = (O, s, b) von SubsetSum zugeordnet, wobei gilt:
1 Mit
N bezeichnen wir die natürlichen Zahlen ohne Null, also die Menge N = {1, 2, . . . .}.
3.2 NP-vollständige Entscheidungsprobleme
Seite 35
• O = {p1 , p01 , p2 , p02 , v1 , v10 , v2 , v20 , v3 , v30 },
• s(p1 ) = 10000 und s(p01 ) = 01000,
• s(p2 ) = 20000 und s(p02 ) = 02000,
• s(v1 ) = 10100 und s(v10 ) = 01100,
• s(v2 ) = 00010 und s(v20 ) = 11010,
• s(v3 ) = 01001 und s(v30 ) = 10001,
• b = 44000.
Die Belegung µ mit µ(x1 ) = µ(x2 ) = µ(x3 ) = true erfüllt die Formel α.
00
0
Man
P beachte, dass man O = {v1 , v2 , v3 } zu einer Teilmenge O ⊆ O mit
o∈O 0 s(o) = b erweitern kann.
Die Belegung µ mit µ(x1 ) = µ(x2 ) = true und µ(x3 ) = false erfüllt die
00
0
Formel α nicht. Man
Pbeachte, dass man O = {v1 , v2 , v3 } nicht zu einer Teil0
menge O ⊆ O mit o∈O0 s(o) = b erweitern kann.
Es sollte wieder klar sein, dass man anhand von α die zugehörige Instanz von
SubsetSum effizient bestimmen kann.
Wir zeigen nun, dass die folgenden Aussagen äquivalent sind:
(1) α ist eine ’Ja’-Instanz von 3Sat, d.h. es gibt eine erfüllende Belegung µ für α.
(2) I ist eine ’Ja’-Instanz von SubsetSum,Pd.h. es gibt eine Teilmenge O0 von O
mit der Gesamtgröße b, also gilt b = o∈O0 s(o).
((1) =⇒ (2)) Sei µ eine erfüllende Belegung für α.
N
Wir wählen jetzt für jedes z ∈
mit z ≤ n die Zahl vz aus, wenn µ(xz ) = wahr
gilt, und die Zahl vz0 , wenn µ(xz ) = falsch gilt.
Da µ wohldefiniert ist, summiert sich die Größe dieser n Objekte zu einer Zahl b0
der Form b0 = r1 · · · rk 1n auf, d.h. b0 = r1 · · · rk 1
· · 1}. Da α eine Instanz von 3Sat
| ·{z
ist, muss ri ≤ 3 für alle i ∈
N mit i ≤ k gelten.
n mal
Da µ eine erfüllende Belegung für α ist, muss µ auch jede Klausel ci von α erfüllen,
d.h. in jeder Klausel ci gibt es ein Literal ai,j mit µ(ai,j ) = wahr. Daraus folgt nun
sofort, dass ri ≥ 1 für alle i ∈ mit i ≤ k gilt (wenn ai,j = xz gilt, wurde die Zahl
vz in die Teilmenge M aufgenommen; wenn ai,j = ¬xz gilt, die Zahl vz0 ).
N
Man kann sich nun leicht davon überzeugen, dass man zu den bisher ausgewählten n Objekten aus der Menge {v1 , . . . , vn , v10 , . . . , vk0 } geeignet gewählte Objekte
aus der Menge {p1 , . . . , pk , p01 , . . . , p0k } hinzufügen kann, so
P dass eine Teilmenge
O0 von O entsteht, die die Gesamtgröße b hat, d.h. für die o∈O0 s(o) = b gilt.
((2) =⇒ (1))PSei nun umgekehrt eine Teilmenge O0 von O mit der Gesamtgröße b,
d.h. es gilt o∈O0 s(o) = b.
N
Da für alle z ∈
mit z ≤ n genau eine der beiden Objekte vz oder vz0 zu O gehören (man betrachte die letzten n Dezimalstellen der diesen Objekten vermittels
Seite 36
Kapitel 3 Grundlagen aus der Komplexitätstheorie
s zugeordneten Zahlen), kann man wie folgt eine Belegung µ der Variablen in α
definieren. Für jede Variable xz setzen wir:
• µ(xz ) := wahr, falls vz ∈ O0 ,
• µ(xz ) := falsch, falls vz0 ∈ O0 .
Wir zeigen jetzt, dass µ eine erfüllende Belegung für α ist. Hierzu genügt es zu
zeigen, dass µ jede Klausel ci in α erfüllt.
Sei ci eine Klausel in α. Da die i-te Dezimalstelle von b eine Vier ist, muss in O0
(aufgrund der Wahl der Größe der Objekte p1 , . . . , pk und p01 , . . . , p0k ) ein Objekt
o vorkommen, für das gilt, dass die i-te Dezimalstelle von s(o) eine Eins ist. Also
muss o ∈ {v1 , . . . , vn , v10 , . . . , vn0 } gelten.
N
Sei nun o = vz für ein z ∈
mit z ≤ n. Also gilt µ(xz ) = wahr und, da die i-te
Dezimalstelle der Zahl s(vz ) eine Eins ist, kommt die Variable xz in der Klausel ci
vor. Also ist µ eine erfüllende Belegung für die Klausel ci . Es sei angemerkt, dass
analog argumentiert werden kann, wenn o = vz0 für ein z ∈ mit z ≤ n gilt.
N
Das letzte Ergebnis kann man jetzt ausnutzen, um relativ einfach nachzuweisen,
dass das Entscheidungsproblem Partition ebenfalls NP-vollständig ist. Man beachte, dass hierbei nicht hilft, dass wir bereits wissen, dass Partition ≤poly SubsetSum gilt (siehe Beispiel 3.4).
S
Satz 3.6
Das Entscheidungsproblem Partition ist NP-vollständig.
Beweis. Sei I = (O, s) eine Instanz von Partition und O1 , O2 eine Zerlegung von O.
Um herauszubekommen, ob diese Zerlegung von O belegt, dass I eine ’Ja’-Instanz
von Partition ist, genügt es, die Werte
X
X
G1 :=
s(o) und G2 :=
s(o)
o∈O1
o∈O2
zu bestimmen und zu überprüfen, ob G1 = G2 gilt. Folglich gibt es einen effizienten Verifikationsalgorithmus für Partition, und damit gehört Partition zu NP.
Wir zeigen nun, dass SubsetSum ≤poly Partition gilt. Sei dazu I = (O, s, b) eine
Instanz von SubsetSum.
Wir ordnen der gegebenen Instanz I von SubsetSum die folgende Instanz Iˆ = (Ô, ŝ)
von Partition zu.
Die Menge Ô enthält alle Objekte in O und zwei weitere Objekte p1 und p2 .
Für alle o ∈ Ô mit o ∈ O setzen wir ŝ(o) := s(o). Ferner setzen wir ŝ(p1 ) := 2G − b
und
P Ô(p2 ) := G + b, wobei G die Gesamtgröße der Objekte in O ist, d.h. G :=
o∈O s(o) ist.
Es sollte offensichtlich sein, dass man anhand von I die zugehörige Instanz Iˆ von
SubsetSum effizient bestimmen kann.
3.3 NP-schwere Optimierungsprobleme
Seite 37
P
Da o∈Ô Ô(o) = 4 · G gilt, kann man nun ganz einfach zeigen, dass die folgenden
Aussagen äquivalent sind:
(1) I istP
eine ’Ja’-Instanz von SubsetSum, d.h. es gibt eine Teilmenge O0 von O
mit o∈O0 s(o) = b.
(2) Iˆ ist eine ’Ja’-Instanz von Partition, d.h. es gibt eine Zerlegung Ô1 , Ô2 von
P
P
Ô mit o∈Ô1 ŝ(o) = o∈Ô2 ŝ(o).
P
((1) =⇒ (2)) Sei O0 ⊆ O mit o∈O s(o) = b. Wir setzen nun Ô1 := O0 ∪ {p1 } und
P
Ô2 := Ô \ Ô1 . Offenbar gilt i∈Ô1 ŝ(o) = b + (2 · G − b) = 2 · G, und – wegen
P
P
o∈Ô Ô(o) = 4 · G – auch
i∈Ô2 ŝ(o) = 2 · G.
P
P
((2) =⇒ (1)) Sei Ô1 , Ô2 eine Zerlegung von Ô mit o∈Ô1 ŝ(o) = o∈Ô2 ŝ(o). Man
beachte, dass beide Teilmengen die Gesamtgröße 2 · G haben. Weil außerdem
ŝ(p1 ) + ŝ(p2 ) = 3 · G gilt, müssen p1 und p2 zu unterschiedlichen Mengen der be0
trachtenPZerlegung von Ô gehören. Falls p1 ∈ Ô1 gilt, so setzen
P wir O := Ô1 \{p1 }.
Wegen o∈Ô1 ŝ(o) = 2·G und ŝ(p1 ) = 2·G−b, folgt sofort o∈O0 s(o) = b. Wegen
O0 ⊆ O ist O0 also eine Teilmenge von O mit der Gesamtgröße b. Es sei angemerkt,
dass der Fall, dass p1 ∈ Ô2 gilt, völlig analog behandelt werden kann.
3.3 NP-schwere Optimierungsprobleme
Wie Satz 3.2 belegt, fallen die beiden Komplexitätsklassen P und NP zusammen,
wenn es für eines der bekannten NP-vollständigen Entscheidungsprobleme (etwa
für SAT, 3SAT, SubsetSum bzw. Partition) einen effizienten Lösungalgorithmus
gibt. Wenn man also – wie allgmein vermutet wird – annimmt, dass P 6= NP gilt,
muss man davon ausgehen, dass es für keines der bekannten NP-vollständigen
Entscheidungsprobleme einen effizienten Lösungsalgorithmus gibt.
Definition 3.5
Ein Optimierungsproblem (I, f, w) ist NP-schwer, wenn es ein NPvollständiges Entscheidungsproblem Π gibt, so dass gilt:
• Wenn es einen effizienten Lösungsalgorithmus für das Optimierungsproblem (I, f, w) gibt, so gibt es auch einen effizienten Lösungsalgorithmus für das NP-vollständige Entscheidungsproblem Π.
Wenn man für ein NP-schweres Optimierungsproblem einen effizienten Lösungsalgorithmus angeben kann, folgt aus 3.2 sofort, dass P = NP gilt. Übersetzt in die
Welt der Optimierungsprobleme bedeutet, die Vermutung, dass P 6= NP gilt, also:
Man vermutet, dass es für kein NP-schweres Optimierungsproblem
einen effizienten Lösungsalgorithmus gibt.
Zum Abschluss dieses Abschnittes werden wir begründen, warum wir in Kapitel 1 davon ausgegangen sind, dass es für die Optimierungsprobleme MinBinPacking und MaxSubsetSum höchstwahrscheinlich keine effizienten Lösungsalgorithmen gibt.
D
Seite 38
S
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Satz 3.7
Das Optimierungsproblem MinBinPacking ist NP-schwer.
Beweis. Wir zeigen, dass man einen effizienten Lösungsalgorithmus für MinBinPacking (siehe Kapitel 1) benutzen kann, um zu zeigen, dass das NP-vollständige
Entscheidungsproblem Partition zu P gehört.
Sei A ein effizienter Lösungsalgorithmus für MinBinPacking und I = (O, s) eine
Instanz von Partition. Um zu entscheiden, ob I eine ’Ja’-Instanz von Partition ist,
kann man wie folgt vorgehen:
Algorithmus Lösungsgorithmus B für Partition
Eingabe: Instanz I
P
1
b := 12 · o∈O s(o);
2
I 0 := (O, s, b);
3
y 0 := A(I 0 );
4
if w(y 0 ) = 2 then
5
return 0 true0 ;
6
else
7
return 0 false0 ;
8
fi
Das B ein effizienter Algorithmus ist, liegt daran, dass sich die Güte w(y 0 ) der
von A bestimmten Lösung y 0 effizient bestimmen lässt und dass die Größe von y 0
polynomiell in der Größe von I 0 beschränkt ist.
Da die Objekte in O die Gesamtgröße G = 2b haben, muss jede zulässige Lösung
für die Instanz I 0 von MinBinPacking mindestens zwei Behälter benutzen. Da die
Objekte von O genau dann in zwei Behälter der Größe b passen, wenn beide Behälter vollständig gefüllt sind, folgt sofort: Die optimale Lösung für die Instanz
I 0 von MinBinPacking benutzt genau dann zwei Behälter, wenn I eine ’Ja’-Instanz
von Partition ist, also wenn sich O in zwei Mengen mit der gleichen Gesamtgröße
zerlegen lässt.
Folglich ist B ein effizienter Lösungsalgorithmus für das Entscheidungsproblem
Partition.
S
Satz 3.8
Das Optimierungsproblem MaxSubsetSum ist NP-schwer.
Beweis. Wir zeigen, dass man einen effizienten Lösungsalgorithmus für MaxSubsetSum (siehe Kapitel 1) benutzen kann, um zu zeigen, dass das NP-vollständige
Entscheidungsproblem SubsetSum zu P gehört.
Sei A ein effizienter Lösungsalgorithmus für MaxSubsetSum und I = (O, s, b) eine
Instanz von SubsetSum. Um zu entscheiden, ob I eine ’Ja’-Instanz von SubsetSum
ist, kann man wie folgt vorgehen:
3.3 NP-schwere Optimierungsprobleme
Seite 39
Algorithmus Lösungsgorithmus B für SubsetSum
Eingabe: Instanz I = (O, s, b)
1
2
3
4
5
6
7
I 0 := (O, s, b);
y 0 := A(I 0 );
if w(y 0 ) = b then
return 0 true0 ;
else
return 0 false0 ;
fi
Das B ein effizienter Lösungsalgorithmus ist, liegt wieder daran, dass sich die
Güte w(y 0 ) der von A bestimmten Lösung y 0 effizient bestimmen lässt und dass
die Größe von y 0 polynomiell in der Größe von I 0 beschränkt ist.
Da in den zur Verfügung stehenden Behälter nur Objekte einer Gesamtgröße kleiner oder gleich b eingepackt werden, gilt: Die optimale Lösung für die Instanz I 0
von MaxSubsetSum hat genau dann die Güte b, wenn I eine ’Ja’-Instanz von SubsetSum ist, also wenn es eine Teilmenge O0 von O mit der Gesamtgröße b gibt.
Folglich ist B ein effizienter Lösungsalgorithmus für das Entscheidungsproblem
SubsetSum.
Der gerade vorgestellte Ansatz, sich davon zu überzeugen, dass ein Optimierungsproblem NP-schwer ist, ist nicht der einzig mögliche. Statt zu zeigen, dass man
einen effizienten Lösungsalgorithmus für ein Optimierungsproblem Π benutzen
kann, um ein NP-vollständiges Entscheidungsproblem effizient zu lösen, weist
man nach, dass man diesen Lösungsalgorithmus benutzen kann, um einen effizienten Lösungsalgorithmus für ein bekanntermaßen NP-schweres Optimierungsproblem zu konstruieren.
Übung 3.1
Überlegen Sie sich, weshalb man auf die eben beschriebene Art nachgewiesen hat, dass die Existenz eines effizienten Lösungsalgorithmus für das Optimierungsproblem Π impliziert, dass man jedes zur Komplexitätsklasse NP
gehörende Entscheidungsproblem effizient lösen kann.
Einige Beispiele, wie man auf die gerade beschriebene Art nachweisen kann, dass
ein Optimierungsproblem NP-schwer ist, finden sich u.a. in Kapitel 6 und 9.
Ü
Seite 40
Kapitel 3 Grundlagen aus der Komplexitätstheorie
Kapitel 4 Approximationsalgorithmen konstanter Güte
Seite 41
Kapitel 4 Approximationsalgorithmen konstanter Güte
In diesem Kapitel werden wir uns mit einigen ausgewählten NP-schweren Optimierungsproblemen beschäftigen und uns Approximationsalgorithmen konstanter Güte für diese Probeme anschauen.
Darüber hinaus werden wir sehen, dass es für einige NP-schwere Optimierungsprobleme höchstwahrscheinlich gar keine Appoximationsalgorithmen konstanter
Güte gibt bzw. nur solche, die einen Approximationsfaktor haben, der einen bestimmten Schwellwert nicht unter - bzw. überschreitet.
4.1 Prozessoptimierung
Die Optimierung von Produktionsprozessen spielt im industriellen Umfeld eine
große Rolle. In diesem Abschnitt werden wir zwei Optimierungsprobleme diskutieren, die diese Thematik addressieren.
Beim Optimierungsproblem MinJobScheduling geht es darum, die im Rahmen
eines Produktionsprozesses anfallenden Jobs so auf einer gegebenen Anzahl von
Maschinen zu verteilen, dass die insgesamt benötige Zeit zur Ausführung aller
Jobs minimal ist.
Die von uns betrachtete Version des Traveling-Salesman-Problems aus der Graphentheorie kann bspw. wie folgt als Prozessoptimierungsproblem interpretiert
werden. Es geht darum, eine Maschine, die an bestimmten Stellen eines Werkstücks Löcher bohren soll, so zu steuern, dass die zum Fertigstellen des Werkstücks benötigte Gesamtzeit minimal ist.
4.1.1 Ein Job-Scheduling-Problem
Wir betrachten das folgende Maschinenbelegungsproblem. Gegeben seien m identische Maschinen und n Jobs. Jeder dieser Jobs kann auf jeder der zur Verfügung
stehenden Maschinen ausgeführt werden, wobei ein einmal begonnener Job nicht
abgebrochen werden kann. Für jeden Job ist bekannt, wie viel Zeit benötigt wird,
um diesen Job auszuführen. Es geht darum, die Jobs so auf die zur Verfügung stehenden Maschinen zu verteilen, dass die insgesamt benötigte Ausführungszeit
minimal ist.
Beispiel 4.1
Es seien zwei Maschinen M1 und M2 sowie fünf Jobs J1 , . . . J5 gegeben, denen
die Ausführungszeiten 1, 2, 2, 4 bzw. 1 zugeordnet sind. Wenn man auf M1
nacheinander die ersten drei Jobs und auf M2 nacheinander die letzen beiden
Jobs ausführt, ist die ingesamt benötigte Ausführungszeit 5. Man kann sich
leicht überlegen, dass man diese fünf Jobs nicht schneller auf den beiden zur
Verfügung stehenden Maschinen ausführen kann.
Formal wird eine Instanz des Optimierungsproblems MinJobScheduling durch
ein Tripel I = (M, J, t) beschrieben, wobei gilt:
• M = {M1 , . . . , Mm } ist eine Menge von m identischen Maschinen,
B
Seite 42
Kapitel 4 Approximationsalgorithmen konstanter Güte
• J = {J1 , . . . , Jn } ist eine Menge von n auszuführenden Jobs,
• t ist eine Funktion, die jedem Job aus J eine Zahl aus Q+ zuordnet, die angibt, wie viel Zeit benötigt wird, um diesen Job auf einer der zur Verfügung
stehenden Maschinen auszuführen.
Ein Schedule (d.h. eine Verteilung der auszuführenden Jobs auf die zur Verfügung
stehenden Maschinen) für eine Instanz I = (M, J, t) von MinJobScheduling wird
durch ein Paar (z, s) beschrieben, wobei gilt:
• z ist eine Funktion, die jedem Job aus J eine Maschine aus M zuordnet,
• s ist eine Funktion, die jedem Job aus J eine Zahl aus Q+ zuordnet, die
angibt, wann mit der Ausführung dieses Job begonnen wird.
Ein Schedule S = (z, s) ist zulässig, wenn für alle Jobs Jj , Jj 0 ∈ J gilt:
• wenn z(Jj ) = z(Jj 0 ) und s(Jj ) < s(Jj 0 ) gilt, d.h. Jj und Jj 0 werden auf der
selben Maschine ausgeführt und zwar Jj vor Jj 0 , so muss s(Jj ) + t(Jj ) ≤
s(Jj 0 ) gelten, d.h. mit Jj 0 wird erst begonnen, nachdem Jj vollständig ausgeführt wurde.
Die Güte eines Schedules S = (z, s) entspricht der ingesamt benötigten Ausführungszeit, d.h. dem so genannten Makespan dieses Schedules. Formal gilt:
w(S) = max{s(Jj ) + t(Jj ) | Jj ∈ J}.
Optimierungsproblem MinJobScheduling
Eingabe: Instanz I = (M, J, t)
Ausgabe: zulässiger Schedule S mit minimaler Güte für die Instanz I
Einige Instanzen dieses Optimierungsproblems lassen sich trivial lösen. Sind
n Jobs auf genau einer Maschine auszuführen, so ist jeder Schedule optimal,
bei dem alle Jobs so ausgeführt werden, so dass diese Maschine durchgehend ausgelastet ist. Ungeachtet dessen ist, das MinJobScheduling ein NPschweres Optimierungsproblem. Das liegt daran, dass bereits die Variante Min2-MaschinenJobScheduling ein NP-schweres Optimierungsproblem ist. Diese
Variante umfasst alle Instanzen von MinJobScheduling, bei denen die auszuführenden Jobs auf genau zwei Maschinen zu verteilen sind (siehe auch Kapitel 5).
Ü
Übung 4.1
Zeigen Sie, dass Min-2-MaschinenJobScheduling ein NP-schweres Optimierungsproblem ist. Modifizieren Sie hierzu die im Beweis von Satz 3.7 verwendete Idee entsprechend.
Es gibt einen recht einfachen Approximationsalgorithmus konstanter Güte für
MinJobScheduling, den wir im Folgenden vorstellen und analysieren.
Algorithmus ListSchedule für MinJobScheduling
Eingabe: Instanz I = (M, J, t) mit |M | = m und |J| = n
1
2
3
for i := 1 to m do
ai := 0
od
4.1 Prozessoptimierung
4
5
6
7
8
9
Seite 43
for j := 1 to n do
Bestimme das kleinste i mit ai = min{ak | 1 ≤ k ≤ m}.
z(Jj ) := i;
s(Jj ) := ai ;
ai := ai + t(Jj );
od
Der Algorithmus ListSchedule ist offenbar ein Online-Algorithmus. Der aktuell
einzuplanende Job Jj wird stets auf einer Maschine Mi ausgeführt, die unter allen zur Verfügung stehenden Maschinen als erste mit der Ausführung aller bisher
verteilten Jobs fertig ist. (Wenn mehr als eine Maschine zur Auswahl steht, wird
die mit dem kleinsten Indes verwendet.) Wichtig ist, dass der von ListSchedule
bestimmte Schedule die Eigenschaft hat, dass jede Maschine durchgehend ausgelastet ist.
Der Online-Algorithmus ListSchedule benötigt nur O(n · m) Rechenschritte, um
einen Schedule zu bestimmen, falls n Jobs auf m Maschinen zu verteilen sind. Also
erfüllt ListSchedule die Anforderungen an einen Approximationsalgorithmus für
das betrachtet Minimierungsproblem.
Die Qualität dieses Approximationsalgorithmus kann wie folgt charakterisiert
werden:
Satz 4.1
ListSchedule ist ein Approximationsalgorithmus konstanter Güte für MinJobScheduling, der den Approximationsfaktor 2 hat.
Beweis. Sei I = (M, J, t) mit |M | = m und |J| = n die gegebene Instanz von
MinJobScheduling, Opt(I) ein optimaler Schedule für I sowie S = (z, s) der von
ListSchedule bestimmt Schedule für I. Weiterhin sei Jl derjenige Job im Schedule S, der als letzter beendet wird, d.h. es gilt w(S) = s(Jl ) + t(Jl ).
Da ListSchedule garantiert, dass bis zum Startzeitpunkt von Job Jl alle zur Verfügung stehenden Maschinen durchgehend ausgelastet sind und Jl auf der zuerst
frei werdenden Maschine ausgeführt wird, muss s(Jl ) ≤ w(Opt(I)) gelten. Da
natürlich auch t(Jl ) ≤ w(Opt(I)) gilt, erhalten wir wie gewünscht:
w(S) = s(Jl ) + t(Jl ) ≤ w(Opt(I)) + w(Opt(I)) = 2 · w(Opt(I)).
Wir stellen jetzt einen weiteren Approximationsalgorithmus konstanter Güte für
MinJobScheduling vor, der einen besseren Approximationsfaktor hat. Der Algorithmus SortedListSchedule benutzt eine Idee, die wir schon in Kapitel 1 in einem
anderen Kontext kennengelernt haben. Er sortiert zunächst die zu verteilenden
Jobs nach absteigender Laufzeit und weist dann die sortierten Jobs auf die selbe
Art und Weise wie ListSchedule den zur Verfügung stehenden Maschinen zu.
S
Seite 44
Kapitel 4 Approximationsalgorithmen konstanter Güte
Algorithmus SortedListSchedule für MinJobScheduling
Eingabe: Instanz I = (M, J, t) mit |M | = m und |J| = n
1
2
3
4
5
6
7
8
9
10
Bestimme die bzgl. ihrer Laufzeit absteigend sortierte Reihenfolge
J10 , . . . , Jn0 der Jobs in J.
for i := 1 to m do
ai := 0
od
for j := 1 to n do
Bestimme das kleinste i mit ai = min{ak | 1 ≤ k ≤ m}.
z(Jj0 ) := i;
s(Jj0 ) := ai ;
ai := ai + t(Jj0 );
od
Da SortedListSchedule nur O(n · m) + O(n · log(n)) Rechenschritte benötig, um
n Jobs auf m Maschinen zu verteilen, sind die Anforderungen an einen Approximationsalgorithmus für MinJobScheduling erfüllt.
S
Satz 4.2
SortedListSchedule ist ein Approximationsalgorithmus konstanter Güte für
MinJobScheduling, der den Approximationsfaktor 43 hat.
Beweis. Sei wie zuvor I = (M, J, t) mit |M | = m und |J| = n die gegebene Instanz von MinJobScheduling, Opt(I) ein optimaler Schedule für I sowie S = (z, s)
der von SortedListSchedule bestimmt Schedule für I. Weiterhin sei J10 , . . . , Jn0 die
bzgl. ihrer Laufzeit absteigend sortierte Reihenfolge der Jobs in J und Jl0 derjenige
Job im Schedule S, der als letzter beendet wird, d.h. es gilt w(S) = s(Jl0 ) + t(Jl0 ).
Wir unterscheiden nun die folgenden zwei Fälle:
Fall 1. t(Jl0 ) ≤
1
3
· w(Opt(I)).
Da auch SortedListSchedule garantiert, dass bis zum Startzeitpunkt s(Jl0 ) alle zur
Verfügung stehenden Maschinen durchgehend belegt sind und jeder neu einzuplanende Job auf der ersten frei werdenden Maschine ausgeführt wird, folgt wieder s(Jl0 ) ≤ w(Opt(I)). Wegen t(Jl0 ) ≤ 13 · w(Opt(I)) erhalten wir sofort:
w(S) = s(Jl0 ) + t(Jl0 ) ≤ w(Opt(I)) +
Fall 2. t(Jl0 ) >
1
3
4
1
· w(Opt(I)) = · w(Opt(I)).
3
3
· w(Opt(I)).
Wir argumentieren jetzt, dass SortedListSchedule in diesem Fall sogar einen
optimalen Schedule bestimmt, d.h. es gilt w(S) = w(Opt(I)), was unmittelbar
w(S) ≤ 34 · w(Opt(I) impliziert.
Wir unterscheiden zwei Unterfälle.
Fall 2.1. Es gilt l = n, d.h. Jl0 ist der letzte auszuführende Job.
4.1 Prozessoptimierung
Da J10 , . . . , Jn0 die bzgl. ihrer Laufzeit absteigend sortierte Reihenfolge der Jobs in J
ist, muss t(Jj0 ) > 31 · w(Opt(I)) für alle j mit 1 ≤ j ≤ n gelten. Damit können im
optimalen Schedule Opt(I) auf jeder der zur Verfügung stehenden Maschinen maximal zwei Jobs ausgeführt werden, und es kann deshalb überhaupt nur maximal
2m Jobs geben.
N
Sei nun h ∈ so gewählt, dass n = 2m − h gilt. Da es einen optimalen Schedule
gibt, der alle zur Verfügung stehenden Maschinen verwendet (vorausgesetzt, dass
nicht der triviale Fall eintritt, dass n < m gilt), können wir davon ausgehen, dass
für den optimalen Schedule Opt(I) gilt:
• auf den Maschinen M1 bis Mh wird genau ein Job ausgeführt,
• auf den Maschinen Mh+1 bis Mm werden jeweils zwei Jobs ausgeführt.
Man kann nun zeigen, dass ist die folgende Beobachtung korrekt ist:
Beobachtung. Es gibt einen optimalen Schedule mit folgenden Eigenschaften:
(i) die h längsten Jobs J10 bis Jh0 werden auf den Maschinen M1 bis Mh , also
jeweils separat ausgeführt,
(ii) die restlichen Jobs werden jeweils paarweise auf den Maschinen Mh+1 bis
0
0
0
und Jn−1
auf Mh+2 ,
Mm ausgeführt, und zwar Jh+1
und Jn0 auf Mh+1 , Jh+2
0
0
. . . sowie Jm und Jm+1 auf auf Mm .
Da der von SortedListSchedule bestimmte Schedule S die Eigenschaften (i) und
(ii) hat, folgt sofort w(S) = w(Opt(I)).
Wir verifizieren jetzt die Korrektheit der obigen Beobachtung.
Begründung für (i). Sei Opt(I) ein optimaler Schedule, der jede der zur Verfügung
stehenden Maschinen verwendet, und nicht die Eigenschaft (i) hat. Seien also Jj01 ,
Jj02 und Jj03 drei paarweise verschiedene Jobs mit h < j1 ≤ n, 1 ≤ j2 ≤ h und
1 ≤ j3 ≤ n, für die gilt:
• Jj01 wird allein auf einer Maschine Mi ausgeführt,
• Jj02 und Jj02 werden zusammen auf einer anderen Maschine Mi0 ausgeführt.
Wegen t(Jj01 ) ≤ t(Jj02 ) gilt für die Gesamtdauer T der auf Mi und Mi0 laufenden
Jobs:
T = max{t(Jj01 ), t(Jj02 ) + t(Jj03 )} = t(Jj02 ) + t(Jj03 ).
Wenn wir nun den Job t(Jj03 ) von Mi0 auf Mi verschieben, gilt für die Gesamtdauer
T 0 der auf Mi und Mi0 laufenden Jobs:
T 0 = max{t(Jj01 ) + t(Jj03 ), t(Jj02 )}.
Wegen t(Jj01 ) ≤ t(Jj02 ) gilt nun aber auch t(Jj01 ) + t(Jj03 ) ≤ t(Jj02 ) + t(Jj03 ). Da natürlich auch t(Jj02 ) ≤ t(Jj02 ) + t(Jj03 ) gilt, folgt T 0 ≤ T . Wenn man den Schedule
Opt(I) in der angegebenen Art und Weise modifiziert, erhält man also einen Schedule, dessen Güte nicht schlechter als die des optimalen Schedules Opt(I) ist, d.h.
einen optimalen Schedule.
Es sollte offensichtlich sein, dass man auf die eben beschriebene Art sukzessive
einen optimalen Schedule konstruieren kann, der die Eigenschaft (i) hat.
Seite 45
Seite 46
Kapitel 4 Approximationsalgorithmen konstanter Güte
Begründung für (ii). Sei Opt(I) ein optimaler Schedule, der jede der zur Verfügung
stehenden Maschinen verwendet, und die Eigenschaft (i), aber nicht die Eigenschaft (ii) hat. Analog zu oben, kann man zeigen, dass man die Jobs im Schedule
Opt(I) sukzessive so paarweise tauschen kann, dass ein optimaler Schedule entsteht, der neben Eigenschaft (i) auch die Eigenschaft (ii) hat (siehe Übungsaufgabe
4.2).
Fall 2.2. Es gilt l < n, d.h. Jl0 ist nicht der letzte auszuführende Job.
Wir streichen nun alle Jobs Jj0 mit l < j ≤ n aus J und betrachten die zugehörige
Instanz I 0 von MinJobScheduling. Sei Opt(I 0 ) ein optimaler Schedule für I 0 und
S 0 der von SortedListSchedule für die Instanz I 0 bestimmte Schedule.
Man kann sich nun leicht davon überzeugen, dass w(S 0 ) = w(S) gilt. (Man beachte, dass Jl0 derjenige Job im Schedule S ist, der als letztes beendet wird). Außerdem
gilt natürlich auch w(Opt(I 0 )) ≤ w(Opt(I)).
Da wir im Fall 2.1 gezeigt haben, dass w(S 0 ) = w(Opt(I 0 )) gilt, folgt
w(S) = w(S 0 ) ≤ w(Opt(I 0 )) ≤ w(Opt(I))
und damit auch w(S) = w(Opt(I) (da Opt(I) ein optimaler Schedule für I ist).
Ü
Übung 4.2
Vervollständigen Sie die Begründung für Eigenschaft (ii) im Beweis von
Satz 4.2.
Es sei angemerkt, dass es noch deutlich bessere Approximationsalgorithmen konstanter Güte für das Minimierungsproblem MinJobScheduling gibt (siehe bspw.
Jansen and Margraf [2008]).
4.1.2 Das metrische Traveling-Salesman-Problem
In diesem Abschnitt werde wir uns mit einem graphentheoretischen Optimierungsproblem beschäftigen. Einer Variante dieses Problems werden wir im nächsten Abschnitt wieder begegnen. Zur Vorbereitung der Diskussion werden zunächt
einige grundlegende Fakten aus der Graphentheorie bereitgestellt.
Ein (ungerichteter) Graph G = (V, E) besteht aus einer endlichen Knotenmenge V
und einer endlichen Kantenmenge E, wobei jede Kante zwei verschiedene Knoten
v, v 0 ∈ V verbindet. Wir betrachten zunächst nur schlichte Graphen, also Graphen
in denen es höchstens eine Kante gibt, die zwei Knoten verbindet. Also kann jede
Kante eindeutig mit Hilfe einer zweielementigen Teilmenge von V beschrieben
werden, d.h. es gilt E ⊆ {{v, v 0 } | v, v 0 ∈ V, v 6= v 0 }.
Ein Graph G = (V, E), in dem je zwei verschiedene Knoten durch eine Kante
verbunden sind, nennt man vollständigen Graphen.
Sei G = (V, E) ein Graph. Eine Folge P = (v0 , . . . , vn ) von Knoten aus V beschreibt
einen Pfad in G, falls für alle i mit 0 ≤ i < n gilt, dass die Knoten vi und vi+1 durch
eine Kante verbunden sind, d.h. es gilt {vi , vi+1 } ∈ E. Wir nennen v0 Start- und
vn Zielknoten des Pfades P . Falls in einem Pfad P jede Kante nur einmal benutzt
4.1 Prozessoptimierung
Seite 47
wird, ist P ein einfacher Pfad. Ein einfacher P bildet einen Kreis, falls Start- und
Zielknoten identisch sind, d.h. es gilt v0 = vn .
G ist ein zusammenhängender Graph, wenn es für je zwei Knoten v, v 0 ∈ V mit
v 6= v 0 einen Pfad in G gibt, der den Startknoten v und den Zielknoten v 0 hat.
Für die folgenden Betrachungen sind die Begriffe Hamiltonscher Kreis und Eulerscher Kreis sowie die mit diesen Begriffen verknüpften Entscheidungsprobleme
wichtig.
Sei G = (V, E) ein Graph und K = (v0 , . . . , vn ) ein Kreis in G. Der Kreis K ist ein
Hamiltonscher Kreis, wenn in K – mit Ausnahme des Knotens v0 – jeder Knoten
aus V genau einmal vorkommt, d.h. es gilt {v0 , . . . , vn−1 } = V und n = |V | − 1.
Der Kreis K bildet einen Eulerschen Kreis, wenn in K jede Kante aus E genau
einmal benutzt wird, d.h. es gilt {{vi , vi+1 } | 0 ≤ i < n} = E.
Entscheidungsproblem HamiltonCircle
Eingabe:
Frage:
zusammenhängender Graph G = (V, E)
Gibt es in G einen Hamiltonschen Kreis?
Entscheidungsproblem EulerCircle
Eingabe:
Frage:
zusammenhängender Graph G = (V, E)
Gibt es in G einen Eulerschen Kreis?
Obwohl sich die Anforderungen an Hamiltonsche Kreise und Eulersche Kreise
nur geringfügig unterscheiden (man interessiert sich für einen Kreisn, in dem
grob gesprochen jeder Knoten genau einmal besucht bzw. jede Kante genau einmal benutzt wird), sind die mit diesen Begriffen verknüpften Entscheidungsprobleme in Bezug auf ihre algorithmische Beherrschbarkeit sehr verschieden.
Satz 4.3
(1) HamiltonCircle ist ein NP-vollständig Entscheidungsproblem.
(2) EulerCircle ist ein Entscheidungsproblem, dass zur Komplexitätsklasse P gehört.
Einen Beweis für die Korrektheit von Aussage (1) finden Sie im Anhang. Dass es
einen effizienten Algorithmus gibt, mit dem man entscheiden kann, ob es in einem
Graphen G einen Eulerschen Kreis gibt, ergibt sich aus Lemma 4.1.
Zur Formulierung von Lemma 4.1 benötigen wir noch den folgenden Begriff: Sei
G = (V, E) ein Graph und v ein Knoten in G. Der Grad grad(v) des Knotens v gibt
an, wie viele Kanten von G den Knoten v mit anderen Knoten verbinden, d.h. es
gilt grad(v) := |{e ∈ E | v ∈ e}|.
Lemma 4.1. Sei G = (V, E) ein zusammenhängender Graph. Dann sind die folgenden
Aussagen äquivalent.
(1) Es gibt in G einen Eulerschen Kreis.
(2) Jeder Knoten in G hat einen geraden Grad.
S
Seite 48
Kapitel 4 Approximationsalgorithmen konstanter Güte
(3) Die Kantenmenge E von G kann in Kreise zerlegt werden, d.h. E kann in paarweise
disjunkte Teilmengen aufgeteilt werden, so dass die Ecken der Kanten jeder dieser
Teilmengen einen Kreis in G bilden.
Beweis. Im Folgenden beschränken wir uns darauf, die wesentlichen Argumente
für die Korrektheit der Aussagen des zu beweisenden Lemmas zusammenzufassen.
((1) =⇒ (2)) Sei K = (v0 , . . . , vn ) ein Eulerscher Kreis in G und v ein Knoten in G.
Offenbar folgt aus v = vi für ein i mit 0 ≤ i ≤ n, dass in K zwei Kanten benutzt
wurden, die den Knoten v als Ecke haben. Da in K alle Kanten benutzt werden,
muss jeder Knoten in G einen geraden Grad haben.
((2) =⇒ (3)) Sei |V | = n. Da G ein zusammenhängender Graph ist, hat G mindestens n − 1 Kanten. Da G ferner keinen Knoten vom Grad 1 hat, muss es in G
mindestens n Kanten und damit auch einen Kreis K geben.
Sei nun K ein Kreis in G und G0 der Teilgraph von G, der entsteht, indem man aus
G alle Kanten und anschließend alle Knoten streicht, die jetzt den Grad 0 haben.
Wenn es in G0 überhaupt noch eine Kante gibt, weiß man, dass in G0 alle Knoten
einen geraden Grad haben und dass G0 zusammenhängend ist bzw. in zusammenhängende Teilgraphen zerfällt (hierfür ist wichtig, dass G zusammenhängend ist
und nur Knoten mit einem geraden Grad hat).
Also kann man das selbe Argument benutzen, um sich davon zu überzeugen, dass
es in G0 bzw. in jedem der zusammenhängenden Teilgraphen, in die G0 zefällt,
wieder einen Kreis gibt. Damit folgt per Induktion, dass (3) gilt.
((3) =⇒ (1)) Sei E1 , . . . , Ez eine Zerlegung der Kantenmenge von G gemäß (3).
Falls z = 1 gilt, so wissen wir sofort, dass der zur Kantenmenge E1 gehörende
Kreis ein Eulerscher Kreis ist.
Sei jetzt z > 1 und K1 = (v01 , . . . , vz11 ) der zu E1 gehörende Kreis. Da G zusammenhängend ist, muss es einen Knoten v in K1 und ein i mit 2 ≤ i ≤ z geben, so
dass v auch im Kreis Ki = (v0i , v1i , . . . , vzi i ) vorkommt, der zu Ei gehört. Sei nun
o.b.d.A. v gleichzeitig Startknoten von K1 und Ki . (Andernfalls werden die Kreise K1 und Ki entsprechen modifiziert, siehe Übungsaufgabe 4.3.) Offenbar ist der
Pfad K = (v01 , v1i , . . . , vzi i , v11 , . . . , vz11 ) ebenfalls ein Kreis, und zwar einer, der alle
Kanten in E1 ∪ Ei benutzt.
Dieses Argument kann man nun wiederholt benutzen, um per Induktion zu zeigen, dass es in G einen Eulerschen Kreis gibt.
Ü
Ü
Übung 4.3
Sei G = (V, E) ein Graph und K = (v0 , . . . , vn ) ein Kreis in G mit n ≥ 3.
Zeigen Sie, dass einen Kreis K 0 in G gibt. der den Startknoten v2 hat und in
dem die selben Kanten wie im Kreis K benutzt werden.
Übung 4.4
Sei G = (V, E) der in Abbildung 4.1 gegebene Graph. Geben Sie drei Möglichkeiten an, wie man die Kantenmenge von G in Kreise zerlegen kann.
4.1 Prozessoptimierung
Seite 49
v3
v1
v2
v4
v5
v7
v8
Abb. 4.1: Graph für
Übung 4.4.
v6
Um zu überprüfen, ob es in einem zusammenhängenden Graphen G einen Eulerschen Kreis gibt, genügt es, den Grad jedes Knotens in G zu bestimmen. Haben
alle Knoten einen geraden Grad, so gibt es in G einen Eulerschen Kreis; andernfalls nicht. Dass man diesen Test effizient realisieren kann, solle klar sein.
Nach diesen Vorüberlegungen kommen wir zum eigentlichen Gegenstand dieses
Kapitels, dem metrischen Traveling Salesman-Problem. Bei diesem Problem geht
es grob gesprochen darum, in einem Graphen G einen Hamiltonschen Kreis zu
bestimmen, der in Bezug auf eine ebenfalls gegeben Gewichtsfunktion (die jeder
Kante in G ein Gewicht zuordnet und die die so genannte Dreiecksungleichung
erfüllt) ein minimales Gewicht hat.
Damit sichergestellt ist, dass es im G auf jeden Fall einen Hamiltonschen Kreis
gibt, setzen wir voraus, dass G ein vollständiger Graph ist. (Dann ist G natürlich
auch zusammenhängend.)
Lemma 4.2. In jedem vollständigen Graphen gibt es einen Hamiltonschen Kreis.
Übung 4.5
Ü
Überlegen Sie sich, wie man begründen kann, dass Lemma 4.2 richtig ist.
Das metrische Traveling Salesman-Problem ist nun formal wie folgt definiert:
Eine Instanz von Min∆TravelingSalesman ist ein Paar I = (G, g), wobei gilt:
• G = (V, E) ist ein vollständiger Graph,
Q
• g ist eine Funktion, die jeder Kante in G eine Zahl aus + zuordnet, wobei
die Dreiecksungleichung erfüllt ist, d.h. für alle paarweise verschiedenen
Knoten v1 , v2 , v3 ∈ V gilt: g({v1 , v2 }) + g({v2 , v3 }) ≥ g({v1 , v3 }).
Jeder Hamiltonsche Kreis K = (v0 , . . . , vn ) in G ist eine zulässige Lösung für eine Instanz I = (G, g). Die Güte von K entspricht der Summe der Gewichte der
Pn−1
Kanten, die in K benutzt werden, d.h. w(K) := i=0 g({vi , vi+1 }).
Optimierungsproblem Min∆TravelingSalesman
Eingabe: Instanz I = (G, g)
Ausgabe: Hamiltonscher Kreis K in G mit minimaler Güte
Für das Minimierungsproblem Min∆TravelingSalesman gibt es jedoch höchstwahrscheinlich keinen effizienten Lösungsalgorithmus.
Satz 4.4
Das Minimierungsproblem Min∆TravelingSalesman ist ein NP-schweres
Optimierungsproblem.
S
Seite 50
Kapitel 4 Approximationsalgorithmen konstanter Güte
Beweis. Wir nehmen an, dass A ein effizienter Lösungsalgorithmus für
Min∆TravelingSalesman sei. Aus dieser Annahme folgt nun, dass das NPvollständige Entscheidungsproblem HamiltonCircle zu P gehört. Um das zu
sehen, bedarf es folgender Überlegungen.
Sei G = (V, E) eine Instanz I von HamiltonCircle. Um zu entscheiden, ob G eine
‘Ja’-Instanz ist, verwenden wir den folgenden Algorithmus:
Algorithmus Lösungsalgorithmus B für HamiltonCircle
Eingabe: Instanz G = (V, E) mit |V | = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
E 0 := {{v, v 0 } | v, v 0 ∈ V, v 6= v 0 };
G0 := (V, E 0 );
forall e0 ∈ E 0 do
if e0 ∈ E then
g(e0 ) := 1;
else
g(e0 ) := 2;
fi
od
I 0 := (G0 , g);
K 0 := A(I 0 );
if w(K 0 ) = n then
return 0 true0 ;
else
return 0 false0 ;
fi
Man beachte, dass der anhand von G konstruierte Graph G0 vollständig ist. Ferner
garantiert die Wahl der Gewichtsfunktion g, dass alle Kanten in G0 das Gewicht 1
oder 2 zugeordnet wird. Dass die Dreiecksungleichhung erfüllt ist, kann man einfach nachrechnen. Also ist I 0 = (G, g) eine Instanz von Min∆TravelingSalesman.
Da A nach Voraussetzung ein effizienter Lösungsalgorithmus für das Optimierungsproblem Min∆TravelingSalesman ist, folgt unmittelbar, dass B ebenfalls
ein effizienter Algorithmus ist. Man beachte hierbei, dass |I 0 | ≤ c · |I 2 | für eine
geeignet gewählte Konstante c ≥ 1 gilt.
Es bleibt zu zeigen, dass B ein Lösungsalgorithmus für HamiltonCircle ist.
Wir beginnen mit der folgenden Beobachtung:
Beobachtung. Wenn es im Graphen G einen Hamiltonschen Kreis K gibt, so muss
A bei Eingabe von I 0 einen Hamiltonschen Kreis K 0 mit w(K 0 ) = n ausgeben.
Begründung: Sei K ein Hamiltonscher Kreis in G. Dann ist K auch ein Hamiltonscher Kreis in G und es gilt w(K) = n. Wir nehmen nun an, dass A einen Hamitonschen Kreis K 0 mit w(K 0 ) 6= n ausgibt. Dann muss in K 0 mindestens eine Kante
e0 benutzt werden, die nicht zur Kantenmenge des gegebenen Graphen G gehört.
Also gilt
w0 (K 0 ) ≥ (n − 1) + 2 > n = w(K).
Demzufolge hat A für die Instanz I 0 von Min∆TravelingSalesman keine optimale Lösung bestimmt. Also kann A kein Lösungsalgorithmus für dieses Minimierungsproblem sein.
4.1 Prozessoptimierung
Seite 51
Dass B die Frage, ob G eine ‘Ja’-Instanz von HamiltonCircle ist, korrekt beantwortet, sieht man wie folgt.
Fall 1. B beantwortet die Frage mit ’false’.
Aus der Kontraposition der obigen Beobachtung, folgt sofort, dass es in G keinen
Hamitonschen Kreis geben kann. Also ist die Antwort korrekt.
Fall 2. B beantwortet die Frage mit ’true’.
Also gibt es einen Hamiltonschen Kreis K 0 im Graphen G0 mit w(K 0 ) = n. Da K 0
nur Kanten benutzt, die es auch in G gibt, muss es in G ebenfalls einen Hamiltonschen Kreis geben. Also ist die Antwort korrekt.
Zum Abschluss dieses Abschnitts beschäftigen wir uns mit zwei Approximationsalgorithmen konstanter Güte für Min∆TravelingSalesman. Zu ihrem Verständnis
bedarf es einiger Vorüberlegungen.
Sei G = (V, E) ein Graph und E 0 ⊆ E. Ein Teilgraph G0 = (V, E 0 ) von G ist ein
spannender Baum in G, wenn G0 zusammenhängend und kreisfrei ist.
Beispiel 4.2
Wir betrachten den Graph G in Abbildung 4.2. In Abbildung 4.3 sind zwei
spannende Bäume in G dargestellt
Abb. 4.2: Graph für
Beispiel 4.2.
v1
v2
v3
v4
v5
v6
v7
v1
v2
v3
v4
v5
v6
v7
B
Abb. 4.3: Spannende
Bäume für Beispiel
4.2.
v1
v2
v3
v4
v5
v6
v7
Wie das Beispiel illustriert, haben alle spannenden Bäume in einem zusammenhängenden Graphen G = (V, E) genau eine Kante weniger, als es Knoten in G
gibt. Das liegt daran, dass jeder Teilgraph von G mit weniger Kanten nicht zusammenhängend ist und jeder Teilgraph mit mehr Kanten einen Kreis enthält, also
nicht kreisfrei ist.
Q
Sei nun g eine Gewichtsfunktion, die jeder Kante in G eine Zahl aus + zuordnet.
0
0
Dann entspricht die Güte eines spannenden Baums G
P= (V, E )0 in G der Summe
0
0
der Gewichte der Kanten in G , d.h. es gilt w(G ) := e0 ∈E 0 g(e ).
Beim Optimierungsproblem MinSpanningTree geht es nun darum, einen minimal
spannenden Baum zu bestimmen.
Seite 52
Kapitel 4 Approximationsalgorithmen konstanter Güte
Optimierungsproblem MinSpanningTree
Eingabe: Instanz I = (G, g)
Ausgabe: Spanender Baum G0 in G mit minimaler Güte
Da die beiden Approximationsalgorithmen für das Optimierungsproblem
Min∆TravelingSalesman einen Lösungsalgorithmus für MinSpanningTree als
Unterprozedur verwenden, stellen wir jetzt einen geeigneten Lösungsalgorithmus vor.
Algorithmus Kruskal für MinSpanningTree
Eingabe: Instanz I = (G, g) mit G = (V, E), |V | = n und |E| = m
1
2
3
4
5
6
7
8
9
10
Bestimme die bzgl. ihrer Gewichtes aufsteigend sortierte Reihenfolge
e1 , . . . , em der Kanten in E.
E 0 := {e1 };
for i := 2 to m do
E ∗ := E 0 ∪ {ei };
G∗ := (V, E ∗ );
if G∗ ist kreisfrei then
E 0 := E ∗ ;
fi
od
return G0 = (V, E 0 );
Das der obige Algorithmus wirklich ein Lösungsalgorithmus für MinSpanningTree ist, kann man bspw. in Krumke and Noltemeier [2012] nachlesen. Um die
Anzahl der Rechenschritte geeignet abzuschätzen, benutzen wir, dass jeder in Zeile 5 definierte Graph G∗ genau n Knoten und höchstens n − 1 Kanten hat. Deshalb
genügen O(n) Rechenschritte, um zu überprüfen, ob G∗ kreisfrei ist. Also benötigt Kruskal nur O(n · m) + O(m · log(m)) Rechenschritte, um einen minimalen
spannenden Baum zu bestimmen.
Ü
Übung 4.6
Überlegen Sie sich einen Allgorithmus, mit dem man möglichst effizient entscheiden kann, ob ein Graph kreisfrei ist.
Das folgende Beispiel illustriert die Arbeitsweise dieses Lösungsalgorithmus für
MinSpanningTree. Es sei angemerkt, dass es noch weitere effiziente Lösungsalgorithmen für dieses Minimierungsproblem gibt, siehe etwa Krumke and Noltemeier [2012].
B
Beispiel 4.3
Wir betrachten den Graphen in Abbildung 4.4. Die Kantengewichte sind direkt an den Kanten notiert.
Sei nun {v1 , v2 }, {v1 , v4 }, {v2 , v4 }, {v1 , v3 }, {v3 , v4 }, {v4 , v5 }, {v2 , v5 } die im
ersten Schritt bestimmte Reihenfolge der Kante in E.
Man kann leicht nachrechnen, dass Kruskal den in Abbildung 4.5 darge-
4.1 Prozessoptimierung
Seite 53
stellten minimal spannenden Baum G0 bestimmt, wobei die Kanten in der
Reihenfolge {v1 , v2 }, {v1 , v4 }, {v1 , v3 }, {v4 , v5 } aufgenommen werden.
v1
1
2
v3
v1
2
v3
Abb. 4.4: Graph für
Beispiel 4.3.
v2
1
2
1
v4
1
3
2
v5
Abb. 4.5: Ergebnis von
Kruskal für Beispiel
4.3.
v2
1
v4
2
v5
Unsere beiden Approximationsalgorithmen für Min∆TravelingSalesman benötigen außerdem noch einen Unterprozedur, mit der man effizient Eulersche Kreise
bestimmen kann. Diesen Aspekt behandeln wir als nächstes.
Zu beachten ist, dass die Graphen, in denen ein Eulerscher Kreis zu bestimmen ist,
nicht notwendigerweise schlicht sind. Sie können parallele Kanten enthalten, d.h.
es kann Knoten v, v 0 geben, die durch mehr als eine Kanten verbunden sind.
Sei G ein Graph mit parallelen Kanten. Dann beschreibt man G, in dem man die
Menge der Knoten V , die Menge der Kanten E und eine Inzidenzfunktion γ angibt, die jeder Kante e ∈ E die beiden Knoten v, v 0 ∈ V mit v 6= v 0 zuordnet,
die durch e verbunden sind. Die Elemente in E sind hier – im Unterschied zu
schlichten Graphen – nur Namen für die Kanten in G, d.h. E ist nicht länger eine
Teilmenge der Menge {{v, v 0 } | v, v 0 ∈ V, v 6= v 0 }.
Es ist nicht schwer zu sehen, dass die Aussagen von Lemma 4.1 auch für Graphen
mit parallelen Kanten gelten. Also kann man – unter Benutzung von Aussage (3) in
Lemma 4.1 – wie folgt vorgehen, um einen Eulerschen Kreis zu bestimmen. Es sei
darauf hingewiesen, dass der folgende Algorithmus natürlich nur dann erfogreich
arbeitet, wenn alle Knoten im zu untersuchenden Graphen einen geraden Grad
haben.
Algorithmus Euler
Eingabe: zusammenhängender Graph G = (V, E, γ)
1
2
3
4
5
6
7
8
9
Bestimme einen Kreis K 0 in G.
Bestimme den Teilgraphen G0 von G, den man erhält, in dem zunächst
alle in K 0 benutzten Kanten und danach alle Knoten, die deshalb den
Grad 0 bekommen, gestrichen werden.
if G0 hat noch Kanten then
G := G0 ;
Gehe zu Zeile 1.
else
Benutze alle in Zeile 1 bestimmten Kreise K 0 , um einen Eulerschen
Kreis K im gegebenen Graphen zu bestimmen.
fi
return K
Das folgende Beispiel illustriert die Arbeitsweise dieses Algorithmus:
Seite 54
B
Kapitel 4 Approximationsalgorithmen konstanter Güte
Beispiel 4.4
Wir betrachten den in Abbildung 4.6 dargestellten Graphen G und schauen
uns eine Möglichkeit an, wie Euler arbeiten könnte.
Zunächst wird der Kreis K10 = (v1 , v2 , v3 , v4 , v1 ) bestimmt. Danach werden
nacheinander die in Abbildung 4.7 und 4.8 dargestellten Teilgraphen sowie
die beiden Kreise K20 = (v3 , v7 , v8 , v3 ) und K30 = (v4 , v5 , v6 , v4 ) bestimmt.
Der gesuchte Eulersche Kreis K = (v1 , v2 , v3 , v7 , v8 , v3 , v4 , v5 , v6 , v4 , v1 ) wird
dann anhand dieser drei Kreise bestimmt.
Abb. 4.6: Graph für
Beispiel 4.4.
v6
Abb. 4.7: Erster Teilgaph für Beispiel 4.4.
v6
Abb. 4.8: Letzter Teilgaph für Beispiel 4.4.
v1
v2
v4
v3
v5
v8
v4
v3
v5
v8
v6
v4
v7
v7
v5
Um sich davon zu überzeugen, dass Euler ein effizienter Algorithmus ist, genügt
es, die Anzahl der Rechenschritte abzuschätzen, die in Zeile 1 benötigt werden,
um einen Kreis zu bestimmen. Wir wir gleich sehen werden, geht das mit O(n+m)
Rechenschritten, wobei n die Anzahl der Knoten und m die Anzahl der Kanten
von G bezeichnet.
Einen Kreis in einem zusammenhängenden (nicht notwendigerweise schlichten)
Graphen G kann man nun wie folgt effizient bestimmen:
Algorithmus Kreis
Eingabe: zusammenhängender Graph G = (V, E, γ)
1
2
3
4
5
6
7
8
9
10
11
12
13
Wähle einen Knoten v ∈ V .
v0 := v;
i := 0;
E 0 := E;
repeat
Wähle eine Kante e0 ∈ E 0 mit vi ∈ γ(e0 ).
Bestimme den anderen Knoten v 0 mit v 0 ∈ γ(e0 ).
E 0 = E 0 \ {e0 };
i := i + 1;
vi := v 0 ;
until vi = v0
K := (v0 , . . . , vi );
return K;
4.1 Prozessoptimierung
Seite 55
Nachdem unsere Vorüberlegungen beendet sind, beschäftigen wir uns jetzt mit
dem ersten Approximationsalgorithmus für Min∆TravelingSalesman.
Algorithmus MinST
Eingabe: ungerichteter, vollständiger Graph G = (V, E) mit |V| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Bestimme mit Kruskal einen minimal spannenden Baum G0 = (V, E 0 )
in G.
Erzeuge einen Graphen G∗ = (V, E ∗ , γ) mit parallelen Kanten, in dem
jede Kante e0 = {v, v 0 } in E 0 verdoppelt wird, d.h. es gibt in G∗ anstelle von e0 zwei Kanten e01 und e02 , die die Knoten v und v 0 verbinden.
Bestimme mit Euler einen Eulerschen Kreis K ∗ = (v0∗ , . . . , vz∗ ) in G∗ .
v0 := v0∗ ;
i := 0;
for j := 1 to z − 1 do
if vj∗ ∈
/ {v0 , . . . , vi } then
i := i + 1;
vi := vj∗ ;
fi
od
vn := vz∗ ;
K := (v0 , . . . , vn );
return K;
In den Zeilen 4 bis 11 wird im Eulerschen Kreis K ∗ offenbar – mit Ausnahme des
Startknotens v0∗ – jedes zweite Vorkommen eines Knotens gestrichen. Da in K ∗
jeder Knoten aus G vorkommt, ist K wie gewünscht ein Hamiltonscher Kreis.
Zur Illustration der Arbeitsweise von MinST dient folgendes Beispiel:
Beispiel 4.5
B
Wir betrachten den in Abbildung 4.9 dargestellten vollständigen Graphen,
wobei allen durchgezogenen Kanten das Gewicht 1 und allen gestrichelten
Kanten das Gewicht 2 zugeordnet ist.
Zu Beginn wird der in Abbildung 4.10 dargestellte minimal spannende
Baum G0 bestimmt. Danach wird aus G0 durch Verdoppeln der Kanten der
in Abbildung 4.11 dargestellte Graph G∗ erzeugt. Anschließend wird in G∗
der Eulersche Kreis K ∗ = (v1 , v2 , v4 , v2 , v1 , v3 , v5 , v3 , v1 ) bestimmt.
Zum Abschluss wird der Hamilitonsche Kreis K = (v1 , v2 , v4 , v3 , v5 , v1 ) der
Güte 7 konstruiert, der jedoch nicht optimal ist (ein optimaler Hamiltonschen Kreis hat offensichtlich die Güte 5).
Abb. 4.9: Graph für
Beispiel 4.5.
v1
v2
v3
v4
v5
Seite 56
Kapitel 4 Approximationsalgorithmen konstanter Güte
Abb. 4.10: Minimal
spannender Baum G0
für Beispiel 4.5.
v1
v2
v3
v4
v5
Abb. 4.11: Graph G∗
für Beispiel 4.5.
v1
v2
v3
v4
v5
Da der Algorithmus MinST als Unterprozeduren effiziente Algorithmen verwendet, ist MinST ebenfalls ein effizienter Algorithmus, und damit aucht ein Approximationsalgorithmus für Min∆TravelingSalesman. Es gilt nun:
S
Satz 4.5
MinST ist ein Approximationsalgorithmus konstanter Güte für das Optimierungsproblem Min∆TravelingSalesman, der den Approximationsfaktor 2
hat.
Beweis. Sei I = (G, g) eine Instanz von Min∆TravelingSalesman, K der von
MinST gefundene Hamiltonsche Kreis und Opt(I) eine optimale Lösung für I.
Ferner sei G0 = (V, E 0 ) der von MinST bestimmte minimal spannenden Baum.
Wir überlegen uns zunächst, dass die folgende Bobachtung stimmt.
Beobachtung. Es gilt w(G0 ) ≤ w(Opt(I)).
Begründung. Wenn wir im Hamiltonschen Kreis Opt(I) eine Kante streichen, erhalten wir einen spannenden Baum mit einer Güte kleiner oder gleich w(Opt(I)).
Da G0 ein minimal spannenden Baum ist, folgt w(G0 ) ≤ w(Opt(I)).
Sei nun G∗ der Graph, den MinST durch Verdoppeln der Kanten in G0 erzeugt.
Offenbar gilt w(G∗ ) = 2·w(G0 ), wobei w(G∗ ) die Summe der Gewichte der Kanten
in G∗ bezeichnet. Also gilt auch w(K ∗ ) = w(G∗ ) für den von MinST bestimmten
Eulerschen Kreis K ∗ .
MinST konstruiert den Hamiltonschen Kreis K, indem sukzessive Teilpfade in K ∗ ,
die mehrere Kanten benutzen (etwa e∗1 ,. . . e∗i ), durch eine einzige Kante (etwa e∗ )
ersetzt werden. Da aus der Dreiecksungleichung g(e∗1 ) + · · · + g(e∗i ) ≤ g(e∗ ) folgt,
gilt auch w(K) ≤ w(K ∗ ). Also erhalten wir:
w(K) ≤ w(K ∗ ) = w(G∗ ) = 2 · w(G0 ).
Da aus der obigen Beobachtung natürlich auch 2 · w(G0 ) ≤ 2 · w(Opt(I)) folgt,
muss auch w(K) ≤ 2 · w(Opt(I)) gelten.
4.1 Prozessoptimierung
Seite 57
Der dem Approximationsalgorithmus MinST zugrunde liegenden Ansatz kann
nun so modifiziert werden, dass man einen ein Algorithmus konstanter Güte mit
dem Approximationsfaktor 32 erhält. Hintergrund dafür ist die folgende Überlegung.
Schaut man sich die Analyse von MinST an, stellt man fest, dass das Verdoppeln
der Kanten im minimal spannenden Baum G0 dafür verantwortlich ist, dass MinST
den Approximationsfaktor 2 hat. Die Kanten in G0 hat man aber nur deshalb verdoppelt, um sicherzustellen, dass in G∗ jeder Knoten einen geraden Grad hat (andernfalls würde es in G∗ keinen Eulerschen Kreis geben). Letzteres kann man aber
auch erreichen, indem man bei der Konstruktion von G∗ nur die Knoten in G0
in Betracht zieht, die einen ungeraden Grad haben – die Knoten mit einem geraden Grad ignoriert man schlichtweg. Dass das funktioniert, hat den folgenden
Grund.
Lemma 4.3. Sei G = (V, E) ein Graph. Dann hat G eine gerade Anzahl von Knoten mit
einem ungeraden Grad.
Beweis. Man kann sich leicht überlegen, dass die Summe der Grade alle Knoten
in G eine gerade Zahl ist. (Jede Kante in G wird bei der Bestimmung des Grades
von zwei verschiedenen Knoten berücksichtigt. Also ist die Summe der Grade alle
Knoten gleich 2 · |E|.) Da die Summe der Grade aller Knoten mit einem geraden
Grad ebenfalls gerade ist, muss die Anzahl der Knoten mit einem ungerdaden
Grad auch gerade sein.
Es genügt also, in G∗ so viele Kante aufzunehmen, dass sichergestellt ist, dass je
zwei Knoten, die einen ungeraden Grad in G0 haben, durch eine zusätzliche Kanten verbunden sind. Bei der Wahl dieser Kanten sollte man natürlich so vorgehen,
dass man Kanten aufnimmt, deren Gesamtgewicht möglichst minimal ist.
Sei G = (V, E) ein Graph und g eine zugehörige Gewichtsfunktion. Eine Teilmenge M ⊆ V heißt Matching in G, wenn es zu jedem Knoten v in G höchstens eine Kante in M gibt, die v als Ecke hat. Ein Matching M nennt man perfekt,
wenn es zu jedem Knoten v in G eine Kante in M gibt, die v als Ecke hat. Die
Güte eines
PMatchings M entspricht der Summe der Kantengewichte in M , d.h.
w(M ) := e∈M g(e).
Satz 4.6
Sei G ein vollständiger Graph, der eine gerade Anzahl von Knoten hat, und
g eine zugehörige Gewichtsfunktion. Dann gilt:
(1) Es gibt ein perfektes Matching M in G.
(2) Man kann effizient ein gewichtsminimales perfektes Matching M in G
bestimmen.
Aussage (1) kann man recht einfach per Induktion beweisen. Aussage (2) hat es
mehr in sich, so dass wir wegen eines Beweises nur auf Korte and Vygen [2008]
verweisen.
Der zweite Approximationsalgorithmus für Min∆TravelingSalesman arbeitet
nun wie folgt:
S
Seite 58
Kapitel 4 Approximationsalgorithmen konstanter Güte
Algorithmus Christofides
Eingabe: ungerichteter, vollständiger Graph G = (V, E) mit |V| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Bestimme mit Kruskal einen minimal spannenden Baum G0 = (V, E 0 )
in G.
Bestimme die Menge V 00 aller Knoten in G0 , die einen ungeraden Grad
haben, und bilde den vollständigen Teilgraphen G00 von G, der die
Knotenmenge V 00 hat.
Bestimme mit einem effizienten Algorithmus ein gewichtsminimales
perfektes Matching M in G00 .
Erzeuge den Teilgraphen G∗ = (V, E ∗ ) von G, in dem alle Kanten aus
M in G0 aufgenommen werden, d.h. es gilt E ∗ := E 0 ∪ M .
Bestimme mit Euler einen Eulerschen Kreis K ∗ = (v0∗ , . . . , vz∗ ) im
Graphen G∗ .
v0 := v0∗ ;
i := 0;
for j := 1 to z − 1 do
if vj∗ ∈
/ {v0 , . . . , vi } then
i := i + 1;
vi := vj∗ ;
fi
od
vn := vz∗ ;
K := (v0 , . . . , vn );
return K;
Das folgende Beispiel veranschaulicht die Arbeitsweise dieses Approximationsalgorithmus.
B
Beispiel 4.6
Wir betrachten den in Abbildung 4.12 dargestellten vollständigen Graphen,
wobei alle durchgezogenen Kanten das Gewicht 1 und allen gestrichelten
Kanten das Gewicht 2 zugeordnet ist.
Zunächst wird der minimal spannende Baum G0 aus Abbildung 4.13 bestimmt. Danach wird der in Abbildung 4.14 dargestellte vollständige Teilgraph G00 erzeugt, in dem dann das perfekte, gewichtsminimale Matching
M = {{v2 , v3 }, {v4 , v5 }} bestimmt wird.
Aus G0 und M wird nun der Graph G∗ (siehe Abbildung 4.15) generiert, in
dem der Eulersche Kreis K ∗ = (v1 , v2 , v3 , v1 , v4 , v5 , v1 ) bestimmt wird.
Anhand von K ∗ wird dann der Hamiltonsche Kreis K = (v1 , v2 , v3 , v4 , v5 , v1 )
der Güte 8 konstruiert, der sogar ein optimaler Hamiltonscher Kreis in G ist.
Abb. 4.12: Graph für
Beispiel 4.6.
v1
v2
v3
v4
v5
4.1 Prozessoptimierung
Seite 59
Abb. 4.13: Minimal
spannender Baum G0
für Beispiel 4.5.
v1
v2
v3
v4
v5
v2
v3
v4
v5
Abb. 4.14:
Vollständiger Teilgraph G00 für Beispiel
4.5.
Man beachte, dass Christofides als Unterprozeduren ebenfalls nur effiziente Algorithmen verwendet. Da wieder offensichtlich ist, dass ein Hamitonscher Kreis
im gegebenen Graphen bestimmt wird, ist Christofides ein Approximationsalgorithmus für Min∆TravelingSalesman.
Satz 4.7
S
Christofides ist ein Approximationsalgorithmus konstanter Güte für das Optimierungsproblem Min∆TravelingSalesman, der den Approximationsfaktor 32 hat.
Beweis. Sei I = (G, g) eine Instanz von Min∆TravelingSalesman, K der von Christofides gefundene Hamiltonsche Kreis und Opt(I) eine optimale Lösung für I.
Außerdem sei G∗ = (V, E ∗ ) der von Christofides in Zeile 4 erzeugte Graph. Ferner
bezeichne w(G∗ ) die Summe der Gewichte der Kanten in G∗ .
Offenbar gilt w(G∗ ) = w(G0 ) + w(M ), wobei G0 der von Christofides bestimmmte
minimale Baum und M das bestimmte gewichtsminimale Matching im vollständigen Teilgraphen G00 von G sei.
Wir nehmen nun an, dass w(M ) ≤ 12 · w(Opt(I)) gilt. Da auch w(G0 ) ≤ w(Opt(I))
gilt (siehe den Beweis von Satz4.5), erhalten wir w(G∗ ) ≤ 23 · w(Opt(I)). Da
Christofides einen Eulerschen Kreis K ∗ in G∗ bestimmt, ergibt sich daraus sofort
w(K ∗ ) ≤ 23 · w(Opt(I)).
Wie im Beweis von Satz 4.5 kann man nun argumentieren, dass unter Benutzung
der Dreiecksungleichung w(K) ≤ w(K ∗ ) folgt, was unmittelbar die Behauptung
des Satzes impliziert.
Es bleibt die Annahme zu verifizieren, dass w(M ) ≤
spielt die folgende Beobachtung eine zentrale Rolle.
1
2
· w(Opt(I)) gilt. Hierbei
Abb. 4.15: Teilgraph
G∗ für Beispiel 4.5.
v1
v2
v3
v4
v5
Seite 60
Kapitel 4 Approximationsalgorithmen konstanter Güte
Beobachtung 1. Im vollständigen Teilgraphen G00 gibt es einen Hamiltonschen
Kreis K 00 , der eine Güte kleiner oder gleich w(Opt(I)) hat.
Begründung. Sei Opt(I) = (v0 , . . . , vn ). Wir benutzen jetzt den Hamiltonschen
Kreis Opt(I) in G, um den gesuchten Hamiltonschen Kreis K 00 in G00 zu konstruieren. Sei i mit 0 ≤ i ≤ n so gewählt, dass die Knoten v0 bis vi−1 nicht in
G00 vorkommen. Offenbar ist dann (vi , . . . , vn , vi ) ebenfalls ein Kreis in G, der aufgrund der Dreiecksungleichung die Eigenschaft hat, dass die Summe der Gewichte der in diesem Kreis benutzten Kanten kleiner gleich w(Opt(I)) ist. (Man beachte, dass (vi , . . . , vn , v0 , . . . , vi−1 , vi ) ebenfalls ein Kreis in G ist und dass der Kreis
(vi , . . . , vn , vi ) aus diesem Kreis entsteht, indem die Knoten v0 , . . . , vi−1 gestrichen
werden.)
Wenn man diesen Konstruktion so lange wiederholt, bis alle Knoten aus Opt(I)
gestrichen werden, die nicht in G00 vorkommen, erhält man den gesuchten Hamiltonschen Kreis K 00 in G00 mit w(K 00 ) ≤ w(Opt(I))
Wir können nun Beobachtung 1 benutzen, um zu zeigen:
Beobachtung 2. Im vollständigen Teilgraphen G00 gibt es ein perfektes Matching M 00
mit w(M 00 ) ≤ 21 · w(Opt(I)).
Begründung. Sei K 00 ein Hamiltonscher Kreis in G00 , der die in Beobachtung 1 formulierte Eigenschaft hat. Da es in G00 geradzahlig viele Knoten gibt, werden in K 00
geradzahlig viele paarweise verschiedene Kanten benutzt (sagen wir die Kanten
e001 , . . . , e002z , und zwar in der angegeben Reihenfolge).
Sei nun M100 := {e001 , e003 , . . . , e002z−1 } und M200 := {e002 , e004 , . . . , e002z }. Da K 00 ein Hamiltonscher Kreis ist, sind sowohl M100 als auch M200 perfekte Matchings in G00 . Da
w(K 00 ) = w(M100 ) + w(M200 ) gilt, muss w(M100 ) ≤ 21 · w(K 00 ) oder w(M200 ) ≤ 12 · w(K 00 )
gelten. Zusammen mit w(K 00 ) ≤ w(Opt(I)) (siehe Beobachtung 1) folgt damit die
Behauptung von Beobachtung 2.
Da M ein gewichtsminimales perfektes Matching in G00 ist, folgt aus Beobachtung 2 sofort, dass auch w(M ) ≤ 12 · w(Opt(I)) gilt. Damit ist die oben getroffene
Annahme verifiziert.
Es sei angemerkt, dass es nicht beliebig gute Appproximationssalgorithmen konstanter Güte für das Optimierungsproblem Min∆TravelingSalesman gibt. Man
kann zeigen (siehe etwa Jansen and Margraf [2008]), dass gilt:
S
Satz 4.8
Es gibt ein ε > 0 mit folgender Eigenschaft:
• Falls P 6= NP gilt, gibt es keinen Appproximationssalgorithmus konstanter Güte für Min∆TravelingSalesman, der den Approximationsfaktor 1 + ε hat.
4.2 Nichtapproximierbarkeitsergebnisse
Wie wir in Kapitel 3 diskutiert haben, gibt es – unter der Annahme, dass P 6= NP
gilt – für kein NP-schweres Optimierungsproblem einen effizienten Lösungsal-
4.2 Nichtapproximierbarkeitsergebnisse
gorithmus. Im Folgenden werden wir sehen, dass aus dieser Annahme folgt, dass
es NP-schwere Optimierungsprobleme gibt, für die es
• überhaupt keine Approximationsalgorithmen konstanter Güte gibt bzw.
• nur Approximationsalgorithmen konstanter Güte gibt, die einen Approximationsfaktor haben, der einen bestimmten Schwellwert nicht unter - bzw.
überschreitet.
Um nachzuweisen, dass es für ein NP-schweres Optimierungsproblem keinen
Approximationsalgorithmen konstanter Güte mit einem Approximationsfaktor δ
gibt, wählt man sich ein geeignetes NP-vollständiges Entscheidungsproblem Π
und zeigt, dass folgende Implikation gilt:
• Wenn es einen Approximationsalgorithmus konstanter Güte mit einem Approximationsfaktor kleiner δ für gibt, so gibt es auch einen effizienten Lösungsalgorithmus für Π.
Für das Optimimierungsproblem MinTravelingSalesman, also die verallgemeinerte Version des metrischen Traveling-Salesman-Problems, gibt es höchstwahrscheinlich keinen Approximationsalgorithmen konstanter Güte.
Bei der verallgemeinerten Version des metrischen Traveling-Salesman-Problems
geht es auch darum, für einen gegebenen vollständigen ungerichteten Graphen
einen Hamitonschen Kreis zu bestimmen, der bzgl. einer gegebenen Gewichtsfunktion g optimal ist, also ein minimales Gesamtgewicht hat. Die verwendete
Gewichtsfunktion muss im Unterschied zu Min∆TravelingSalesman keine zusätzlichen Anforderungen erfüllen.
Eine Instanz dieses Optimimierungsproblems durch ein Paar I = (G, g) beschrieben, wobei gilt:
• G ist ein vollständiger ungerichteter Graph mit der Knotenmenge V und
der Kantenmenge E,
• g ist ein Funktion, die jeder Kante e ∈ E ein Zahl in Q+ , also ihr Gewicht
g(e) zuordnet.
In Analogie zu Min∆TravelingSalesman ist jeder Hamiltonsche Kreis K in G eine
zulässige Lösung für die Probleminstanz I = (G, w). Die Güte einer zulässigen
Lösung K ist P
wie üblich die Summe der Kantengewichte der Kanten in K, d.h. es
gilt w(K) := e∈K g(e).
Optimierungsproblem MinTravelingSalesman
Eingabe: Instanz I = (G, g)
Ausgabe: zulässige Lösung K minimaler Güte für die Instanz I
In Analogie zum Beweis von Satz 4.4 kann man sehr einfach zeigen, dass das Optimierungsproblem MinTravelingSalesman NP-schwer ist. Im Unterschied zu
MinM-TravelingSalesman ist die verallgemeinerte Version ein nicht konstant approximierbares Optimierungsproblem.
Seite 61
Seite 62
S
Kapitel 4 Approximationsalgorithmen konstanter Güte
Satz 4.9
Sei δ ∈ Q+ mit δ > 1. Dann gilt:
• Aus P 6= NP folgt, dass es keinen Approximationsalgorithmus konstanter Güte für das Minimierungsproblem MinTravelingSalesman
gibt, der den Approximationsfaktor δ hat.
Beweis. Wir nehmen an, dass es einen Approximationsalgorithmus A konstanter
Güte für MinTravelingSalesman gibt, der den Approximationsfaktor δ hat. Wie
wir gleich sehen, folgt aus dieser Annahme, dass das NP-vollständige Entscheidungsproblem HamiltonCircle zu P gehört.
Sei ein ungerichteter Graph G = (V, E) als Instanz I von HamiltonCircle gegeben.
Um zu entscheiden, ob G eine ‘Ja’-Instanz von HamiltonCircle ist, verwenden wir
den folgenden Algorithmus:
Algorithmus Lösungsalgorithmus B für HamiltonCircle
Eingabe: Instanz G = (V, E) mit |V | = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
E 0 := {{u, v} | v, v 0 ∈ V, v 6= v 0 };
G0 := (V, E 0 );
forall e0 ∈ E 0 do
if e0 ∈ E then
g 0 (e0 ) := 1;
else
g 0 (e0 ) := δ · n;
fi
od
I 0 := (G0 , g 0 );
K 0 := A(I 0 );
if w(K 0 ) = n then
return 0 true0 ;
else
return 0 false0 ;
fi
Man beachte, dass der anhand von G konstruierte Graph G0 ein vollständiger
Graph ist. Ferner garantiert die Wahl der Gewichtsfunktion g, dass jeder Kanten
in G0 ein Gewicht aus + zugeordnet wird. Folglich ist I 0 = (G, g) eine Instanz
von MinTravelingSalesman.
Q
Da A ein Approximationsalgorithmus ist und damit jede Instanz von I 0 von MinTravelingSalesman effizient verarbeitet, folgt unmittelbar, dass B ebenfalls ein
effizienter Algorithmus. Man beachte hierbei, dass |I 0 | ≤ c · |I 2 | für eine geeignet
gewählte Konstante c ≥ 1 gilt.
Es bleibt zu zeigen, dass B eine Lösungsalgorithmus für HamiltonCircle ist.
Wir beginnen mit der folgenden Beobachtung:
4.2 Nichtapproximierbarkeitsergebnisse
Seite 63
Beobachtung. Wenn es im Graphen G einen Hamiltonschen Kreis K gibt, so muss
A bei Eingabe von I 0 = (G0 , g) einen Hamiltonschen Kreis K 0 mit w(K 0 ) = n
ausgeben.
Begründung: Sei K ein Hamiltonscher Kreis im gegebenen Graphen G. Dann ist
K auch ein Hamiltonscher Kreis im Graphen G0 = (V, E 0 ), und zwar einer der
Güte w0 (K) = n. Wir nehmen nun an, dass A einen Hamitonschen Kreis K 0 mit
w(K 0 ) 6= n ausgibt. Dann muss in K 0 mindestens eine Kante e0 benutzt werden,
die nicht zur Kantenmenge des gegebenen Graphen G gehört. Also gilt w0 (K 0 ) ≥
w(A(I 0 ))
(n − 1) + n · δ > n · δ und damit auch δA (I 0 ) = w(Opt(I
0 )) > δ. Folglich kann A
kein Approximationsalgorithmus konstanter Güte für das Optimierungsproblem
MinTravelingSalesman sein, der den Approximationsfaktor δ hat.
Dass B die Frage, ob G eine ‘Ja’-Instanz von HamiltonCircle ist, korrekt beantwortet, sieht man wie folgt.
Fall 1. B beantwortet die Frage mit ’false’.
Aus der Kontraposition der obigen Beobachtung, folgt sofort, dass es in G keinen
Hamitonschen Kreis geben kann. Also ist die Antwort korrekt.
Fall 2. B beantwortet die Frage mit ’true’.
Also gibt es einen Hamiltonschen Kreis K 0 im Graphen G0 mit w(K 0 ) = n. Da
K 0 nur Kanten benutzt, die es auch im gegeben Graphen G gibt, muss es in G
ebenfalls einen Hamiltonschen Kreis geben. Also ist die Antwort korrekt.
Wir kommen jetzt noch einmal auf das Optimierungsproblem MinBinPacking aus
Kapitel 1 zurück und zeigen, dass es für dieses Minimierungsproblem höchstwahrscheinlich keinen Approximationsalgorithmus konstanter Güte gibt, der
einen Approximationsfaktor kleiner 32 hat.
Bei MinBinPacking geht es darum, gegebene Objekte bestimmter Größe so in Behälter einer festen Größe einzupacken, dass die Anzahl der benötigten Behälter
minimal ist.
Optimierungsproblem MinBinPacking
Eingabe: Instanz I = (O, s, b)
Ausgabe: zulässige Lösung B = (B1 , . . . , Bk ) minimaler Güte für die Instanz I
Es sei daran erinnert, dass B = (B1 , . . . , Bk ) eine Zerlegung von O ist, wobei jede
Menge Bi Objekte mit einer Gesamtgröße kleiner gleich b enthält, und dass die
Güte von B der Anzahl der Mengen in dieer Zerlegung entspricht.
Wir beweisen jetzt das angekündigte Nichtapproximierbarkeitsresultat.
Satz 4.10
Sei δ ∈ Q+ mit δ < 32 . Dann gilt:
• Aus P 6= NP folgt, dass es keinen Approximationsalgorithmus konstanter Güte für das Minimierungsproblem MinBinPacking gibt, der
den Approximationsfaktor δ hat.
S
Seite 64
Kapitel 4 Approximationsalgorithmen konstanter Güte
Beweis. Wir nehmen an, dass es einen Approximationsalgorithmus A konstanter
Güte für MinBinPacking gibt, der den Approximationsfaktor δ hat. Wie wir gleich
sehen, folgt aus dieser Annahme, dass das NP-vollständige Entscheidungsproblem Partition (siehe Kapitel 3) zu P gehört.
Sei eine Instanz I = (O, s) von Partition gegeben. Um zu entscheiden, ob I eine
‘Ja’-Instanz von Partition ist, verwenden wir den folgenden Algorithmus:
Algorithmus Lösungsalgorithmus C für Partition
Eingabe: Instanz I = (O, s)
P
1
b := 21 · o∈O s(o);
2
I 0 := (O, s, b);
3
B 0 = A(I 0 );
4
if w(B 0 ) < 3 then
5
return 0 true0 ;
6
else
7
return 0 false0 ;
8
fi
Da A ein Approximationsalgorithmus ist und damit jede Instanz von I 0 von MinBinPacking effizient verarbeitet, folgt unmittelbar, dass C ebenfalls ein effizienter
Algorithmus. Man beachte hierbei, dass |I 0 | ≤ c · |I| für ein geeignet gewähltes
c ≥ 1 gilt.
Es bleibt zu zeigen, dass C eine Lösungsalgorithmus für Partition ist.
Wir beginnen mit der folgenden Beobachtung:
Beobachtung. Wenn I = (O, s) eine ’Ja’-Instanz von Partition ist, so hat die optimale Lösung der Instanz I’ von MinBinPacking die Güte 2.
Begründung: Sei I = (O, s) eine ’Ja’-Instanz von Partition. Dann gibt es eine Zerlegung von O in zwei Teilmengen O1 und O2 mit der gleichen Gesamtgröße. Also
können alle Objekte aus O1 und alle aus O2 jeweils in einen Behälter eingepackt
werden. Da die Objekte aus O nicht alle in einer Behälter passen, folgt die Behauptung.
Dass C die Frage, ob G eine ‘Ja’-Instanz von Partition ist, korrekt beantwortet,
sieht man wie folgt.
Fall 1. C beantwortet die Frage mit ’true’.
Also können alle Objekte aus O in zwei Behälter der Größe b eingepackt werden.
Diese beiden Behälter müssen aufgrund der Wahl von b vollständig gefüllt sein.
Folglich lässt sich O in zwei Teilmengen zerlegen, die die selbe Gesamtgröße haben.
Fall 2. C beantwortet die Frage mit ’false’.
Wir nehmen an, dass I eine ‘Ja’-Instanz von Partition ist. Dann folgt aus der obigen Beobachtung, dass w(Opt(I 0 )) = 2 für die optimale Lösung der Instanz I’ von
MinBinPacking gilt. Da für die von C bestimmte Lösung B 0 offenbar w(B 0 ) ≥ 3
w(A(I 0 ))
3
gilt, folgt δA (I 0 ) = w(Opt(I
0 )) ≥ 2 . Folglich kann A kein Approximationsalgorithmus konstanter Güte für MinBinPacking sein, der einen Approximationsfaktor
δ < 23 hat.
Kapitel 5 Approximationsschemata
Seite 65
Kapitel 5 Approximationsschemata
Im letzten Kapitel haben wir für einige ausgewählte NP-schwere Optimierungsprobleme Approximationsalgorithmen konstanter Güte kennengelernt. Außerdem haben wir gesehen, dass es für einige dieser Probleme gar keine Approximationsalgorithmen konstanter Güte gibt bzw. nur solche, deren Approximationsfaktor einen bestimmten Schwellwert nicht über- bzw. unterschreitet. In diesem
Kapitel beschäftigen wir uns nun mit "leichteren" NP-schweren Optimierungsproblemen, und zwar solchen, die sich beliebig gut approximieren lassen.
Definition 5.1
Sei Π ein Optimierungsproblem. Dann heißt Π beliebig gut approximierbar,
wenn es eine Familie (Aε )ε>0 von Algorithmen gibt, so dass für alle ε > 0
gilt:
• Wenn Π ein Maximierungsproblem ist, so ist Aε ein Approximationsalgorithmus konstanter Güte für Π mit dem Approximationsfaktor 1−ε,
• Wenn Π ein Minimierungsproblem ist, so ist Aε ein Approximationsalgorithmus konstanter Güte für Π mit dem Approximationsfaktor 1+ε.
Eine Familie (Aε )ε>0 von Algorithmen, die Definition 5.1 genügt, nennt man Approximationsschema für Π. Hinter dem Begriff Familie verbirgt sich die Vorstellung, dass sich alle Algorithmen uniform beschreiben lassen.
Definition 5.1 berücksichtigt, dass Approximationsalgorithmen mit einem besseren Approximationsfaktor in der Regel längere Laufzeiten haben. Sie läßt jedoch
auch zu, dass die in einem Approximationsschema zusammengefassten Algorithmen die Eigenschaft haben, dass jeder Approximationsalgorithmus Aε bspw.
1
O(|I| ε ) Rechenschritte zur Verarbeitung einer Instanz I des zu lösenden Optimierungsproblems benötigt. Da ε eine Konstante ist, ist dann Aε per Definition immer
noch effizient, d.h. die Laufzeit von Aε ist polynomiell in der Größe der Eingabe
beschränkt. Algorithmen mit einer solchen Laufzeit sind jedoch eher von akademischen Interesse, da sie – zumindest für kleine ε – schlicht zu langsam sind.
Es sei angemerkt, dass wir in Kapitel 6 eine andere Version des Begriffs Approximationsschema diskutieren, der die eben addressierte Schwäche kompensiert. In
dieser Version wird gefordert dass die Laufzeit jedes einzelnen Approximationsalgorithmus Aε nicht nur polynomiell in der Größe der zu verarbeitenden Instanz,
sondern auch polynomiell in 1ε beschränkt ist
5.1 Ein Job-Scheduling-Problem
Wir beschäftigen uns jetzt noch einmal mit dem in Kapitel 4 vorgestellte Optimierungsproblem MinJobScheduling. In diesem Abschnitt betrachten wir nur den
Fall, dass die Anzahl der Maschinen, auf die die auszuführenden Jobs zu verteilen sind, konstant ist. Hintergrund ist, dass die Laufzeitanforderung an die in einem Approximationschema zusammengefasten Algorithmen in diesem Fall wesentlich moderater sind.
D
Seite 66
E
Kapitel 5 Approximationsschemata
Exkurs 5.1
Es sei daran erinnert, dass das Optimierungsproblem MinJobScheduling
wie folgt formuliert ist:
Optimierungsproblem MinJobScheduling
Eingabe: Instanz I = (M, J, t) mit |M | = m und |J| = n
Ausgabe: zulässiger Schedule S mit minimaler Güte für die Instanz I
Um eine Instanz I dieses Minimierungsproblems zu kodieren, reicht es die
Zahl m und eine Liste der Länge n anzugeben, die für jeden Job Jj ∈ J die
Zahl t(Jj ) enthält. Da man nur den Platz |bin(m)| benötigt, um die Zahl m zu
kodieren, muss die Laufzeit eines Approximationsalgorithmus für MinJobScheduling polynomiell in |bin(m)| und n beschränkt sein. Wenn – wie bei
Min-m-MaschinenJobScheduling – die Anzahl der zur Verfügung stehenden Maschinen konstant ist, ist es hingegen ausrreichend, wenn die Laufzeit
polynomiell in n beschränkt ist.
Formal ist das Minimierungsproblem Min-m-MaschinenJobScheduling für jedes
m ∈ mit m ≥ 2 wie folgt beschrieben:
N
Optimierungsproblem Min-m-MaschinenJobScheduling
Eingabe: Instanz I = (J, t) mit |J| = n ≥ m
Ausgabe: zulässiger Schedule S mit minimaler Güte für die Instanz I
Man beachte, dass es mindestens so viele auszuführende Jobs wie zur Verfügung
stehende Maschinen gibt. Andernfalls ist das resultierende Maschinenbelegungsproblem trivial lösbar. (Auf jeder Maschine wird – wenn überhaupt – genau ein
Job ausgeführt.) Den Fall, dass es nur eine Maschine gibt, ist aus den selben Gründen ausgeschlossen worden.
N
Sei k ∈ . Der folgende Algorithmus ist ein Approximationsalgorithmus für Minm-MaschinenJobScheduling mit der Approximationsgüte 1 + m−1
k .
Algorithmus SortedListSchedule_k für Min-m-MaschinenJobScheduling
Eingabe: Instanz I = (J, t) mit |J| = n ≥ m
1
2
3
4
5
6
7
8
9
10
11
12
Bestimme die bzgl. ihrer Laufzeit absteigend sortierte Reihenfolge
J10 , . . . , Jn0 der Jobs in J.
J 0 = {J10 , . . . , Jk0 };
Bestimme einen optimalen Schedule S 0 für die Instanz I 0 := (J 0 , t).
for i := 1 to m do
Bestimme den minimalen Zeitpunkt ai , zu dem die Maschine Mi
wieder frei ist, d.h. alle im Schedule S 0 auf dieser Maschine verteilten Jobs sind bereits vollständig ausgeführt.
od
for j := k + 1 to n do
Bestimme das kleinste i mit ai = min{ak | 1 ≤ k ≤ m}.
z(Jj0 ) := i;
s(Jj0 ) := ai ;
ai := ai + t(Jj0 );
od
5.1 Ein Job-Scheduling-Problem
Seite 67
Offenbar genügen O(mk ) Rechenschritte, um einen optimalen Schedule für die
k Jobs der Instanz I mit den größten Ausführungszeiten zu bestimmen. (Es
reicht, die Güte aller überhaupt möglichen mk Schedules zu bestimmen und einen
mit minimaler Güte auszuwählen.) Folglich benötigt SortedListSchedule_k nur
O(mk ) + O(n · log(n)) Rechenschritte, um die Instanz I zu verarbeiten.
Satz 5.1
S
SortedListSchedule_k ist ein Approximationsalgorithmus konstanter Güte für Min-m-MaschinenJobScheduling, welcher den Approximationsfaktor
1 + m−1
k hat.
Beweis. Sei I = (J, t) mit |J| = n die gegebene Instanz, Opt(I) ein optimaler Schedule und S = (z, s) der von SortedListSchedule_k bestimmt Schedule für I. Ferner sei J10 , . . . , Jn0 die verwendete Sortierung der Jobs in J und Jl0 derjenige Job im
Schedule S, der als letzter beendet wird, d.h. es gilt w(S) = s(Jl0 ) + t(Jl0 ).
Wir unterscheiden die folgende zwei Fälle:
Fall 1. l ≤ k.
Dann ist Jl0 unter den Jobs im optimalen Schedules S 0 für die Instanz I 0 , was sofort
w(S) = w(opt(I)) impliziert.
Fall 2. l > k.
Wir beginnen mit einigen Vorüberlegungen.
Sei T die Gesamtlaufzeit aller auszuführenden Jobs, d.h. T :=
Pn
j=1
t(Jj0 ).
Da m identische Maschinen zur Verfügung stehen und Jobs mit der Gesamtlaufzeit T auszuführen sind, erhalten wir die folgende untere Schranke für die Güte
des optimalen Schedules:
1
· T ≤ w(Opt(I)).
m
Wir behaupten nun, dass folgende Beobachtung korrekt ist:
Beobachtung. Es gilt s(Jl0 ) ≤
1
m
· T 0 für T 0 := T − t(Jl0 ).
Begündung: Wir betrachten zunächst den Fall, dass alle Jobs mit Ausnahme des
Jobs Jl0 auf den zur Verfügung stehenden Maschinen auszuführen sind, und zwar
so, dass jede Maschine durchgehend ausgelastet ist. Offenbar ist die durchschnitt1
· T 0 . Folglich muss es eine Maschine,
liche Laufzeit dieser Maschinen genau m
1
etwa Mi , geben, deren Gesamtlaufzeit kleiner gleich m
· T 0 ist.
Kehren wir nun zu dem eigentlich interessierenden Fall zurück, dass alle Jobs auf
die zur Verfügung stehenden Maschinen aufzuteilen sind. Da zur Ausführung des
Jobs Jl0 eine Maschine ausgewählt, wird deren bisherige Gesamtlaufzeit minimal
ist, muss entweder die Maschine Mi oder eine Maschine Mi0 mit einer geringen
bisherigen Gesamtlaufzeit für den Job Jl0 ausgewählt werden. Da zum Zeitpunkt,
0
zu dem für Jl0 eine Maschine ausgewählt wird, bisher nur die Jobs J10 bis Jl−1
ver0
teilt wurden und alle Maschinen durchgehend ausgelastet sind, muss s(Jl ) kleiner
Seite 68
Kapitel 5 Approximationsschemata
gleich der Gesamtlaufzeit der Maschine Mi im oben betrachteten Fall sein. Also
folgt die Beobachtung.
Pn
Wegen w(S) = s(Jl0 ) + t(Jl0 ), T = j=1 t(Jj0 ) und T 0 = T − t(Jl0 ) ergibt sich aus
der obigen Beobachtung:


n
n
X
1 
1 X
1
·
·
· t(Jl0 ).
w(S) ≤
t(Jj ) − t(Jl0 ) + t(Jl0 ) =
t(Jj0 ) + 1 −
m
m
m
j=1
j=1
Zusammen mit der abgeleiteten unteren Schranke für w(Opt(I)) folgt:
1
m−1
0
w(S) ≤ w(Opt(I)) + 1 −
· t(Jl ) = w(Opt(I)) +
· t(Jl0 ).
m
m
Man beachte nun, dass l > k impliziert, dass t(Jj0 ) ≥ t(Jl0 ) für alle j mit 1 ≤ j ≤ k
gilt. Also folgt aus der abgeleiteten unteren Schranke für w(Opt(I)) andererseits
auch:
w(Opt(I)) ≥
n
k
k
1 X
1 X
k
1 X
·
·
·
· t(Jl0 ).
t(Jj0 ) ≥
t(Jj0 ) ≥
t(Jl0 ) =
m j=1
m j=1
m j=1
m
k
Da w(Opt(I)) ≥ m
· t(Jl0 ) auch t(Jl0 ) ≤ m
k · w(Opt(I)) impliziert, ergibt sich aus
den letzten beiden Ungleichungen:
m
m−1
m−1
·
· w(Opt(I)).
w(S) ≤ w(Opt(I)) +
· w(Opt(I)) = 1 +
m
k
k
Das Hauptergebnis dieses Abschnitts kann nun wie folgt formuliert werden.
S
Satz 5.2
Es gibt ein Approximationsschema (Aε )ε>0 für das Minimierungsproblem
Min-m-MaschinenJobScheduling.
Beweis. Sei ε > 0 gegeben und I = (J, t) mit |J| = n die betrachtete Instanz von
Min-m-MaschinenJobScheduling.
m−1
Sei o.B.d.A. d m−1
ε e < n. (Wenn d ε e > n ist, wird direkt eine optimale Lösung
bestimmt. Hierfür genügt es, unter allen möglichen Schedules einen besten auszuwählen. Da es nur mn viele Schedules gibt und n ≥ m gilt, genügen auf jeden
1
Fall O(nn ) Rechenschritte, und damit auch O(nc· ε ) Rechenschritte, wobei c eine
geeignet gewählte Konstante ist.)
Wir setzen k := d m−1
ε e und verwenden SortedListSchedule_k, um eine Lösung
für die Instanz I zu bestimmen, d.h. Aε entspricht dem Algorithmus SortedListSchedule_k.
5.2 Das Maximale-Teilsummen-Problem
Aus Satz 5.1 folgt sofort, dass Aε den Approximationsfaktor 1 + ε hat. (Beachte,
dass 1 + dm−1
≤ 1 + m−1
m−1 = 1 + ε gilt.)
m−1
e
ε
ε
Da SortedListSchedule_k nur O(mk ) + O(n · log(n)) Rechenschritte benötigt, um
1
seine Lösung zu bestimmen, benötigt Aε nur O(mc· ε )+O(n·log(n)) Rechenschritte, wobei c wieder eine geeignet gewählte Konstante ist.
Es sei angemerkt, dass unser Approximationschema für das Minimierungsproblem Min-m-MaschinenJobScheduling eher akademischer Natur. Wenn m = 10
und ε = 10−1 ist, wird SortedListSchedule_k für ein k ≥ 90 ausgewählt. Daher
fallen beim Bestimmen eines optimalen Schedules für die k Jobs mit den größten
Ausführungszeiten allein ca. O(1090 ) Rechenschritte an.
Zum Abschluss dieses Abschnittes sei darauf hingewiesen, dass es auch Approximationsschemata für die allgemeine Variante des betrachteten Minimierungsproblems, also für MinJobScheduling gibt (siehe bspw. Jansen and Margraf [2008]).
5.2 Das Maximale-Teilsummen-Problem
In diesem Abschnitt beschäftigen wir uns noch einmal mit dem Maximierungsproblem MaxSubsetSum (siehe Kapitel 1).
Eine Instanz I = (O, s, b) des Optimierungsproblems MaxSubsetSum ist gegeben
durch:
• eine endliche Menge O von Objekten,
• eine Funktion s, die jedem Objekt o aus O seine Größe zuordnet, also eine
Zahl aus Q+ zuordnet,
• eine Zahl b aus Q+ , wobei s(o) ≤ b für alle o ∈ O gilt.
Eine Teilmenge S ⊆ O ist eine Lösung für die Instanz I, falls S eine Gesamtgröße
kleiner gleichP
b hat. Die Güte von S entspricht der Gesamtgröße der Objekte in S,
d.h. w(S) := o∈S s(o).
Wir schauen uns jetzt an, dass es zu jedem ε > 0 einen Approximationsalgorithmus konstanter Güte für MaxSubsetSum gibt, der den Approximationsfaktor 1−ε
hat. Dazu sind folgende Vorüberlegungen wichtig.
Zunächst errinnern wir daran, dass wir bereits einen Approximationsalgorithmus
konstanter Güte für dieses Maximierungsproblem kennen (siehe Kapitel 1), der
den Approximationsfaktor 12 hat.
Algorithmus Greedy für MaxSubsetSum
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
7
Bestimme die bzgl. ihrer Größe absteigend sortierte Reihenfolge
o01 , . . . , o0n der Objekte in O.
S := ∅;
g := 0;
for i := 1 to n do
if g + s(o0i ) ≤ b then
g := g + s(o0i );
S := S ∪ {o0i };
Seite 69
Seite 70
Kapitel 5 Approximationsschemata
8
9
10
fi
od
return S;
Diesen Algorithmus kann man nun recht einfach modifizieren, um einen besseren
Approximationsalgorithmus zu erhalten. Bevor wir uns mit den Details befassen,
schauen wir uns zunächst ein kleines Beispiel an, das die Schwächen von Greedy
aufzeigt.
B
Beispiel 5.1
Sei O = {o1 , o2 , o3 , o4 , o5 } mit s(o1 ) = 10, s(o2 ) = 6, s(o3 ) = 5, s(o4 ) = 4 und
s(o5 ) = 3 sowie b = 12.
Offenbar bestimmt Greedy die Lösung S = {o1 } mit der Güte 10.
Wenn statt des Objektes o1 das Objekt o2 in die Lösung aufgenommen und
diese Teillösung anschließend mit Hilfe von Greedy sukzessive erweitert
wird, erhält man die Lösung S 0 = {o2 , o3 } mit der Güte 11.
Wird jedoch anstelle des Objekts o1 das Objekt o3 in die Lösung aufgenommen und diese anschließend mit Hilfe von Greedy sukzessive erweitert wird,
erhält man sogar die optimale Lösung S 0 = {o3 , o4 , o5 } der Güte 12.
Das Beispiel zeigt, dass es nicht immer vorteilhaft ist, dass größte Objekt in die
Lösung aufzunehmen. Besser ist es, für jedes infrage kommende Objekt auszurechnen, welche Lösung Greedy unter der Annahme bestimmt, dass dieses Objekt
Teil der Lösung ist, und unter allen so berechneten Lösungen eine beste auszuwählen.
Algorithmus Greedy_1 für MaxSubsetSum
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bestimme die bzgl. ihrer Größe absteigend sortierte Reihenfolge
o01 , . . . , o0n der Objekte in O.
for i := 1 to n do
Ti := {o0i };
od
for i := 1 to n do
bi := b − s(o0i );
Bestimme das kleinste j > i mit s(o0j ) ≤ bi ;
Oi := {o0j , . . . , o0n };
Ii := (Oi , s, bi );
Si := Greedy(Ii );
Si0 := Ti ∪ Si ;
od
Bestimme das kleinste i mit w(Si0 ) = max{w(Sk0 ) | 1 ≤ k ≤ n}.
S := Si0 ;
return S;
Man kann kann sich wieder überlegen, dass Greedy_1 effizient arbeitet. Offenbar
werden O(n · log(n)) + O(n · (n · log(n)) + n) Rechenschritte benötigt, um eine
Instanz I = (O, s, b) mit |O| = n zu verarbeiten.
5.2 Das Maximale-Teilsummen-Problem
Seite 71
Satz 5.3
S
Greedy_1 ist ein Approximationsalgorithmus konstanter Güte für MaxSubsetSum mit dem Approximationsfaktor 23 .
Beweis. Sei I = (O, s, b) die betrachtete Instanz von MaxSubsetSum und Opt(I)
die zugehörige optimale Lösung. Ferner sei o01 , . . . , o0n die benutzte Sortierung der
Objekte in O sowie S die von Greedy_1 bestimmte Lösung.
Wir unterscheiden zwei Fälle.
Fall 1. Opt(I) enthält genau ein Objekt.
Sei Opt(I) = {o0i }. Für die anhand der Teillösung Ti bestimmte Lösung S gilt
offenbar w(i) ≥ w(Ti ). Damit gilt natürlich auch w(S) ≥ w(Opt(I)) und Greedy_1
hat in diesem Fall sogar eine optimale Lösung bestimmt.
Fall 2. Opt(I) enthält mehr als ein Objekt.
Sei nun o0i das erste (und damit ein größtes) Objekt in Opt(I). Sei wieder Ti = {o0i }.
Da Greedy_1 unter allen überhaupt bestimmten Lösungen eine mit maximaler Güte auswählt, genügt es zu zeigen, dass für die anhand der Teillösung Ti bestimmte
Lösung Si0 bereits w(Si0 ) ≥ 23 · w(Opt(I)) gilt.
Um letzteres zu beweisen, tragen wir ein zunächst ein paar Fakten zusammen.
Sei Ii = (Oi , s, bi ) die anhand der Teillösung Ti bestimmte Instanz von MaxSubsetSum sowie Si die von Greedy bestimmte Lösung für diese Instanz und Opt(Ii )
eine zugehörige optimale Lösung.
Fakt 1. w(Opt(I)) = w(Ti ) + w(Opt(Ii )).
Begründung. Das liegt daran, dass in Opt(I) kein Objekt o0j mit j < i vorkommt,
d.h. Opt(I) kann zusätzlich nur Objekte aus Oi enthalten.
Fakt 2. w(Si ) ≥
1
2
· w(Opt(Ii )).
Begründung. Das liegt daran, dass Greedy den Approximationsfaktor
Kapitel 1).
1
2
hat (siehe
Fakt 3. w(Si0 ) = w(Ti ) + w(Si ).
Begründung. Das folgt unmittelbar daraus, dass Si0 = Ti ∪ Si gilt.
Wir unterscheiden jetzt die folgenden Unterfälle:
Fall 2.1. w(Ti ) ≥
1
3
· w(Opt(I)).
Aus Fakt 2 und Fakt 3 folgt: w(Si0 ) ≥ w(Ti ) +
1
2
· w(Opt(Ii )).
Zusammen mit Fakt 1 erhalten wir w(Si0 ) ≥ w(Ti ) +
Also gilt auch w(Si0 ) ≥
1
2
· (w(Opt(I)) + w(Ti )).
1
2
· (w(Opt(I)) − w(Ti )).
Seite 72
Kapitel 5 Approximationsschemata
Aus w(Ti ) ≥ 31 · w(Opt(I)) folgt also w(Si0 ) ≥
damit auch w(Si0 ) ≥ 32 · w(Opt(I)).
Fall 2.2. w(Ti ) <
1
3
1
2
· w(Opt(I)) +
1
3
· w(Opt(I)) , und
· w(Opt(I)).
Offenbar gilt dann auch s(o00 ) <
1
3
· w(Opt(I)) für alle o00 ∈ Oi .
Sei nun o00j , . . . , o00n die von Greedy benutzte Sortierung der Objekte in Oi . Weiterhin sei o00z das erste Objekt in dieser Sortierung, das Greedy bei Verarbeitung der
Instanz Ii0 nicht in seine Lösung Si aufgenommen hat. (Wenn es ein solches Objekt
nicht gibt, würde w(Si ) = bi gelten. Daraus folgt sofort w(Si ) = w(Opt(Ii )) sowie
w(Opt(Ii )) ≤ w(Si ) + 31 · w(Opt(I)). Also lässt sich die folgende Argumentation
auch in diesem Fall verwenden.)
Da Greedy das Objekt o00z nicht in seine Lösung Si aufgenommen hat, muss
w(Opt(Ii )) ≤ bi ≤ w(Si ) + s(o00z ) gelten. Da insbesondere s(o00z ) < 13 · w(Opt(I))
gilt, folgt daraus w(opt(Ii )) ≤ w(Si ) + 31 · w(Opt(I)).
Zusammen mit Fakt 1 ergibt sich w(Opt(I)) ≤ w(Ti ) + w(Si ) + 13 · w(Opt(I)).
Unter Benutzung von Fakt 3 folgt nun w(Opt(I)) ≤ w(Si0 ) + 31 · w(Opt(I)), was
unmittelbar w(Si0 ) ≥ 23 · w(Opt(I)) impliziert.
Die eben verwendete Idee kann man nun einfach verallgemeinern. Um für jedes
k ∈ einen Approximationsalgorithmus mit dem Approximationsfaktor k+1
k+2 anzugeben, geht man wie folgt vor:
N
• Für jede infrage kommende Teilmenge von O mit maximal k Elementen
wird ausgerechnet, welche Lösung Greedy unter der Annahme bestimmt,
dass diese Objekte bereits Teil der Lösung sind.
• Anschließend wird unter allen so berechneten Lösungen eine beste ausgewählt.
Algorithmus Greedy_k für MaxSubsetSum
Eingabe: Instanz I = (O, s, b) mit |O| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Bestimme die bzgl. ihrer Größe absteigend sortierte Reihenfolge
o01 , . . . , o0n der Objekte in O.
Bestimme die Menge M aller Teilmengen von O mit maximal k
Elementen.
forall Ti ∈ M do
bi := b − w(Ti );
if bi ≥ 0 then
Bestimme das maximale z mit o0z ∈ Ti .
Bestimme das kleinste j > z mit s(oj ) ≤ bi .
Oi := {o0j , . . . , o0n };
Ii := (Oi , s, bi );
Si := Greedy(Ii );
Si0 := Ti ∪ Si ;
else
Si0 := ∅;
fi
od
Bestimme das kleinste i mit w(Si0 ) = max{w(Sk0 ) | 1 ≤ k ≤ n}.
S := Si0 ;
return S;
5.2 Das Maximale-Teilsummen-Problem
Seite 73
Dass Greedy_k den Approximationsfaktor k+1
k+2 hat, kann man zeigen, indem man
die selben Argumente wie im Beweis von Satz 5.3 verwendet. (Man beachte, dass
k
k
nun die beiden Fälle w(T ) ≥ k+2
· w(opt(I)) und w(T ) < k+2
· w(opt(I)) zu betrachten sind.) Dass Greedy_k ein effizienter Algorithmus ist, basiert auf folgender
Beobachtung.
N
Lemma 5.1. Seien n, k ∈
mit k ≤ n und O eine Menge mit n Objekten. Ferner sei
M die Menge aller Teilmengen von O, die maximal k Elemente enthalten. Dann gilt:
• M enthält O(nk+1 ) viele Teilmengen.
• M kann in O(nk+1 ) vielen Rechenschritten bestimmt werden.
n!
Teilmengen von O der
Beweis. Sei i ≤ k. Offenbar gibt es genau ni := i!·(n−i)!·
i
Größe i, also nur O(n ) viele. Folglich enthält die Menge M höchstens O(nk+1 )
Pk
viele Teilmengen, da i=1 O(ni ) ∈ O(n · nk ) gilt.
Wie man alle Teilmengen in der Menge M in O(nk+1 ) vielen Rechenschritten bestimmen kann, kann man bspw. in Knuth [2009] nachlesen.
Aus Lemma 5.1 folgt unmittelbar, dass Greedy_k effizient arbeitet. Dieser Algorithmus benötigt O(n·log(n))+O(nk+1 )+O(nk+1 ·(n·log(n))+n)) Rechenschritte
(oder kompakter: O(nk+2 · log(n)) Rechenschritte), um eine Instanz I = (O, s, b)
mit |O| = n zu verarbeiten.
Wir erhalten also:
Satz 5.4
S
Greedy_k ist ein Approximationsalgorithmus konstanter Güte für MaxSubsetSum mit dem Approximationsfaktor k+1
k+2 .
Dieses Ergebnis kann nun benutzt werden, um das Hauptresultat dieses Abschnitts zu beweisen:
Satz 5.5
Es gibt ein Approximationsschema (Aε )ε>0 für das Maximierungsproblem
MaxSubsetSum.
Beweis. Sei ε > 0 gegeben und I = (O, s, b) mit |O| = n die betrachtete Instanz
von MaxSubsetSum
Sei o.B.d.A. d 1ε e−2 < n. (Falls d 1ε e−2 ≥ n gilt, wird direkt eine optimale Lösung bestimmt. Hierzu genügt es, unter allen Teilmengen von O eine beste auszuwählen.
Da es nur 2n viele Teilmengen gibt, genügen auf jeden Fall O(nn ) Rechenschritte.
1
Da im betrachteten Fall 1ε ≥ n gilt, genügen deshalb O(n ε ) Rechenschritte.)
Wir setzen k := d 1ε e − 2 und benutzen Greedy_k, um eine Lösung für die Instanz I
zu bestimmen, d.h. Aε entspricht dem Algorithmus Greedy_k.
S
Seite 74
Kapitel 5 Approximationsschemata
Aus Satz 5.4 folgt dass Aε den Approximationsfaktor 1 − ε hat. (Beachte, dass
d 1ε e−1
d 1ε e
=1−
1
d 1ε e
≥1−
1
1
ε
= 1 − ε gilt.)
Da Greedy_k wie gesehen nur O(nk+2 · log(n)) Rechenschritte benötigt, um seine
1
Lösung zu bestimmen, benötigt der Algorithmus Aε nur O(nc· ε · log(n)) Rechenschritte, wobei c eine geeignet gewählte Konstante ist.
Es sei wieder angemerkt, dass das vorgestellte Approximationschema eher akademischer Natur ist. Wenn n = 100 und ε = 10−2 ist, wird etwa der Algorithmus
Greedy_k mit k = 98 ausgewählt. Also sind ca. 10098 Teilmengen zu bestimmen,
was garantiert nicht in praktisch vertretbarer Zeit funktioniert.
Kapitel 6 Vollständige Approximationsschemata
Seite 75
Kapitel 6 Vollständige Approximationsschemata
Wie in Kapitel 5 angekündigt, widmen wir uns jetzt einer Variante des Begriffs
Approximationsschema, bei dem die Anforderungen an die Rechenzeit der mit
diesem Schema zusammengefassten Algorithmen verschärft werden.
Definition 6.1
Sei Π ein Optimierungsproblem. Dann heißt Π vollständig approximierbar,
wenn es eine Familie (Aε )ε>0 von Algorithmen gibt, so dass für alle ε > 0
gilt:
• Wenn Π ein Maximierungsproblem ist, so ist Aε ein Approximationsalgorithmus konstanter Güte für Π mit dem Approximationsfaktor 1−ε,
dessen Rechenzeit polynomiell von der Größe der zu verarbeitenden
Instanz von Π und von 1ε abhängt.
• Wenn Π ein Minimierungsproblem ist, so ist Aε ein Approximationsalgorithmus konstanter Güte für Π mit dem Approximationsfaktor 1+ε,
dessen Rechenzeit polynomiell von der Größe der zu verarbeitenden
Instanz von Π und von 1ε abhängt. .
Eine Familie (Aε )ε>0 von Algorithmen, die Definition 6.1 genügt, nennt man vollständiges Approximationsschema für Π.
Definition 6.1 berücksichtigt ebenfalls, dass Approximationsalgorithmen mit einem besseren Approximationsfaktor in der Regel längere Laufzeiten haben. Die
Laufzeitanforderungen sind im Gegensatz zu Definition 5.1 so formuliert, dass
die in einem vollständigen Approximationsschema zusammengefassten Algorithmen jedoch auch für kleine ε noch eine akzeptable Laufzeit haben.
In diesem Kapitel beschätigen wir uns zunächst mit dem NP-schweren Optimierungsproblem MaxKnapsack und zeigen, dass es für dieses Problem ein vollständiges Approximationsschema gibt. Es sei angemerkt, dass deshalb auch das Maximierungsproblem MaxSubsetSum (siehe Kapitel 1 und 5) vollständig approximierbar ist. Im Anschluss werden wir analysieren, welche Eigenschaften ein NPschweres Optimierungsproblem notwendigerweise haben muss, damit es vollständig approximierbar ist.
6.1 Das Rucksackproblem
Beim Rucksackproblem geht es darum, aus einer Menge von n Obkjekten, denen
jeweils eine Größe und ein bestimmter Gewinn zugeordnet ist, Objekte auszuwählen, die in einen Rucksack vorgegebener Größe passen und einen möglichst
großen Gesamtgewinn haben.
Formal wird eine Instanz des Optimierungsproblems MaxKnapsack durch ein
Viertupel I = (O, s, p, b) beschrieben, wobei gilt:
• O = {o1 , . . . , on } ist eine Menge von n Objekten,
• s ist eine Funktion, die jedem Objekt in O seine Größe, also eine Zahl aus
Q+ zuordnet,
D
Seite 76
Kapitel 6 Vollständige Approximationsschemata
• p ist eine Funktion, die jedem Objekt in O seinen Gewinn, also ebenfalls
eine Zahl aus Q+ zuordnet,
• b ist eine Zahl aus Q+ , die die Größe des zu füllenden Rucksacks angibt,
wobei s(o) ≤ b für alle o ∈ O gilt.
Eine Teilmenge O0 ⊆ O ist eine Lösung für eine Instanz I = (O, s, p, b), falls
die Objekte in O0 in einen Rucksack der vorgegebenen Größe passen, d.h. es gilt
P
einer Lösung O0 entspricht dem Gesamtgewinn der Obo∈O 0 s(o) ≤ b. Die Güte P
0
0
jekte in O , d.h. w(O ) := o∈O0 p(o).
Optimierungsproblem MaxKnapsack
Eingabe: Instanz I = (O, s, p, b)
Ausgabe: zulässige Lösung O0 mit maximaler Güte für die Instanz I
Dass MaxKnapsack ebenfalls ein NP-schweres Optimierungsproblem ist, sieht
man wie folgt.
Sei I 0 = (O, s, b) eine Instanz des NP-schweren Optimierungsproblems MaxSubsetSum (siehe Kapitel 1). Anhand von I 0 definiert man eine Instanz I = (O, s, p, b)
von MaxKnapsack, indem man p(o) := s(o) für alle o ∈ O setzt. Offenbar ist eine
Teilmenge O0 ∈ O genau dann eine Lösung für die Instanz I von MaxKnapsack,
wenn O0 auch eine Lösung für die Instanz I 0 von MaxSubsetSum ist. Aufgrund
der Wahl von p folgt, dass sich die Güte von O0 – egal, ob wir sie als Lösung für
MaxKnapsack oder für MaxSubsetSum interpretieren – nicht unterscheidet. Da
sich darüber hinaus die Größe der beiden Instanzen I und I 0 nur unwesentlich
unterscheidet, ein effizienter Lösungsalgorithmus für MaxKnapsack auch auch
ein effizienter Lösungsalgorithmus für MaxSubsetsum.
S
Satz 6.1
MaxKnapsack ist ein NP-schweres Optimierungsproblem.
Um die nachfolgenden Darstellungen zu vereinfachen, betrachten wir folgende
Variante des Optimierungsproblems MaxKnapsack.
Optimierungsproblem MaxKnapsack’
Eingabe: Instanz I = (O, s, p, b) mit s(o), p(o) ∈ für alle o ∈ O.
Ausgabe: zulässige Lösung O0 mit maximaler Güte für die Instanz I
N
Man kann sich einfach überlegen, dass ein vollständiges Approximationsschema
für MaxKnapsack’ auch ein vollständiges Approximationsschema für MaxKnapsack ist.
B
Beispiel 6.1
Sei die folgenden Instanz I = (O, s, p, b) von MaxKnapsack mit O = {o1 , o2 },
wobei gilt:
• s(o1 ) =
3
2
=
18
12
und s(o2 ) =
4
3
=
16
12 ,
• p(o1 ) =
3
2
=
15
10
und p(o2 ) =
7
5
=
14
10 ,
• b=
7
4
=
21
12 .
6.1 Das Rucksackproblem
Weiterhin sei I 0 = (O, s0 , p0 , b0 ) die folgende Instanz MaxKnapsack’, wobei
gilt:
• s(o1 ) = 18 und s(o2 ) = 16,
• p(o1 ) = 15 und p(s0 ) = 14,
• b = 21.
Offenbar ist jede Lösung O0 für die Instanz I 0 auch eine Lösung für die In1
stanz I, die sich in Bezug auf ihre Güte um den Faktor 10
unterscheiden.
0
Folglich sind die beiden Instanzen I und I äquivalent.
Um ein vollständiges Approximationsschema für MaxKnapsack’ zu entwerfen,
gehen wir folgt vor. Wir überlegen uns erst einmal, wie ein möglichst effizienter
Lösungsalgorithmus für MaxKnapsack’ aussieht. Im Anschluss verwenden wir
diesen Lösungsalgorithmus, um das gesuchte vollständiges Approximationsschema zu definieren.
Zur Beschreibung eines möglichst effizienter Lösungsalgorithmus Lösungsalgorithmus für MaxKnapsack’ bedarf es einiger Vorüberlegungen.
Sei I = (O, s, p, b) mit O = {o1 , . . . , on } die gegebene Instanz von MaxKnapsack’
und Opt(I) eine optimale Lösung für I.
Im Folgenden bezeichnen wirPfür jedes O0 ⊆ O mit s(O0 ) die Gesamtgröße der
0
Objekte in O0 , d.h. s(O0 ) :=
o∈O 0 s(o ), und setzen Oi := {o1 , . . . , oi } für alle
i∈ .
N
Sei nun pmax := max{p(oi ) | 1 ≤ i ≤ n} und p0max := n · pmax . Man beachte, dass
pmax ≤ w(Opt(I)) ≤ p0max gilt.
Für alle i, j ∈
N mit i ≤ n und j ≤ p0max, definieren wir:
• Mi,j = {O0 | O0 ⊆ Oi , w(O0 ) ≥ j}.
Die Menge Mi,j enthält also alle Teilmengen von Oi mit einer Güte größer
gleich j.
Nun definieren wir folgende partielle Funktion f über den natürlichen Zahlen.
Für alle i, j ∈ mit i ≤ n und j ≤ p0max setzen wir:
N
• f (i, j) = ∞, falls Mi,j = ∅.
• f (i, j) = min{s(O0 ) | O0 ∈ Mi,j }.
Wenn f (i, j) > 0 ist, gibt der Wert f (i, j) die minimale Gesamtgröße der Teilmengen in der MengeMi,j an, d.h. wie groß eine eine Teilmenge von Oi mindestens
sein muss, damit sie eine Güte größer gleich j hat.
Die partielle Funktion f ist offenbar so definiert, dass gilt:
w(Opt(I)) = max{j | 1 ≤ j ≤ p0max , 0 < f (n, j) ≤ b}.
Wenn man die vollständig ausgefüllte Wertetabelle der Funktion f kennt, kann
man deshalb sehr einfach die Güte eine optimale Lösung für I bestimmen. (Es sei
Seite 77
Seite 78
Kapitel 6 Vollständige Approximationsschemata
angemerkt, dass man anhand dieser Wertetabelle auch sehr einfach bestimmen
kann, welche Objekte aus O auszuwählen sind, um eine optimale Lösung zu bilden. Wie das geht, sehen wir weiter unten.)
Um die interessierende Wertetabelle möglichst effizient zu berechnen, überlegen
wir uns, welche Eigenschaften die partielle Funktion f hat.
Lemma 6.1. Seien i, j ∈
N mit i ≤ n und j ≤ p0max gegeben. Dann gilt:
(i) f (1, j) = s(o1 ), falls j ≤ p(o1 ),
(ii) f (1, j) = 0, falls j > p(o1 ),
(iii) f (i, j) = min{f (i − 1, j), s(oi )}, falls i > 1 und j ≤ p(oi ),
(iv) f (i, j) = min{f (i − 1, j), s(oi ) + f (i − 1, j − p(oi ))}, falls i > 1 und j > p(oi ).
Beweis. Dass (i) und (ii) gelten, sollte offensichtlich sein, da O0 = {o1 } die einzige
Teilmenge von O1 in M1,j ist.
Um (iii) zu zeigen, benutzen wir, dass die Einermenge {oi } garantiert zur Menge
Mi,j gehört. (Beachte, dass j ≤ p(oi ), und damit w({oi }) ≥ j gilt.) Für jede Teilmenge O0 ∈ Mi,j , die neben oi noch ein weiteres Element enthält, gilt s(O0 ) > s(oi ).
Also muss jedes O0 ∈ Mi,j mit s(O0 ) ≤ s(oi ) bereits zur Menge Mi−1,j gehören.
Daraus folgt sofort die Behauptung.
Um (iv) zu verifizieren, geht man wie folgt vor. Sei O0 eine Teilmenge minimaler
Größe in der Menge Mi,j . Wir unterscheiden die folgenden Fälle:
Fall 1. oi ∈
/ O0 .
Dann gehört O0 auch zur Menge Mi−1,j und die Behauptung folgt sofort.
Fall 2. oi ∈ O0 .
Dann muss O0 = O00 ∪ {oi }, O00 ⊆ Oi−1 und w(O00 ) ≥ j − p(oi ) gelten. Da O0 eine
Teilmenge minimaler Größe in der Menge Mi,j ist, muss O00 eine Teilmenge minimaler Größe in der Menge Mi−1,j−p(oi ) sein, was ebenfalls sofort die Behauptung
impliziert.
Zur Berechnung der Wertetabelle der Funktion f benutzt man das Prinzip der Dynamischen Programmierng und berechnet die Tabelle zeilenweise von links nach
rechts (beginnend mit der ersten Zeile), wobei man die Regeln aus Lemma 6.1
anwendet.
B
Beispiel 6.2
Sei O = {o1 , o2 , o3 } mit s(o1 ) = 1, s(o2 ) = 2, s(o3 ) = 2 und p(o1 ) = 1,
p(o2 ) = 2, p(o3 ) = 3 sowie b = 3 die betrachtete Instanz von MaxKnapsack’.
Dann sieht die vollständige Wertetabelle der Funktion f wie folgt aus:
6.1 Das Rucksackproblem
f (i, j)
i=1
i=2
i=3
1
1
1
1
Seite 79
2
∞
2
2
3
∞
3
2
4
∞
∞
3
5
∞
∞
4
6
∞
∞
5
7
∞
∞
∞
8
∞
∞
∞
9
∞
∞
∞
Ein Blick in die letzte Zeile zeigt, dass w(Opt(I)) = 4 gilt. Man beachte, dass
f (3, 4) ≤ b, f (3, 5) > b, f (3, 6) > b und f (3, 7) = f (3, 8) = f (3, 9) = ∞ gilt.
Anhand der Wertetabelle kann man – mit Hilfe einer Rückwärtsanalyse –
nun wie folgt herausbekommen, dass die Teilmenge O0 = {o1 , o3 } eine optimale Lösung ist.
• o3 gehört zu O0 , da f (3, 4) 6= f (2, 4) gilt (man beachte, dass noch Objekte einzupacken sind (wegen p(o3 ) < 4) und dass der Wert f (2, 1)
als nächstes relevant ist (da 1 = 4 − p(o3 ) gilt)),
• o2 gehört nicht zu O0 , da f (2, 1) = f (1, 1) gilt (man beachte, dass noch
Objekte einzupacken sind (wegen p(o3 ) < 3) und dass der Wert f (1, 1)
als nächstes relevant ist),
• o1 gehört natürlich zu O0 , da noch ein Objekt einzupacken war.
Die im letzten Beispiel illustrierte Rückwärtsanalyse zur Bestimung einer optimalen Lösung basiert auf folgender Beobachtung, die eine unmittelbare Folgerung
aus Lemma 6.1 ist.
Lemma 6.2. Seien i, j ∈
Dann gilt:
N mit 1 < i ≤ n und j ≤ p0max mit f (i, j) 6= ∞ gegeben.
• Wenn f (i, j) 6= f (i − 1, j) gilt, so gibt es ein O0 ⊆ O mit w(O0 ) ≥ j, das das
Objekt oi enthält.
• Wenn f (i, j) = f (i − 1, j) gilt, so gibt es ein O0 ⊆ O mit w(O0 ) ≥ j, das das
Objekt oi nicht enthält.
Unsere Vorüberlegungen belegen, dass der folgende Algorithmus ein Lösungsalgorithmus für das Maximimierungsproblem MaxKnapsack’ ist.
Algorithmus Exact für MaxKnapsack’
Eingabe: Instanz I = (O, s, p, b) mit |O| = n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
pmax := max{p(o) | o ∈ O};
p0max := n · pmax ;
for j := 1 to p0max do
if j ≤ p(o1 ) then
f (1, j) := s(o1 );
else
f (i, j) := 0;
fi
od
for i := 2 to n do
for j := 1 to p0max do
if j ≤ p(oi ) then
f (1, j) := min{f (i − 1, j), s(oi )};
else
Seite 80
Kapitel 6 Vollständige Approximationsschemata
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
f (1, j) := min{f (i − 1, j), s(oi ) + f (i − 1, j − p(oi ))};
fi
od
od
j := max{k | 1 ≤ k ≤ p0max , 0 < f (n, k) ≤ b};
i := n;
O0 := ∅;
while (i > 1) && (j > 0) do
if f (i, j) 6= f (i − 1, j) then
O0 := O0 ∪ {oi };
j := j − p(oi );
fi
i := i − 1;
od
if j > 0 then
O0 := O0 ∪ {o1 };
fi
return O0 ;
Man sieht sofort, dass obiger Algorithmus nur O(n2 · pmax ) Rechenschritte benötigt, um eine Instanz I = (O, s, p, b) zu verarbeiten und eine optimale Lösung zu
bestimmen. (Beachte, dass p0max = n · pmax gilt.)
Auf den ersten Blick sieht es so aus, dass der vorgestellte Lösungsalgorithmus für
ein effizienter Algorithmus ist, d.h. die Rechenzeitt von Exact ist polynomiell in
der Größe der zu verarbeitenden Instanz beschränkt. Das ist natürlich nicht der
Fall, andernfalls hätten wir gerade gezeigt, dass P = NP gilt.
Hauptgrund hierfür ist, dass man eine Instanz I = (O, s, p, b) mit |O| = n von
MaxKnapsack’ beschreiben kann, in dem eine Liste der Länge 2n + 1 verwendet wird, die für jedes Objekt o ∈ O die beiden Zahlen s(o) und p(o) sowie die
Größe b des Rucksacks enthält. Folglich genügt der Platz O(n · |bin(m)|) die Instanz I zu beschreiben, wobei m das Maximum der beiden Zahlen b und pmax ist.
Folglich benörtigt der Lösungsalgorithmus Exact nicht polynomiell, sondern exponentiell viele Rechenschritte, um die Instanz I zu verarbeiten. (Beachte, dass
pmax ≥ 2|bin(m)|−1 gilt.)
N
Wir benutzen nun den Lösungsalgorithmus Exact, um für jedes k ∈ einen geeigneten Algorithmus Ak für MaxKnapsack’ zu entwerfen, der zwar keine optimalen, dafür aber halbwegs gute zulässige Lösungen bestimmt. Die zugrunde
liegende Idee besteht darin, statt einer optimalen Lösung für eine gegebene Instanz I = (O, s, p, b) eine optimale Lösung für eine geeignet skalierte Instanz
Ik = (O, s, pk , b) zu bestimmen, die sich nur in Bezug auf die betrachteten Gewinne der Objekte von I unterscheidet. Warum dieser Ansatz zielführend ist, sehen
wir gleich.
Algorithmus ScaledExact_k für MaxKnapsack’
Eingabe: Instanz I = (O, s, p, b) mit |O| = n
1
2
3
4
5
6
forall o ∈ O do
pk (o) := b p(o)
k c;
od
Ik = (O, s, pk , b);
O0 := Exact(Ik );
return O0 ;
6.1 Das Rucksackproblem
Seite 81
Satz 6.2
N
Sei k ∈ , I = (O, s, p, b) mit |O| = n eine Instanz von MaxKnapsack’ und
pmax der maximale Gewinn eines Objektes in O. Dann gilt:
(i) ScaledExact_k benötigt O(n2 · pmax
k ) Rechenschritte, um die Instanz I
zu verarbeiten.
(ii) Es gilt w(O0 ) ≥ w(Opt(I)) · 1 − pk·n
für die von ScaledExact_k bemax
stimmte Lösung für I.
Beweis. Offenbar benötigt der Lösungsalgorithmus Exact nur O(n2 · b pmax
k c) Rechenschritte, um eine Lösung für die skalierte Instanz Ik zu bestimmen. Da alle
anderen Anweisungen von ScaledExact_k ausgeführten Anweisungen nur O(n)
Rechenschritte benötigen, folgt (i).
Um (ii) zu verifizieren, gehen wir wie folgt vor. Sei O0 die von ScaledExact_k
bestimmte Lösung. Man beachte zunächst, dass O0 eine zulässige Lösung für die
skalierte Instanz Ik von MaxKnapsack’ ist. Da sich die gegebene Instanz I und
die skalierte Instanz Ik in Bezug auf die Göße der Objekte in O und die Größe des
Rucksacks nicht unterscheiden, gilt für jede Teilmenge O00 ⊆ O:
• O00 ist genau dann eine zulässige Lösung für I, wenn O00 eine zulässige
Lösung für Ik ist.
Also ist O0 insbesondere auch eine zulässige Lösung für I. Es genügt folglich, die
Güte von O0 abzuschätzen.
Sei nun Opt(I) eine optimale Lösung für I und Opt(Ik ) ein optimale Lösung für Ik .
Ferner bezeichnen w(Opt(I)), w(Opt(Ik )), wk (Opt(I)) und wk (Opt(Ik )) die Güte
dieser Lösungen in Bezug auf die Instanz I bzw. die Instanz
P Ik . (Beachte, dass
die Gütefunktion wk für Ik so gewählt ist, dass wk (O00 ) =
o∈O 00 pk (o) für alle
O00 ⊆ O gilt.)
Da Exact ein Lösungsalgorithmus für MaxKnapsack’ ist, gilt:
Fakt 1. wk (Opt(Ik )) = wk (O0 ).
Da Opt(I) auch eine Lösung für die Instanz Ik ist, muss offenbar auch gelten:
Fakt 2. wk (Opt(I)) ≤ wk (Opt(Ik )).
Offenbar gilt nun
0
w(O ) =
X p(o) X p(o)
≥k
= k · wk (O0 ).
p(o) = k
k)
k
0
0
0
X
o∈O
o∈O
o∈O
Zusammen mit Fakt 1 und 2, folgt damit
w(O0 ) = k · wk (O0 ) ≥ k · wk (Opt(Ik )) ≥ k · wk (Opt(I)).
S
Seite 82
Kapitel 6 Vollständige Approximationsschemata
Da wk (Opt(I)) =
w(O0 ) ≥ k
j
P
o∈Opt(I)
X
o∈Opt(I)
p(o)
k
k
gilt, erhalten wir
p(o)
≥k
k
X
o∈Opt(I)
p(o)
−1 =
k
X
(p(o) − k).
o∈Opt(I)
Also gilt auch
w(O0 ) ≥
X
p(o) −
o∈Opt(I)
X
k = w(Opt(I)) − k · |Opt(I)|.
o∈Opt(I)
Da |Opt(I)| ≤ n ist, ergibt sich w(Opt(I)) − k · |Opt(I)| ≥ w(Opt(I)) − k · n, was
sofort
k·n
0
w(O ) ≥ w(Opt(I)) − k · n = w(Opt(I)) · 1 −
w(Opt(I))
impliziert. Da pmax ≤ w(Opt(I)) ist, muss
k·n
w(Opt(I))
k·n
w(O ) ≥ w(Opt(I)) · 1 −
w(Opt(I))
0
≤
k·n
pmax
sein. Also erhalten wir
k·n
≥ w(Opt(I)) · 1 −
pmax
,
und damit ist auch (ii) verifziert.
Jetzt sind wir in der Lage, das Hauptergebnis dieses Abschnitts zu beweisen.
S
Satz 6.3
Es gibt ein vollständiges Approximationsschema (Aε )ε>0 für das Maximierungsproblem MaxKnapsack’.
Beweis. Sei ε > 0 gegeben und I = (O, s, p, b) mit |O| = n die betrachtete Instanz
von MaxRucksack’ sowie pmax der maximale Gewinn eines Objektes in O.
Wir setzen k := max{1, b ε·pnmax c} und benutzen den Algorithmus ScaledExact_k,
um eine Lösung für die Instanz I zu bestimmen, d.h. Aε entspricht dem Algorithmus ScaledExact_k.
Wir unterscheiden zwei Fälle.
Fall 1. k = 1.
Also gilt b ε·pnmax c ≤ 1 und damit auch
ε·pmax
n
≤ 2. Folglich ist pmax ≤
2n
ε .
Da ScaledExact_1 nur O(n2 · pmax ) Rechenschritte benötigt, um die Instanz I zu
verarbeiten (siehe Satz 6.2), benötigt Aε nur O(n3 · 1ε ) Rechenschritte.
Da ScaledExact_1 die selbe Lösung wie der Lösungsalgorithmus Exact für MaxRucksack’ bestimmt, wird in diesem Fall von Aε sogar eine optimale Lösung ausgegeben.
Fall 2. k = b ε·pnmax c.
6.2 Komplexitätstheoretische Einordnung
Also gilt ε·pnmax ≤ k + 1. Wegen k > 1 gilt auch
pmax
2n
k ≤ ε .
Seite 83
ε·pmax
n
≤ 2k, und damit auch
Da ScaledExact_k nur O(n2 · pmax
k ) Rechenschritte benötigt, um die Instanz I zu
verarbeiten (siehe Satz 6.2), benötigt Aε nur O(n3 · 2ε ) Rechenschritte.
Sei nun O0 die von Aε ausgegebene Lösung und Opt(I) eine optimale Lösung für
die Instanz I. Aus der Wahl von k folgt, dass k ≤ ε·pnmax und damit auch pk·n
≤ε
max
k·n
0
gilt. Da außerdem w(O ) ≥ w(Opt(I)) · 1 − pmax gilt (siehe Satz 6.2), muss – wie
gewünscht – w(O0 ) ≥ w(Opt(I)) · (1 − ε) gelten.
6.2 Komplexitätstheoretische Einordnung
Im letzten Abschnitt haben wir am Beispiel des Maximierungsproblems MaxKnapsack’ gesehen, wie man aus einem Lösungsalgorithmus ein vollständiges
Approximationsschema gewinnen kann. Diese Vorgehensweise funktioniert nicht
immer, da sich nicht alle NP-schweren Optimierungsprobleme vollständig approximieren lassen. Es sei angemerkt, dass aus den Nichtapproximierbarkeitsergebnissen in Kapitel 5 folgt, dass es weder für MinTravelingSalesman noch für
MinBinPacking ein vollständiges Approximationsschema gibt.
Übung 6.1
Begründen Sie, weshalb das Minimierungsproblem MinTravelingSalesman
(siehe Kapitel 5) nicht vollständig approximierbar ist.
In diesem Abschnitt werden wir eine Teilmenge der Klasse aller NP-schweren
Optimierungsprobleme, die so genannten streng NP-schweren Optimierungsprobleme kennenlernen. Unter der Annahme, dass P 6= NP gilt, kann man zeigen,
dass im Prinzip keines dieser Optimierungsprobleme vollständig approximierbar
ist.
Ein streng NP-schweres Optimierungsproblem unterscheidet sich vom Maximierungsproblem MaxKnapsack’ insofern, dass es für dieses Problem höchstwahrscheinlich keinen Lösungsalgorithmus gibt, der ähnliche Laufzeitschranken wie
der Lösungsalgorithmus Exact für MaxKnapsack’ hat. Um diese Aussage zu präzisieren, benötigen wir einige Begrifflichkeiten, die wir im Folgenden einführen.
Zur Vereinfachung der Darstellung betrachten wir im folgenden nur so genannte
natürlichzahlige Optimierungsprobleme.
Ein Optimierungsproblem Π = (I, f, w) ist ein natürlichzahliges Optimierungsproblem, wenn gilt:
• alle Zahlen, die in der Beschreibung einer Instanz I ∈ I vorkommen, sind
natürliche Zahlen,
• die Gütefunktion w ordnet jeder zulässigen Lösung eine natürliche Zahl zu.
Ü
Seite 84
E
Kapitel 6 Vollständige Approximationsschemata
Exkurs 6.1
Es sei angemerkt, dass man zu jedem der bisher betrachteten Optimierungsprobleme eine äquivalente natürlichzahlige Variante definieren kann. Wie
das geht, haben wir am Beispiel des Optimierungsproblems MaxKnapsack
im letzten Abschnitt gesehen.
Sei nun Π ein Optimierungsproblem und I eine Instanz von Π. Dann bezeichnen
wir mit Max (I) die größte natürliche Zahl, die in einer möglichst platzsparenden
Beschreibung von I binär kodiert vorkommt.
B
Ü
Beispiel 6.3
Sei I = (O, s, p, b) eine Instanz von MaxKnapsack’. Dann ist Max (I) gleich
dem Maximum der beiden Zahlen pmax := max{p(o) | o ∈ O} und b. Man
beachte, dass s(o) ≤ b für alle o ∈ O gilt. Ferner muss die Anzahl der Elemente von O nicht berücksichtigt werden, da diese Zahl in einer möglichst
platzsparendenen Kodierungen von I nicht binär kodiert vorkommt.
Übung 6.2
Sei I = (M, J, t) eine Instanz der natürlichzahligen Variante von MinJobScheduling mit M = {M1 , . . . , Mm } und J = {J1 , . . . , Jm } (siehe Kapitel 4).
Weiterhin sei tmax := max{t(Jj ) | 1 ≤ j ≤ m}.
Welche der folgenden Aussagen ist richtig? Begründen Sie Ihre Antwort.
• Max (I) ist gleich tmax .
• Max (I) ist gleich dem Maximum der beiden Zahlen m und tmax .
• Max (I) ist gleich dem Maximum der drei Zahlen n, m und tmax .
Mit Hilfe der eben eingeführten Bezeichnung können wir jetzt einen der beiden
zentralen Begriffe dieses Abschnitts definieren.
D
Definition 6.2
Sei Π ein Optimierungsproblem und A ein Lösungsalgorithmus für Π. Wir
nennen A einen pseudo-polynomiellen Lösungsalgorithmus für Π, wenn es
ein Polynom p gibt, so dass für alle Instanzen I von Π gilt:
• A benötigt höchstens O(p(|I|, Max (I))) Rechenschritte, um die Instanz I zu verarbeiten.
Offenbar ist jeder effiziente Lösungsalgorithmus für ein Optimierungsproblem Π
auch ein pseudo-polynomieller Lösungsalgorithmus für Π. (Es sei daran erinnert,
dass die Laufzeit eines effizienten Lösungsalgorithmus für Π polynomiell in |I|,
und damit erst recht auch polynomiell in |I| und Max (I) beschränkt ist.) Die Umkehrung dieser Aussage gilt nicht.
6.2 Komplexitätstheoretische Einordnung
Beispiel 6.4
Seite 85
B
Wir betrachten noch einmal das Optimierungsproblem MaxKnapsack’ und
den im letzten Abschnitt vorgestellten Lösungsalgorithmus Exact.
Wir wissen bereits, dass Exact nur O(n2 · pmax ) Rechenschritte benötigt, um
eine Instanz I = (O, s, p, b) von MaxKnapsack’ zu verarbeiten, wobei n die
Anzahl der Objekte und pmax den maximalen Gewinn eines Objektes in O
bezeichnet. Ferner haben wir schon argumentiert, dass Exact kein effizienter
Lösungsalgorithmus für dieses Maximierungsproblem ist.
Dass Exact ein pseudo-polynomieller Lösungsalgorithmus für MaxKnapsack’ ist, sieht man wie folgt.
Es sei daran erinnert, dass sich I mit Hilfe einer Liste der Länge 2n + 1 beschreiben lässt, die für jedes o ∈ O die beiden Zahlen s(o) und p(o) sowie
die Zahl b enthält. Also gilt n ≤ |I|. Da Max (I) gleich dem Maximum der
beiden Zahlen pmax und b ist, gilt pmax ≤ Max (I). Folglich benötigt Exact
nur O(|I|2 · Max (I)) Rechenschritte, um die Instanz I zu verarbeiten.
Als nächstes präzisieren wir den Begriff streng NP-schweres Optimierungsproblem. Hierzu ist der folgende Hilfsbegriff wichtig.
Definition 6.3
Sei Π ein Optimierungsproblem und q ein Polynom. Dann bezeichnen wir
mit Πq das Teilproblem von Π, das alle Instanzen I von Π mit Max (I) ≤ q(|I|)
enthält.
Definition 6.4
Ein Optimierungsproblem Π ist streng NP-schwer, wenn es ein Polynom q
gibt, so dass gilt:
D
D
• Das Teilproblem Πq von Π ist bereits NP-schwer.
Man kann nun ganz einfach zeigen, dass es für streng NP-schwere Optimierungsproblem höchstwahrscheinlich keine pseudo-polynomiellen Lösungsalgorithmen
gibt.
Satz 6.4
Sei Π ein streng NP-schweres Optimierungsproblem. Dann gilt:
• Aus P 6= NP folgt, dass es keinen pseudo-polynomiellen Lösungsalgorithmus für Π gibt.
Beweis. Wir nehmen an, dass es einen pseudo-polynomiellen Algorithmus A
für das Optimierungsproblem Π gibt. Also gibt es ein (monoton wachsendes)
S
Seite 86
Kapitel 6 Vollständige Approximationsschemata
Polynom p, so dass für alle Instanzen I gilt, dass A bei Eingabe von I nur
O(p(|I|, Max (I)) Rechenschritte benötigt, um eine optimale Lösung Opt(I) für I
zu bestimmen.
Sei das Polynom q nun so gewählt, dass das Teilproblem Πq von Π ein NPschweres Optimierungsproblem ist.
Wir behaupten, dass A ein effizienter Lösungsalgorithmus für das Teilproblem Πq
ist. Da Πq nach Voraussetzung ein NP-schweres Optimierungsproblem ist, folgt
aus dieser Behauptung sofort, dass P = NP gelten muss.
Sei I 0 eine Instanz des Teilproblems Πq . Dann gilt Max (I 0 ) ≤ q(|I 0 |). Folglich benötigt A nur O(p(|I 0 |, q(|I 0 |))) Rechenschritte, um eine optimale Lösung Opt(I 0 )
für I 0 zu bestimmen. Also ist die Laufzeit von A polynomiell in |I 0 | beschränkt,
woraus die obige Behauptung folgt.
Es sei angemerkt, dass wir bereits einige streng NP-schwere Optimierungsprobleme kennengelernt haben.
Ü
Übung 6.3
Zeigen Sie, dass das Minimierungsproblem MinTraveling Salesman (siehe
Kapitel 4) ein streng NP-schwere Optimierungsproblem ist.
Andererseits wissen wir, dass es einen pseudo-polynomiellen Lösungsalgorithmus für das Maximierungsproblem MaxKnapsack’ gibt. Also kennen wir bereits
auch ein Optimierungsproblem, das NP-schwer, aber nicht streng NP-schwer
ist.
Nach diesen Vorüberlegungen kümmern wir uns jetzt um die Frage, welchen Zusammenhang es zwischen streng NP-schweren und vollständig approximierbaren Optimierungsproblemen gibt.
S
Satz 6.5
Sei Π ein Optimierungsproblem, das die Eigenschaft hat, dass für alle Instanzen I von Π gilt, dass die Güte einer optimalen Lösung Opt(I) für I polynomiell in |I| und Max (I) beschränkt ist. Dann gilt:
• Wenn Π vollständig approximierbar ist, so gibt es einen pseudopolynomiellen Lösungsalgorithmus für Π.
Beweis. Wir betrachten nur den Fall, dass Π ein Maximierungsproblem ist. Der
Fall, dass Π ein Minimierungsproblem ist, kann völlig analog behandelt werden.
Es sei daran erinnert, dass Π ein natürlichzahliges Optimierungsproblem ist.
Da Π vollständig approximierbar ist, gibt es ein vollständiges Approximationsschema (Aε )ε>0 für Π, d.h. es gibt ein Polynom p, so dass für jedes ε > 0 gilt, dass
Aε ein Approximationsalgorithmus für Π mit dem Approximationsfaktor 1−ε ist,
dessen Laufzeit polynomiell in |I| und 1ε beschränkt ist.
6.2 Komplexitätstheoretische Einordnung
Seite 87
Nach Vorausetzung gilt für alle Instanzen I von Π, dass die Güte einer optimalen
Lösung Opt(I) für I polynomiell in |I| und Max(I) beschränkt ist. Sei also ein
Polynom q so gewählt, dass w(Opt(I)) < q(|I|, Max(I)) gilt.
Wir behaupten nun, dass der folgende Algorithmus B ein pseudo-polynomieller
Lösungsalgorithmus für das Maximierungsproblem Π ist.
Algorithmus B für das Maximierungsproblem Π
Eingabe: Instanz I
1
2
3
1
ε := q(|I|,Max(I))
;
S := Aε (I);
return S;
Da Aε nur O(p(|I|, 1ε )) Rechenschritte benötigt, um die Eingabe I zu verarbeiten,
folgt sofort, dass B nur O(p(|I|, q(|I|, Max (I)))) + O(q(|I|, Max (I))3 ) Rechenschritte benötigt. (Der zweite Summand gibt an, wie viel Zeit benötigt wird, um ε zu
bestimmen). Also ist die Laufzeit von B polynomiell in |I| und Max (I) beschränkt.
Sei nun Opt(I) eine optimale Lösung für die zu verarbeitende Instanz I. Es bleibt
zu zeigen, dass w(S) = w(Opt(I)) für die von B bestimmte Lösung S gilt.
Da der Approximationsalgorithmus Aε den Approximationsfaktor 1 − ε hat, folgt
sofort w(S) ≥ (1 − ε) · w(Opt(I)) und damit auch:
w(Opt(I)) − w(S) ≤ ε · w(Opt(I)).
Da ε =
1
q(|I|,Max (I))
und w(Opt(I)) < q(|I|, Max (I)) gilt, erhalten wir:
w(Opt(I)) − w(S) <
1
· q(|I|, Max (I)) = 1.
q(|I|, Max (I))
Da Π ein natürlichzahliges Optimierungsproblem ist, sind sowohl w(Opt(I)) als
auch w(S) natürliche Zahlen. Also folgt aus w(Opt(I)) − w(S) < 1 sofort, dass
w(S) = w(Opt(I)) gelten muss.
Übung 6.4
Zeigen Sie, dass die Aussage von Satz 6.5 auch für Minimierungsprobleme
gilt.
Ü
Aus der Kontraposition von Satz 6.5 folgt nun zusammen mit Satz 6.4 das zentrale
Ergebnis dieses Abschnitts.
Satz 6.6
Sei Π ein streng NP-schweres Optimierungsproblem, das die Eigenschaft
hat, dass für alle Instanzen I von Π gilt, dass die Güte einer optimalen Lösung Opt(I) für I polynomiell in |I| und Max (I) beschränkt ist. Dann gilt:
• Aus P 6= NP folgt, dass es kein vollständiges Approximationsschema
für Π gibt.
S
Seite 88
Kapitel 6 Vollständige Approximationsschemata
Beweis. Sei Π das betrachtete Optimierungsproblem. Es sei angenommen, dass
P 6= NP gilt.
Aus Satz 6.4 folgt nun sofort, dass es keinen pseudo-polynomiellen Lösungsalgorithmus für Π gibt. Da Π die Eigenschaft hat, dass für alle Instanzen I von Π
gilt, dass die Güte einer optimalen Lösung Opt(I) für I polynomiell in |I| und
Max (I) beschränkt ist, kann Π wegen Satz 6.5 nicht vollständig approximierbar
sein. (Wäre das der Fall, müsste es gemäß Satz 6.5 einen pseudo-polynomiellen
Lösungsalgorithmus für Π geben, was der Aussage von Satz 6.4 widersprechen
würde.)
Es sei darauf hingewiesen, dass alle praktisch interessierenden Optimierungsprobleme die Eigenschaft haben, dass für alle Instanzen I von Π gilt, dass die Güte
einer optimalen Lösung Opt(I) für I polynomiell in |I| und Max (I) beschränkt ist,
d.h. die in Satz 6.6 formulierte Eigenschaft ist erfüllt. Das Hauptergebnis dieses
Abschnitts besagt also, dass es höchstwahrscheinlich für kein praktisch interessierendes streng NP-schweres Optimierungsproblem ein vollständiges Approximationsschema geben wird.
Ü
Übung 6.5
Zeigen Sie, dass die naürlichzahlige Variante der Optimierungsproblems
MinJobScheduling (siehe Kapitel 4) die in Satz 6.6 formulierte Eigenschaft
hat.
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Seite 89
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
In diesem Kapitel stehen drei klassische graphentheoretische Optimierungsprobleme im Mittelpunkt, und zwar die beiden Maximierungsprobleme MaxClique
und MaxIndependentSet sowie das Minimierungsproblem MinNodeColering.
Wir behandeln diese Probleme, weil es für sie höchstwahrscheinlich keine Approximationsalgorithmen konstanter Güte gibt.
7.1 Graphentheoretische Grundlagen
In diesem Abschnitt führen wir die zum Verständnis dieses Kapitels relevanten
Begriffe aus der Graphentheorie ein. Alle hier nicht definierten Begriffe finden
sich in Kapitel 4.
Im Folgenden betrachten wir nur schlichte, ungerichtete Graph.
Eine Teilmenge C der Knotenmenge eines Graphen G = (V, E) ist eine Clique,
wenn je zwei Knoten v, v 0 ∈ C mit v 0 6= v durch eine Kante von G verbunden sind,
d.h. es gilt {{v, v 0 } | v, v 0 ∈ C, v 6= v 0 } ⊆ E.
Beispiel 7.1
Wir betrachten den in Abbildung 7.1 dargestellten Graphen G. Offenbar ist
C1 = {v1 , v2 , v3 } eine Clique in G, während C2 = {v2 , v3 , v4 , v5 } keine Clique
in G ist.
B
Abb. 7.1: Graph für
Beispiel 7.1 - 7.4.
v1
v2
v3
v4
v5
Der Begriff unabhängige Menge ist gewisssermaßen dual zum Begriff Clique. Eine
Teilmenge U der Knotenmenge eines Graphen G = (V, E) ist eine unabhängige
Menge, wenn je zwei Knoten in U nicht durch eine Kante von G verbunden sind,
d.h. es muss {{v, v 0 } | v, v 0 ∈ U, v 6= v 0 } ∩ E = ∅ gelten.
Beispiel 7.2
Wir betrachten noch einmal den Graphen G aus Abbildung 7.1. Offenbar ist
U1 = {v2 , v5 } eine unabhängige Menge in G, während U2 = {v1 , v2 , v5 } keine
unabhängige Menge in G ist.
In welcher Weise diese beiden Begriffe zusammenhängen, zeigt Lemma 7.1, zu
dessen Verständnis der folgende Hilfsbegriff wichtig ist.
Der Komplentgraph Gc = (V, E c ) eines Graphen G = (V, E) enthält genau die
Kanten, die Knoten miteinander verbinden, die in G nicht durch eine Kante verbunden sind, d.h. es gilt E c := {{v, v 0 } | v, v 0 ∈ V, v 6= v 0 } \ E.
B
Seite 90
B
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Beispiel 7.3
Sei wieder G der Graph aus Abbildung 7.1, dessen Komplementgraph Gc in
Abbildung 7.2 dargestellt ist.
Offenbar ist die Clique V 0 = {v1 , v2 , v3 } im Graphen G eine unabhängige
Menge im Komplementgraph Gc .
Abb. 7.2:
Komplementgraph
für Beispiel 7.3.
v1
v2
v3
v4
v5
Ganz allgemein gilt offensichtlich:
Lemma 7.1. Sei G = (V, E) ein Graph und V 0 ⊆ V . Dann sind die folgenden Aussagen
äquivalent:
(1) V 0 ist eine Clique im Graphen G.
(2) V 0 ist eine unabhängige Menge im Komplementgraphen Gc von G.
Wir kommen jetzt zum letzten Begriff aus der Graphentheorie, der für die weiteren Untersuchungen zentral ist.
Sei G = (V, E) ein Graph. Eine (zulässige) Knotenfärbung c des Graphen G ist
eine Abbildung, die jedem Knoten von G eine Farbe zuordnet, so dass folgende
Regel eingehalten wird:
• Je zwei Knoten v, v 0 ∈ V , die durch eine Kante von G verbunden sind, sind
unterschiedlich gefärbt, d.h. {v, v 0 } ∈ E impliziert c(v) 6= c0 (v).
Die chromatische Zahl χ(G) eines Graphen G entspricht der minimalen Zahl an
Farben, die man benötigt, um die Knoten in G gemäß obiger Regel zu färben.
B
Abb. 7.3: Zulässige
Knotenfärbung des
Graphen aus Beispiel
7.4.
Beispiel 7.4
Wir betrachten noch einmal den Graphen G aus Abbildung 7.1. Offensichtlich kann man diesen Knoten mit fünf Farben färben, indem man jedem Knoten eine separate Farbe zuordnet. Wie Abbildung 7.3 zeigt, kann man G auch
mit 3 Farben färben. Es ist nicht schwer zu sehen, dass χ(G) = 3 ist.
v1
v2
v3
v4
v5
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 91
Sei nun c eine Knotenfärbung eines Graphen G = (V, E). Dann bilden offenbar
alle mit der selben Farbe gefärbten Knoten eine unabhängige Menge in G. Also
gilt:
Lemma 7.2. Sei G = (V, E) ein Graph und c eine Knotenfärbung für G, welche die
Farben 1, . . . , k verwendet. Ferner sei Ui := {v ∈ V | c(v) = i} für alle i mit 1 ≤ i ≤ k
Dann gilt:
• (U1 , . . . , Uk ) ist eine Zerlegung der Knotenmenge V in k unabhängige Mengen.
Beispiel 7.5
B
Die in Abbildung 7.3 angebene Knotenfärbung induziert eine Zerlegung der
Knotenmenge des betrachteten Graphen in drei unabhängige Mengen, und
zwar U1 = {v1 , v4 }, U2 = {v2 , v5 } sowie U3 = {v3 }.
7.2 Maximale Cliquen und maximale unabhängige Mengen
In diesem Abschnitt beschäftigen wir uns mit den beiden Maximierungsproblemen MaxClique und MaxIndependetSet, bei denen es darum geht, in einem gegebenen Graphen G = (V, E) eine Clique bzw. eine unabhängige Menge maximaler
Größe zu finden.
Eine Teilmenge V 0 ⊆ V ist eine zulässige Lösung für eines dieser beiden Maximierungsprobleme, wenn V 0 eine Clique bzw. eine unabhängige Menge im gegebenen
Graphen G ist. Die Güte einer zulässigen Lösung V 0 entspricht jeweils der Größe
von V 0 , d.h. es gilt w(V 0 ) := |V 0 |.
Die beiden Optimierungsprobleme können wie folgt beschrieben werden:
Optimierungsproblem MaxClique
Eingabe: Instanz G = (V, E)
Ausgabe: Clique C im Graphen G mit maximaler Güte
Optimierungsproblem MaxIndependetSet
Eingabe: Instanz G = (V, E)
Ausgabe: Unabhängige Menge U im Graphen G mit maximaler Güte
Wir zeigen jetzt, dass es für MaxClique höchstwahrscheinlich keinen effizienten
Lösungsalgorithmus gibt.
Satz 7.1
Das Maximierungsproblem MaxClique ist NP-schwer.
Beweis. Es sei daran erinnert, dass 3SAT ein NP-vollständiges Entscheidungsproblem ist (siehe Kapitel 3). Wir nehmen an, dass A ein effizienter Lösungsalgorithmus für das Maximierungsproblem MaxClique sei. Es genügt zu zeigen, dass es
dann auch einen effizienten Lösungsalgorithmus für 3SAT gibt.
S
Seite 92
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Wir behaupten nun, dass man zu jeder Instanz von 3SAT, d.h. zu jeder Formel α
in 3-konjunktiver Normalform, effizient einen Graphen G konstruieren kann, der
folgende Eigenschaften hat:
• Für jede Clique C in G gilt w(C) ≤ k, wobei k der Anzahl der Klauseln in
α entspricht.
• Es gibt in G genau dann eine Clique C mit w(C) = k, wenn die Formel α
erfüllbar ist.
Falls diese Behauptung richtig ist, folgt sofort, dass der folgende Algorithmus B
benutzt werden kann, um effizient die Frage zu beantworten, ob eine gegebene
Formel α erfüllbar ist, d.h. ob α eine ‘Ja’-Instanz von 3SAT ist.
Algorithmus B für 3SAT
Eingabe: Formel α
1
2
3
4
5
6
7
8
9
Bestimme die Anzahl k der Klauseln in α.
Bestimme den zu α gehörenden Graphen G = (V, E) .
I := G;
C := A(I);
if w(C) = k then
return ‘α ist erfüllbar’;
else
return ‘α ist nicht erfüllbar’;
fi
Wir verifizieren jetzt die obige Behauptung. Sei α eine Formel in 3-konjunktiver
Normalform, etwa
α = (a1,1 ∨ a1,2 ∨ a1,3 ) ∧ · · · ∧ (ak,1 ∨ ak,2 ∨ ak,3 )
mit ai,j ∈ {x1 , . . . , xn } ∪ {¬x1 , . . . , ¬xn } für alle i, j ∈
N mit i ≤ k und j ≤ 3.
Wir nehmen in die Knotenmenge V für jedes Literal ai,j aus α einen Knoten a0i,j
auf, der mit dem Literal ai,j markiert ist. Zwei Knoten a0i,j und a0i0 ,j 0 aus V werden
genau dann durch eine Kante verbunden, wenn gilt:
• die zugehörigen Literale ai,j und ai0 ,j 0 gehören zu unterschiedlichen Klauseln in α, d.h. es gilt i 6= i0 ,
• die zugehörigen Literale ai,j und ai0 ,j 0 sind nicht komplementär, d.h.
– wenn ai,j = xz gilt, darf nicht ai0 ,j 0 = ¬xz gelten,
– wenn ai,j = ¬xz gilt, darf nicht ai0 ,j 0 = xz gelten.
Zur Illustration dient das folgende Beispiel:
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 93
Beispiel 7.6
Der Formel β = (x1 ∨ x2 ∨ ¬x3 ) ∧ (¬x1 ∨ x2 ∨ ¬x3 ) ∧ (¬x1 ∨ ¬x2 ∨ x3 ) wird
der Graph aus Abbildung 7.4 zugeordnet.
x1
x2
¬x3
¬x1
x2
¬x3
¬x1
¬x2
x3
B
Abb. 7.4: Der zur
Formel β gehörende
Graph.
Es ist leicht einzusehen, dass G in polynomieller Zeit anhand von α konstruiert
werden kann.
Man beachte, dass es in G nur Kanten gibt, die Knoten miteinander verbinden, für
die gilt, dass die zugehörigen Literale zu unterschiedlichen Klauseln in α gehören.
Da es in α genau k Klauseln gibt, kann es deshalb in G nur Cliquen C mit w(C) ≤ k
geben.
Es bleibt zu zeigen, dass die folgenden Aussagen äquivalent sind:
(1) Es gibt in G hat eine Clique C mit w(C) = k.
(2) Es gibt eine erfüllende Belegung µ für α.
((1) =⇒ (2)) Sei C eine Clique von G mit w(C) = k. Da für alle Literale einer Klausel von α gilt, dass die zugehörigen Knoten in G nicht durch eine Kante verbunden
sind, gibt es für jedes i ∈ mit i ≤ k genau einen Knoten a0i,j ∈ C. Sei nun µ eine
Belegung der Variablen aus x1 , . . . , xn , so dass für alle Knoten a0i,j ∈ C gilt, dass µ
den zugehörigen Literalen ai,j den Wahrheitswert wahr zuordnet. Da für alle komplementären Literale in α gilt, dass die die zugehörigen Knoten in G nicht durch
eine Kante verbunden sind, ist µ wohldefiniert. Weiter existiert in jeder Klausel
(ai,1 ∨ ai,2 ∨ ai,3 ) von α mindestens ein Literal, nämlich das Literal ai,j , dem durch
µ der Warheitswert wahr zugeordnet ist. Folglich ist µ eine erfüllende Belegung
für α.
N
((2) =⇒ (1)) Sei nun umgekehrt µ eine erfüllende Belegung für α, und damit eine
erfüllende Belegung für jede Klausel in α. Folglich gibt es für jedes i ∈ mit i ≤ k
ein Literal ai,j , dem durch µ der Wahrheitswert wahr zugeordnet wird. Da µ wohldefiniert ist, können diese Literale nicht paarweise komplementär sein. Daraus
folgt unmittelbar, dass die diesen Literalen zugeordneten Knoten a0i,j eine Clique
der Größe k in G bilden.
N
Zusammen mit Lemma 7.1 folgt sofort:
Satz 7.2
Das Maximierungsproblem MaxIndependetSet ist NP-schwer.
S
Seite 94
Ü
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Übung 7.1
Zeigen Sie, dass das Maximierungsproblem MaxIndependetSet ebenfalls
NP-schwer ist.
Man kann sich nun leicht davon überzeugen, dass sich die beiden Maximierungsprobleme MaxClique und MaxIndependetSet auch in Bezug auf ihre Approximierbarkeit nur unwesentlich unterscheiden. Insbesondere gilt:
S
Satz 7.3
Sei δ ∈ Q+ mit δ < 1. Dann sind die folgenden Aussagen äquivalent:
(1) Es gibt einen Approximationsalgorithmus A für das Maximierungsproblem MaxClique mit dem Approximationsfaktor δ.
(2) Es gibt einen Approximationsalgorithmus B für das Maximierungsproblem MaxIndependetSet mit dem Approximationsfaktor δ.
Beweis. ((1) =⇒ (2)) Sei A ein Approximationsalgorithmus für MaxClique mit
dem Approximationsfaktor δ. Wir behaupten, dass der folgende Algorithmus B
die gewünschten Eigenschaften hat.
Algorithmus B für MaxIndependentSet
Eingabe: Graph G = (V, E)
1
2
3
4
Bestimme den Komplementgraphen Gc = (V, E c ) des Graphen G.
I 0 := Gc ;
C 0 := A(I 0 );
return C 0 ;
Offenbar kann man den Komplementgraphen Gc des gegebenen Graphen G effizient bestimmen. Also ist B ebenfalls ein effizienter Algorithmus.
Sei nun G = (V, E) der gegebene Graph, Gc = (V, E c ) sein Komplementgraph,
Opt(Gc ) eine optimale Clique in Gc sowie C 0 die von A bestimmte Clique in Gc .
Da A ein Approximationsalgorithmus für MaxClique mit dem Approximationsfaktor δ ist, gilt δ · w(Opt(Gc )) ≤ w(C 0 ). Aus Lemma 7.1 folgt nun, dass C 0 und
Opt(Gc ) unhabhängige Mengen in G sind und dass Opt(Gc ) sogar eine optimale
unabhängige Menge ist. Also ist B ein Approximationsalgorithmus für MaxIndependentSet, der ebenfalls den Approximationsfaktor δ hat.
((2) =⇒ (1)) Diese Richtung kann man analog zeigen.
Ü
Übung 7.2
Beweisen Sie die fehlende Richtung von Satz 7.3.
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 95
Im Folgenden konzentrieren wir uns erst einmal auf das Maximierungsproblem
MaxIndependetSet und übertragen im Anschluss die erzielten Ergebnisse auf das
Maximierungsproblem MaxClique.
Zunächst sollte klar sein, dass das Maximierungsproblem MaxIndependetSet trivialerweise streng NP-schwer und deshalb nicht vollständig approximierbar ist.
Grund hierfür ist, dass man einen gegebenen Graphen effizient kodieren kann,
ohne irgendeine Zahl binär zu kodieren.
Man kann sogar folgende Aussage beweisen.
Satz 7.4
S
Es gibt ein δ0 ∈ Q+ mit δ0 < 1, so dass gilt:
• Aus P 6= NP folgt, dass es keinen Approximationsalgorithmus konstanter Güte für das Maximierungsproblem MaxIndependetSet gibt,
der den Approximationsfaktor δ0 hat.
Da ein Beweis von Satz 7.4 (siehe etwa Jansen and Margraf [2008]) Begrifflichkeiten und Zusammenhänge verwendet, die über den Gegenstand unserer Betrachtungen weit hinausgehen, führen wir den Beweis hier nicht.
Stattdessen schauen wir uns, weshalb aus diesem Nichtapproximierbarkeitsergebnis folgt, dass es für kein δ ∈ Q+ mit δ < 1 einen Approximationsalgorithmus für
MaxIndependetSet mit dem Approximationsfaktor δ gibt (siehe Satz 7.4). Dazu
bedarf es der folgenden Vorüberlegungen.
Sei G = (V, E) ein Graph. Das Quadrat G2 = (V 2 , E 2 ) von G ist nun derjenige
Graph mit:
• V 2 = {(v, v 0 ) | v, v 0 ∈ V },
• zwei Knoten (v1 , v10 ) und (v2 , v20 ) sind genau dann durch eine Kante in G2
verbunden, wenn v1 und v2 oder v10 und v20 durch eine Kante in G verbunden
sind, d.h. {(v1 , v10 ), (v2 , v20 )} ∈ E 2 gdw. {v1 , v2 } ∈ E oder {v10 , v20 } ∈ E.
Zur Illustration dieses Begriffs betrachten wir das folgende Beispiel.
Beispiel 7.7
Sei G = (V, E) der im linken Teil von Abbildung 7.5 dargestellte Graph mit
drei Knoten. Das Quadrat G2 von G hat neun Knoten und findet sich im
rechten Teil von Abbildung 7.5.
v1
(v1 ,v1 )
(v1 ,v2 )
(v1 ,v3 )
v2
(v2 ,v1 )
(v2 ,v2 )
(v2 ,v3 )
v3
(v3 ,v1 )
(v3 ,v2 )
(v3 ,v3 )
B
Abb. 7.5: Graph G
für Beispiel 7.7 (links)
und dessen Quadrat
G2 (rechts).
Seite 96
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Es gibt einen sehr einfachen Zusammenhang zwischen der Größe unabhängiger
Mengen in G und G2 .
B
Beispiel 7.8
Wir betrachten noch einmal den Graphen G aus Abbildung 7.5. Offenbar
sind die Mengen U = {v1 , v3 } und U 0 = {(v1 , v1 ), (v1 , v3 ), (v3 , v1 ), (v3 , v3 )}
unabhängige Mengen in G bzw. in G2 . Man beachte, dass w(U 0 ) = w(U )2
gilt.
Allgemein gilt:
Lemma 7.3. Sei G = (V, E) ein Graph, G2 = (V 2 , E 2 ) das Quadrat von G und k ∈
Dann sind die folgenden Aussagen äquivalent:
N.
(1) Es gibt eine unabhängige Menge U in G mit w(U ) = k.
(2) Es gibt eine unabhängige Menge U 0 in G2 mit w(U 0 ) = k 2 .
Beweis. ((1) =⇒ (2)) Sei U = {u1 , . . . , uk } eine unabhängige Menge in G mit
w(U ) = k. Wir betrachten die Menge U 0 = {(ui , uj ) | 1 ≤ i, j ≤ k}. Man beachte, dass |U 0 | = k 2 gilt. Da U eine unabhängige Menge in G ist, gibt es keine
Kante in G, die zwei Knoten aus U miteinander verbindet. Also muss auch U 0
eine unabhängige Menge in G2 sein, und zwar eine mit w(U 0 ) = k 2 gilt.
((2) =⇒ (1)) Sei U 0 = {(u1 , u01 ), . . . , (uk2 , u0k2 )} eine unabhängige Menge in G2
mit w(U ) = k 2 . Sei U1 = {u1 , . . . , uk2 } und U2 = {u01 , . . . , u0k2 }. Eine dieser beiden Mengen muss nun mindestens k Elemente enthalten. (Man beachte, dass aus
|U1 | < k und |U2 | < k sofort |U | < k 2 folgt.) Sei also o.B.d.A. |U1 | ≥ k. Da U 0
eine unabhängige Menge in G2 ist, gibt es keine Kante in G2 , die zwei Knoten aus
U 0 miteinander verbindet. Aus der Definition von G2 folgt, dass es dann insbesondere auch keine Kante in G geben kann, die Knoten aus U1 miteinander verbindet. Also ist U1 eine unabhängige Menge in G mit w(G) ≥ k. Folglich ist jede
k-elementige Teilmenge U ⊆ U1 eine unabhängige Menge in G mit w(U ) = k.
Aus Lemma 7.3 folgt nun:
S
Satz 7.5
Sei δ ∈ Q+ mit δ < 1. Dann gilt:
• Wenn es einen Approximationsalgorithmus A für MaxIndependetSet
mit dem Approximationsfaktor δ gibt, so gibt es auch einen
√ Approximationsalgorithmus B mit dem Approximationsfaktor δ.
Beweis. Sei A ein Approximationsalgorithmus für MaxIndependetSet mit dem
Approximationsfaktor δ. Ferner sei p ein Polynom, dass die Laufzeit von A beschränkt, d.h. A benötigt nur O(p(|I|)) Rechenschritte, um eine Instanz I = G zu
verarbeiten.
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 97
Wir behaupten, dass der folgende Algorithmus B die gewünschten Eigenschaften
hat.
Algorithmus B für MaxIndependentSet
Eingabe: Graph G = (V, E)
1
2
3
4
5
6
7
8
9
10
Bestimme das Quadrat G2 des Graphen G.
I 0 := G2 ;
U 0 := A(I 0 ) (/* wobei U 0 = {(u1 , u01 ), · · · , (ur , u0r )} gilt */);
U1 := {u1 , . . . , ur } ;
U2 := {u01 , . . . , u0r } ;
if |U1 | ≥ |U2 | then
return U1 ;
else
return U2 ;
fi
Sei G = (V, E) der gegebene Graph mit |V | = n und Opt(I) eine optimale unabhängige Menge für die Instanz I = G. Ferner sei Opt(I 0 ) eine optimale unabhängige Menge für die Instanz I 0 = G2 . Man beachte, dass aus Lemma 7.3 folgt, dass
w(Opt(I 0 )) ≥ w(Opt(I))2 gilt.
Offenbar enthält G2 genau n2 Knoten und maximal O(n4 ) Kanten. Folglich muss
garantiert |I 0 | ≤ |I|4 sein. Also benötigt B nur O(p(|I|)4 ) Rechenschritte, um die
Instanz I zu verarbeiten. Da B eine unabhängige Menge im gegebenen Graphen G
bestimmt (siehe den zweiten Teil im Beweis von Lemma 7.3), ist B ein Approximationsalgorithmus für MaxIndependetSet.
Da A den Approximationsfaktor δ hat, gilt δ · w(Opt(I 0 )) ≤ w(U 0 ). Zusammen mit
w(Opt(I 0 )) ≥ w(Opt(I))2 folgt daraus, dass δ · w(Opt(I))2 ≤ w(U 0 ) gilt.
Seien nun U1 und U2 die anhand von U 0 bestimmten Teilmengen der Knotenmenge von G sowie U die von B ausgegebene unabhängige Menge in G. Man beachte
an dieser Stelle, dass |U | = max{|U1 |, |U2 |} unmittelbar |U 0 | ≤ |U |2 impliziert.
Also
ist w(U 0 ) ≤ w(U )2 , und damit folgt δ · w(Opt(I))2 ≤ w(U )2 , was sofort
√
δ · w(Opt(I)) ≤ w(U ) impliziert.
Aus Satz 7.4 und 7.5 folgt nun das angekündigte Nichtapproximierbarkeitsresultat für MaxIndependetSet.
Satz 7.6
Für alle δ ∈ Q+ mit δ < 1 gilt:
• Aus P 6= NP folgt, dass es keinen Approximationsalgorithmus konstanter Güte für das Maximierungsproblem MaxIndependetSet gibt,
der den Approximationsfaktor δ hat.
Beweis. Sei δ ∈ Q+ mit δ < 1. Wir nehmen an, dass es einen Approximationsalgorithmus A für MaxIndependetSet mit dem Approximationsfaktor δ gibt.
S
Seite 98
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Nach Satz 7.4 wissen wir, dass aus P 6= NP folgt, dass es ein δ0 ∈ Q+ mit δ0 < 0
gibt, so dass es keinen Approximationsalgorithmus für MaxIndependetSet mit
dem Approximationsfaktor δ0 gibt.
Falls δ ≥ δ0 gilt, ist A auch ein Approximationsalgorithmus für MaxIndependetSet mit dem Approximationsfaktor δ0 , was direkt Satz 7.4 widerspricht.
N
√
Sei nun δ <
δ0 und ` ∈ so gewählt, dass N δ ≥ δ0 gilt, wobei N := 2` ist. Ferner
√
sei δ 0 := N δ. Wenn man nun Satz 7.5 genau `-mal anwendet, kann man zeigen,
dass es einen Approximationsalgorithmus B für MaxIndependetSet mit dem Approximationsfaktor δ 0 gibt. Wegen δ 0 ≥ δ0 ist B auch einen Approximationsalgorithmus für MaxIndependetSet mit dem Aproximationsfaktor δ0 , was wiederum
Satz 7.4 widerspricht.
Das Maximierungsproblem MaxIndependetSet ist also ähnlich schwer approximierbar wie das in Kapitel 4 untersuchte Minimierungsproblem MinTravelingSalesman.
Dass es für MaxIndependetSet höchstwahrscheinlich keine Approximationsalgorithmen konstanter Güte gibt, ist jedoch kein Grund, sich gar nicht weiter mit diesem Optimierungsproblem auseinanderzusetzen. Wie wir im Folgenden sehen
werden, gibt es für MaxIndependetSet Approximationsalgorithmen, die zwar keine konstante Güte haben, aber trotzdem recht brauchbare approximative Lösungen liefern.
Wir kümmern uns im Folgenden um einen einfachen Algorithmus GreedyIS, mit
dem man unabhängige Mengen in einem gegebenen Graphen bestimmen kann.
Bevor wir den Algorithmus formal beschreiben und analysieren, illustrieren wir
seine seine Arbeitsweise anhand eines Beispiels.
B
Beispiel 7.9
Es geht darum, im Graphen G = (V, E) (siehe Abbildung 7.6 links) eine
unabhängige Menge U zu bestimmen.
In der ersten Runde wird ein Knoten v mit minimalem Grad in G (hier der
Knoten v1 ) in U aufgenommen. Anschließend wird ein Teilgraph G0 von G
gebildet, indem
• alle Knoten aus G gestrichen werden, die mit v durch eine Kante verbunden sind (diese Knoten dürfen nicht mehr in die unabhängige
Menge U aufgenommen werden),
• alle Kanten aus G gestrichen werden, die eine der gestrichenen Knoten
als Ecke haben (diese Kanten sind für die weiteren Schritte unerheblich, da sie die in G0 verbliebenen Knoten mit Knoten verbinden, die
nicht zu U gehören dürfen)
Der nach der ersten Runde konstruierte Teilgraph G0 ist in der Mitte von
Abbildung 7.6 dargestellt.
In der zweiten Runde wird ein Knoten v 0 mit einen minimalen Grad in G0
(hier der Knoten v3 ) in die Menge U aufgenommen. Danach wird nach den
obigen Regeln ein Teilgraph G00 von G0 gebildet (siehe Abbildung 7.6 rechts).
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 99
In der letzten Runde wird der einzige Knoten von G00 in die Menge U aufgenommen. Da der nach den obigen Regeln gebildete Teilgraph G000 von G00
keine Knoten mehr enthält, wird gestoppt.
Der Approximationsalgorithmus GreedyIS bestimmt also die unabhängige
Menge U = {v1 , v2 , v5 }, die sogar optimal ist.
v5
v5
v1
v2
v4
v3
v5
v2
v4
Der Approximationsalgorithmus GreedyIS kann wie folgt beschrieben werden:
Algorithmus GreedyIS für MaxIndependentSet
Eingabe: Graph G = (V, E)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
U := ∅;.
t := 1;
Vt := V ;
Et := E;
while Vt 6= ∅ do
Gt := (Vt , Et );
Bestimme einen Knoten vt in Gt mit minimalem Grad.
U := U ∪ {vt };
Bestimme die Menge Vt− aller aus Gt zu löschenden Knoten, wobei
Vt− den Knoten vt sowie alle Knoten aus Vt enthält, die mit vt durch
eine Kante verbundenen sind.
Bestimme die Menge Et− aller aus Gt zu löschenden Kanten, wobei
Et− alle Kanten aus Et enthält, die mindestens einen Knoten aus Vt−
als Ecke haben.
Vt+1 := Vt \ Vt− ;
Et+1 := Et \ Et− ;
t := t + 1;
od
return U ;
Offensichtlich bestimmt GreedyIS eine unabhängige Menge im gegebenen Graphen G = (V, E). Genauso klar sollte sein, dass hierzu O(|V | + |E|) Rechenschritte ausreichen. (Jeder Knoten und jede Kante in G wird nur einmal gelöscht.) Also
ist die Laufzeit von GreedyIS polynomiell in der Größe der zu verarbeitenden
Instanz I beschränkt und GreedyIS deshalb ein Approximationsalgorithmus für
MaxIndependentSet.
Es gibt zwei Möglichkeiten, Aussagen über die Qualität der von GreedyIS bestimmten Lösungen abzuleiten. Wir beginnen ganz klassisch damit, die Approximationsgüte von GreedyIS zu beschreiben (siehe Satz 7.7). Anschließend schauen
wir uns an, wie man – unter Berücksichtigung struktureller Eigenschaften des zu
verarbeitenden Graphen – eine untere Schranke für die Größe der von GreedyIS
bestimmten unabhängigen Menge angeben kann (siehe Satz 7.8).
Abb. 7.6: Graphen G
(links), G0 (mitte) und
G00 für Beispiel 7.9.
Seite 100
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Satz 7.7
S
Sei G = (V, E) ein Graph, Opt(I) eine optimale unabhängige Menge für die
Instanz I := G sowie U die von GreedyIS bestimmte unabhängige Menge.
Dann gilt:
|E| + |V |
w(Opt(I)) ≤ w(U ) ·
.
|V |
Also hat GreedyIS eine Approximationsgüte δ(I) :=
|V |
|E|+|V | .
Beweis. Sei G = (V, E) die gegebene Instanz I und U die von GreedyIS bestimmte
unabängige Menge sowie Opt(I) eine optimale unabhängige Menge für diese Instanz. Ferner bezeichne t0 die Anzahl der Runden, die GreedyIS benötigt, um die
Instanz I zu verarbeiten, d.h. die Anzahl der Runden, in denen ein Knoten in U
aufgenommen wird. Man beachte, dass w(U ) = t0 gilt. (GreedyIS nimmt in jeder
Runde genau einen Knoten in die Menge U auf.)
N
Sei nun t ∈ mit t ≤ t0 . Dann bezeichnen wir mit αt die Anzahl der in Runde t
gelöschten Knoten, mit βt die Anzahl der in Runde t gelöschten Knoten, die zur
optimalen unabhängigen Menge Opt(I) gehören, sowie mit γt die Anzahl der in
Runde t gelöschten Kanten, d.h. αt := |Vt− |, βt := |Vt− ∩ Opt(I)| und γt := |Et− |.
Da nach Runde t0 offenkundig alle Knoten und Kanten aus dem gegebenen Graphen gestrichen wurden, erhalten wir:
Fakt 1. Es gilt:
t0
X
αt = |V |,
t0
X
βt = w(Opt(I)) sowie
t=1
t=1
t0
X
γt = |E|.
t=1
Die Zahl der Kanten, die in Runde t gelöscht werden, steht wie folgt mit der Zahl
der in dieser Runde aus Gt gelöschten Knoten in Beziehung.
Beobachtung 1. Für alle t ∈
N mit t ≤ t0 gilt:
αt · (αt − 1) + βt · (βt − 1)
≤ γt .
2
.
Begründung. Sei t die betrachtete Runde und vt der in dieser Runde in U aufgenommene Knoten. Wie in GreedyIS spezifiziert, enthält Et− genau die Kanten des
Teilgraphen Gt , die eine Ecke haben, die zur Menge Vt− gehört. Da vt ein Knoten
mit einem minimalen Grad in Gt ist, haben alle Knoten in Vt− mindestens den
selben Grad wie vt . Da in Vt− neben vt nur Knoten vorkommen, die mit vt durch
eine Kante verbunden sind, haben alle Knoten in Vt− mindestens den Grad αt − 1.
Die Menge Et− wird nun offensichtlich minimal, wenn alle Knoten in Vt− paarweise durch eine Kante verbunden sind. (jede dieser Kanten wird lax gesprochen
zweimal aus Et gestrichen.) Das sind genau αt ·(α2t −1) Kanten und damit folgt
αt ·(αt −1)
≤ γt .
2
Wir unterscheiden jetzt zwei Fälle.
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 101
Fall 1. βt ≤ 1.
Dann ist βt · (βt − 1) = 0 und unsere Beobachtung folgt sofort aus
αt ·(αt −1)
2
≤ γt .
Fall 2. βt > 1.
Da die Knoten in Opt(I) eine unabhängige Menge in G bilden, gibt es auch im
Teilgraphen Gt keine Kanten, die Knoten aus der Menge Vt− ∩ Opt(I) verbinden.
Da βt = |Vt− ∩Opt(I)| gilt, kann es in diesem Fall nur maximal αt ·(α2t −1) − βt ·(β2t −1)
Kanten geben, die Knoten in Vt− verbinden. Für jedem Knoten v 0 aus der Menge
Vt− ∩ Opt(I) muss es dann aber mindestens βt − 1 Kanten geben, die v 0 mit einem Knoten verbinden, der nicht zur Menge Vt− gehört. (Jede dieser Kanten wird
deshalb lax gesprochen garantiert nur einmal aus Et gestrichen). Also müssen in
diesem Fall mindestens αt ·(α2t −1) − βt ·(β2t −1) +βt ·(βt −1) Kanten aus Et gestrichen
t ·(βt −1)
werden. Damit gilt αt ·(αt −1)+β
≤ γt und unsere Beobachtung folgt.
2
Aus Beobachtung 1 folgt nun
t0
X
αt · (αt − 1)
2
t=1
+
t0
X
βt · (βt − 1)
2
t=1
≤
t0
X
γt
t=1
und damit auch
t0
X
t=1
αt2
+
t0
X
βt2
≤2·
t0
X
γt +
t=1
t=1
t0
X
αt +
t0
X
βt .
t=1
t=1
Aus Fakt 1 folgt unter Verwendung der in Exkurs 7.1 abgleiteten Ungleichung
t
t
0
0
X
X
|V |2
w(Opt(I))2
≤
αt2 sowie
≤
βt2 .
t0
t
0
t=1
t=1
Also ergibt sich zusammen mit Fakt 1:
t0
t0
t0
X
X
X
|V |2
w(Opt(I))2
βt = 2 · |E| + |V | + w(Opt(I)).
+
≤2·
γt +
αt +
t0
t0
t=1
t=1
t=1
Da t0 = w(U ) gilt, kann man die linke Seite dieser Ungleichung auch in der Form
|V |2
w(Opt(I))2
w(Opt(I))
|V |2
+
=
·
+ w(Opt(I))
w(U )
w(U )
w(U )
w(Opt(I))
schreiben. Aso gilt
w(Opt(I))
2 · |E| + |V | + w(Opt(I))
≤ |V |2
w(U )
+ w(Opt(I))
w(Opt(I))
und damit auch
2 · |E| + |V | + w(Opt(I))
· w(U ).
w(Opt(I)) ≤ |V |2
+
w(Opt(I))
w(Opt(I))
Seite 102
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Um die Behauptung unseres Satzes zu beweisen, genügt es zu zeigen:
Beobachtung 2. Es gilt:
2 · |E| + |V | + w(Opt(I))
|E| + |V |
≤
.
|V |2
|V |
w(Opt(I)) + w(Opt(I))
Begründung. Da w(Opt(I)) ≤ |V | gilt, ist diese Beobachtung verifiziert, wenn nachgewiesen ist, dass
2 · |E| + 2 · |V |
|V |2
w(Opt(I))
+ w(Opt(I))
≤
|E| + |V |
|V |
gilt. Um diese Ungleichung zu beweisen, benutzen wir den folgenden Fakt, den
wie im Anschluss verifizieren.
Fakt 2. Es gilt:
|V |2
+ w(Opt(I)) ≥ 2 · |V |.
w(Opt(I))
Aus Fakt 2 impliziert offenbar, dass
2 · |E| + 2 · |V |
|V |2
w(Opt(I))
+ w(Opt(I))
≤
|E| + |V |
2 · |E| + 2 · |V |
=
2 · |V |
|V |
gilt und damit ist Beobachtung 2 verifiziert.
Zum Abschluss kümmern uns um Fakt 2.
Aus |V | ≥ w(Opt(I)) folgt sofort (|V | − w(Opt(I)))2 ≥ 0 und damit auch
|V |2 + w(Opt(I))2 ≥ 2 · |V | · w(Opt(I)),
was sofort Fakt 2 impliziert.
E
Exkurs 7.1
Seien x1 , . . . , xk ∈
N und n := Pki=1 xi. Dann gilt:
k
X
(xi )2 ≥
i=1
n2
.
k
Um diese Behauptung zu verifizieren, wählen wir uns Zahlen y1 , . . . , yk
aus Q, so dass nk + yi = xi für alle i ≤ k gilt. (Man beachte, dass offenbar
Pk n
Pk
Pk
n
i=1 k + yi = n,
i=1 yi = 0 gilt.)
i=1 k = n und damit auch
Also gilt:
k
X
i=1
x2i =
k X
n
i=1
k
+ yi
2
=
k 2
X
n
i=1
k
+2·
k
k
n 2
X
n X
n2
·
yi +
yi2 ≥ k ·
=
.
k i=1
k
k
i=1
| {z } | {z }
=0
>0
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 103
Satz 7.7 belegt, dass GreedyIS für Graphen mit einer kleinen Kantenzahl unabhängige Mengen bestimmt, die nicht viel kleiner als die optimalen unabhängigen
Mengen sind. Für Graphen mit einer großen Kantenzahl liefert die Abschätzung
aus Satz 7.7 jedoch kaum verwertbare Aussagen.
Beispiel 7.10
N
Sei n ∈ und Gn = (Vn , En ) ein Graph mit Vn = {a1 , . . . , an } ∪ {b1 , . . . , bn },
der für alle i, j ∈ mit i, j ≤ n die Kante {ai , bj } enthält.
N
Offenbar gibt es zwei optimale unabhängige Menge im Graphen Gn , und
zwar die Mengen U1 = {a1 , . . . , an } und U2 = {b1 , . . . , bn }. Man kann sich
leicht davon überzeugen, dass GreedyIS bei Eingabe des Graphen Gn auch
eine dieser beiden unabhängigen Mengen bestimmt.
Da |Vn | = 2n, |En | = n2 und w(Opt(In )) = n gilt, liefert Satz 7.7, dass für die
von GreedyIS bestimmte Lösung Un gilt:
2n2
2n
|Vn |
· w(Opt(In )) = 2
=
.
w(Un ) ≥
|En | + |Vn |
n + 2n
n+2
Damit wissen wir, dass GreedyIS bei Eingabe des Graphen Gn – unabhängig
davon, wie groß n wirklich ist – eine unabhängige Menge bestimmt, die garantiert zwei Elemente enthält. Diese Aussage ist nicht besonders hilfreich –
insbesondere spiegelt sie nicht wider, wie gut die von GreedyIS tatsächlich
bestimmte Lösung ist.
Zu Beginn dieses Kapitels haben wir gesehen, dass eine Knotenfärbung eines Graphen G eine Zerlegung der Knotenmenge von G in unabhängige Mengen induziert (siehe Lemma 7.2). Also ist es naheliegend, diesen Zusammenhang auszunutzen, um eine brauchbarere untere Schranke für die Größe der von GreedyIS
bestimmten unabhängigen Mengen abzuleiten. Dabei wird sich das folgende Lemma als hilfreich erweisen.
Vorab sei daran erinnert, dass die chromatische Zahl χ(G) eines Graphen G angibt,
wie viele Farben minimal für eine Knotenfärbung von G benötigt werden. Ferner
sei daran, dass für jeden Knoten v in G die Zahl grad(v) angibt, wie viele Kanten
in G den Knoten v als Ecke haben.
Lemma 7.4. Sei G = (V, E) ein Graph mit χ(G) = k. Dann gilt:
• Es gibt einen Knoten v in G mit grad(v) ≤
1−
1
k
· |V | .
Beweis. Aus Lemma 7.2 folgt, dass es eine Zerlegung der Knotenmenge von G in
k unabhängige Mengen gibt. Sei (U1 , . . . , Uk ) eine solche Zerlegung. Offenbar gilt
Pk
|V |
i=1 |Ui | = |V | und es muss deshalb ein i ≤ k mit |Ui | ≥ k geben.
Sei nun |Ui | mit |Ui | ≥ |Vk | und v ein Knoten in Ui . Da Ui eine unabhängige Menge
ist, gibt es keine Kante in G, die v mit einem anderen Knoten in Ui verbindet.
Also gibt es in G nur Kanten, die v mit einem Knoten in der Menge V 0 := V \ Ui
verbinden. Also gilt grad(v) ≤ |V 0 |.
B
Seite 104
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Da |Ui | ≥ |Vk | und |V 0 | = |V | − |Ui |gilt, muss auch |V 0 | ≤ |V | − |Vk | , und damit
grad(v) ≤ 1 − k1 · |V |gelten. Da grad(v) eine natürliche Zahl ist, erhalten wir
grad(v) ≤ 1 − k1 · |V | .
Wir sind jetzt in der Lage die angekündigte untere Schranke abzuleiten, indem
wir die chromatischen Zahl χ(G) des gegebenen Graphen G mit der Größe der
von GreedyIS bestimmten unabhängigen Menge in Beziehung setzen.
S
Satz 7.8
Sei G = (V, E) ein Graph mit χ(G) = k. Ferner sei U die von GreedyIS bei
Eingabe von G bestimmte unabhängige Menge. Dann gilt:
• |U | ≥ logk
|V |
3
.
Beweis. Im Folgenden nehmen wir, an dass χ(G) ≥ 2 gilt. (Falls die chromatische
Zahl von G gleich eins ist, kann G keine Kanten enthalten. Dass GreedyIS in diesem Fall die Kantenmenge von G als Lösung bestimmt, sollte offensichtlich sein.
Also folgt die Behauptung unmittelbar.)
Für unsere Argumentation ist wichtig, dass wegen χ(G) ≥ 2 auch |V | ≥ 2 gilt.
Wir benutzen in diesem Beweis die in der Beschreibung von GreedyIS verwendeten Bezeichnungen. Sei t0 die Anzahl der Runden, die GreedyIS benötigt, um die
Eingabe G zu verarbeiten sowie U die bestimmte unabhängige Menge. Es sei daran erinnert, dass |U | = t0 gilt. Für jedes t ∈ mit t ≤ t0 sei Vt die Knotenmenge
des von GreedyIS in Runde t verarbeiteten Teilgraphen Gt = (Vt , Et ), αt := |Vt |
sowie vt der Knoten, der in Runde t in die unabhängige Menge U aufgenommen
wird.
N
Für unseren Beweis ist die folgende Beobachtung wichtig.
Beobachtung. Für alle t ≤ t0 gilt: grad(vt ) ≤ 1 −
1
k
· |Vt |.
Begründung. Falls t = 1 ist, folgt die Behauptung direkt aus Lemma 7.4. (Man beachte, dass G1 = G und χ(G) = k gilt und dass v1 ein Knoten mit einem minmalen
Grad in G1 ist.)
Sei nun t > 1. Da Gt ein Teilgraph von G ist, gibt es ein k 0 ≤ k mit χ(Gt ) = k 0 . Da
vt ein Knoten mit einem minmalen Grad in Gt ist, ergibt sich unter Ausnutzung
von Lemma 7.4, dass grad(vt ) ≤ 1 − k10 · |Vt | gilt. Da k 0 ≤ k impliziert, dass
1 − k10 ≤ 1 − k1 gilt, folgt wieder die Behauptung.
Sei nun t ≤ t0 . Da in Runde t sowohl der Knoten vt als auch alle Knoten aus Vt
gestrichen werden, die im Teilgraphen Gt durch eine Kante mit dem Knoten vt
verbunden sind, gilt αt+1 = αt − grad(vt ) − 1. Also folgt aus unserer Beobachtung
αt
1
αt+1 ≥ αt −
1−
· αt − 1 ≥
− 1.
k
k
(Man beachte, das αt − αkt = 1 − k1 · αt ≥ 1 − k1 · αt gilt.)
Es sei daran erinnert, dass k ≥ 2 gilt und dass deshalb auch α1 ≥
α1
k
− 1 gilt.
7.2 Maximale Cliquen und maximale unabhängige Mengen
Seite 105
In dem man die bisher abgeleiteten Abschätzungen iterativ benutzt, erhält man:
• α2 ≥
• α3 ≥
• α4 ≥
α1
k
α2
k
α3
k
−1≥
−1≥
−1≥
α1
k
−1
k
α1
k2
1
−k
−1
k
α1
k3
α1
k2
−
1
k
−1=
α1
k3
−
−1=
1
− k12 − k
−1
k
−1=
− 1,
1
k2
α1
k4
−
−
1
k
1
k3
− 1,
−
1
k2
−
1
k
− 1,
• ...
Für alle t ∈
N mit t ≤ t0 gilt also
t−1
αt ≥
Wegen k ≥ 2 gilt
auch
1 i
2
≥
t−1
α1 X
αt ≥ t −
k
i=0
1 i
k
α1 X
−
kt
i=0
für alle i ∈
N0. Also muss für alle t ∈ N mit t ≤ t0
i
t−1 i
∞ i
α1 X 1
α1 X 1
1
≥ t −
≥ t −
k
k
2
k
2
i=0
i=0
gelten. Da
∞ i
X
1
i=0
gilt, folgt αt ≥
α1
kt
i
1
.
k
2
=2
− 2 für alle t ≤ t0 .
Nachdem die Vorüberlegungen abgeschlossen sind, können wir jetzt die Größe
der von GreedyIS bestimmten unabhängigen Menge U abschätzen. GreedyIS arbeitet solange, wie die Knotenmenge des aktuell zu zu verarbeitenden Teilgraphen Gt von G mindestens eine Knoten enthält, d.h. solange αt ≥ 1 gilt.
Da aus αt ≥ αkt1 − 2 und αt ≥ 1 sofort 0 ≥ αkt1 − 3 folgt, ist nun zu klären, für
welche t die Ungleichung 0 ≥ αkt1 − 3 bzw. – äquivalent dazu – die Ungleichung
3 ≥ αkt1 erfüllt ist.
Ein t erfüllt nun genau dann die letzte Ungleichung, wenn es auch die Ungleichung k t ≥ α31 bzw. logk (k t ) ≥ logk ( α31 ) erfüllt. Wegen logk (k t ) = t sind das
genau diejenigen t, für die t ≥ logk ( α31 ) gilt.
Für einen Graphen G mit χ(G) ≥ 2 gilt also t0 ≥ logk ( α31 ). Da GreedyIS in jeder
der Runde (also mindestens t0 -mal) einen Knoten in seine Lösung aufnimmt und
α1 = |V | gilt, muss für die von GreedyISbestimmte
unabhängige Menge U die zu
beweisende untere Schranke |U | ≥ logk
|V |
3
gelten.
Zum Abschluss dieses Kapitels sei angemerkt, dass aus Satz 7.3 und 7.6 sofort
folgt:
Satz 7.9
Für alle δ ∈ Q+ mit δ < 1 gilt:
• Aus P 6= NP folgt, dass es keinen Approximationsalgorithmus konstanter Güte für das Maximierungsproblem MaxClique gibt, der den
Approximationsfaktor δ hat.
S
Seite 106
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Ferner sei darauf hingewiesen, dass man den vorgestellten Approximationsalgorithmus GreedyIS natürlich für das Maximierungsproblem MaxClique benutzen
kann. Um in einem gegebenen Graphen G = (V, E) eine Clique C zu bestimmen,
bestimmt man im Komplementgraphen Gc = (V, E c ) von G mit GreedyIS eine
unabhängige Menge U . Da diese Menge U gleichzeitig eine Clique in G ist (siehe Lemma 7.1), genügt es C = U zu setzen und C auszugeben. Da |E C | ≤ |E|2
gilt, ist GreedyIS auch ein Approximationsalgorithmus für MaxClique, wobei die
unteren Schranken für die Güte der mit GreedyIS bestimmten Lösungen gültig
bleiben (siehe Satz 7.7 und 7.8).
7.3 Minimale Knotenfärbungen
Beim Minimierungsproblem MinNodeColoring geht es darum, die Knoten eines
gegebenen Graphen G = (V, E) mit möglichst wenigen Farben zu färben.
Optimierungsproblem MinNodeColoring
Eingabe: Instanz G = (V, E)
Ausgabe: Knotenfärbung c für den Graphen G mit minimaler Farbenanzahl
Wir beschäftigen uns zunächst mit der Frage, weshalb auch MinNodeColoring
ein NP-schweres Optimierungsproblem ist. Da eine enge Beziehung zwischen
unabhängigen Mengen und Knotenfärbungen besteht (siehe Lemma 7.2), scheint
es naheliegend, diese Aussage wie folgt zu beweisen:
Man nimmt an, dass es einen einen effizienten Algorithmus A für MinNodeColoring gibt. Um eine maximale unabhängige Menge U in einem gegeben Graphen
zu bestimmen, bestimmt man zunächst mit A eine optimale Knotenfärbung c in
G und anschließend die maximale unabhängige Menge Ui in der durch c induzierten Zerlegung der Knotenmenge von G. Danach setzt man U := Ui und gibt
U aus. Wenn nun Ui eine optimale unabhängige Menge in G wäre, hätte man so
gezeigt, dass es einen effizienten Lösungsalgorithmus für das Maximierungsproblem MaxIndependentSet gibt – und wäre fertig.
Leider hat die obige Argumentation einen kleinen Fehler. Im Allgemeinen gilt
nicht, dass die größte Menge in der durch eine optimale Knotenfärbung induzierten Zerlegung auch eine optimale unabhängige Menge im gegebenen Graphen
ist.
B
Beispiel 7.11
Sei G = (V, E) der in Abbildung 7.7 dargestellte Graph. Man beachte, dass
die angegebene Knotenfärbung optimal ist, d.h. es gilt χ(G) = 3.
Die durch die angegebene Knotenfärbung induzierte Zerlegung der Knotenmenge von G enthält jedoch nur zweielementige Menge. Offenbar ist jedoch
U = {v3 , v5 , v6 } eine optimale unabhängige Menge in G.
Abb. 7.7: Graph für
Beispiel 7.11.
v1
v3
v2
v4
v6
v5
7.3 Minimale Knotenfärbungen
Seite 107
Der Nachweis, dass es höchstwahrscheinlich keinen effizienten Lösungsalgorithmus für das Minimierungsproblem MinNodeColoring gibt, muss also anders geführt werden.
Satz 7.10
Das Minimierungsproblem MinNodeColoring ist ein NP-schweres Optimierungsproblem.
Beweis. Es sei daran erinnert, dass 3SAT ein NP-vollständiges Entscheidungsproblem ist (siehe Kapitel 3). Wir nehmen an, dass A ein effizienter Lösungsalgorithmus für das Maximierungsproblem MinNodeColoring sei. Es genügt zu zeigen,
dass es dann auch einen effizienten Lösungsalgorithmus für 3SAT gibt.
Wir behaupten nun, dass man zu jeder Instanz von 3SAT, d.h. zu jeder Formel α
in 3-konjunktiver Normalform, effizient einen Graphen G konstruieren kann, der
folgende Eigenschaften hat:
• Es gibt keine Knotenfärbung c von G mit zwei Farben.
• Es gibt genau dann eine Knotenfärbung c von G mit drei Farben, wenn die
Formel α erfüllbar ist.
Falls diese Behauptung richtig ist, folgt sofort, dass der folgende Algorithmus B
benutzt werden kann, um effizient die Frage zu beantworten, ob eine gegebene
Formel α erfüllbar ist, d.h. ob α eine ‘Ja’-Instanz von 3SAT ist.
Algorithmus Lösungsgorithmus B für 3SAT
Eingabe: Formel α
1
2
3
4
5
6
7
8
Bestimme den zu α gehörenden Graphen G = (V, E) .
I := G;
c := A(I);
if c benutzt genau Farben then
return ‘α ist erfüllbar’;
else
return ‘α ist nicht erfüllbar’;
fi
Wir verifizieren jetzt die obige Behauptung. Sei α eine Formel in 3-konjunktiver
Normalform, etwa
α = (a1,1 ∨ a1,2 ∨ a1,3 ) ∧ · · · ∧ (ak,1 ∨ ak,2 ∨ ak,3 )
mit ai,j ∈ {x1 , . . . , xn } ∪ {¬x1 , . . . , ¬xn } für alle i, j ∈
N mit i ≤ k und j ≤ 3.
Wir konstruieren zu jeder Klausel αi = (ai,1 ∨ ai,2 ∨ ai,3 ) den in Abbildung 7.8
dargestellten Teilgraphen Gi = (Vi , Ei ).
Dieser Teilgraph Gi ist offensichtlich mit drei Farben färbbar.
Wir betrachten im Folgenden nur Knotenfärbungen c von Gi , welche die drei Farben 0, 1 und 2.
S
Seite 108
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Abb. 7.8: Teilgraph Gi .
¬ai,1
ai,1
vi,1
vi,3
¬ai,2
ai,2
¬ai,3
ai,3
vi,4
vi,2
αi
vi,5
Für jede so gewählte Knotenfärbung c gilt:
Beobachtung 1. c ist genau dann eine Knotenfärbung für Gi , wenn c(αi ) = c(ai,j )
für ein j ∈ mit j ≤ 3 gilt.
N
Begründung. Sei c0 ein partielle Knotenfärbung von Gi , die nur den Knoten αi ,
ai,1 , ai,2 und ai,3 eine Farbe zuordnet, wobei o.B.d.A. c(αi ) = 1 gilt. Dass c0 mit
c0 (αi ) = 1 zu einer Knotenfärbung für Gi fortsetzen kann, wenn c0 (ai,j ) = 1 für
ein j ∈
mit j ≤ 3 gilt, kann man einfach nachrechnen. Dass c0 nicht zu einer
Knotenfärbung für Gi fortgesetzt werden kann, wenn c0 (ai,j ) 6= 1 für alle j ∈
mit j ≤ 3 gilt, sieht man wie folgt. Sei o.B.d.A. c0 (ai,3 ) = 0. Dann muss wegen
c0 (αi ) = 1 auch c0 (vi,5 ) = 2 gelten. Also muss c0 (vi,4 ) = 0 sowie c0 (vi,3 ) = 1 gelten.
Letzteres impliziert, dass entweder c0 (vi,1 ) = 0 und c0 (vi,2 ) = 2 oder c0 (vi,1 ) = 2
und c0 (vi,2 ) = 0 gelten muss. Dass daraus c0 (ai,1 ) = 1 oder c0 (ai,2 ) = 1 folgt, sollte
offensichtlich sein.
N
N
Den oben definierten Teilgraphen Gi = (Vi , Ei ) erweitern wir jetzt wie folgt zu
einem Graphen G0i = (Vi0 , Ei0 ), indem wir:
• drei Knoten B, T und F in die Knotenmenge Vi aufnehmen,
• elf Kanten in die Knotenmenge Ei aufnehmen, und zwar die drei Kanten
{B, T }, {B, F } und {T, F }, die beiden Kanten {B, αi } und {F, αi }, die drei
Kanten {B, ai,1 }, {B, ai,2 } und {B, ai,3 } sowie die drei Kanten {B, ¬ai,1 },
{B, ¬ai,2 } und {B, ¬ai,3 }.
Man kann jetzt Beobachtung 1 benutzen, um zu zeigen, dass für jede Knotenfärbung c des Graphen G0i , die drei Farben verwendet, gilt:
Beobachtung 2. c ist genau dann eine Knotenfärbung für G0i , wenn c(ai,j ) = c(T )
für ein j ∈ mit j ≤ 3 gilt.
N
Begründung. Sei c0 ein partielle Knotenfärbung von G0i , die nur den Knoten T , ai,1 ,
ai,2 und ai,3 eine Farbe zuordnet. Sei o.B.d.A. nun c0 (T ) = 1. Da in G0i der in Abbildung 7.9 dargestellte Teilgraph vorkommt, kann c0 nur dann zu einer Knotenfärbung von G0i fortgesetzt werden, wenn c0 (αi ) = 1 ist. Da jede Knotenfärbung
von G0i auch eine Knotenfärbung von Gi ist, folgt die Behauptung unmittelbar aus
Beobachtung 1.
Abb. 7.9: Relevanter
Teilgraph für Beobachtung 2.
B
αi
T
F
Die bisher definierten Graphen G0i werden jetzt benutzt, um der gegebenen Formel
α einen Graphen G = (V, E) zuzuordnen. Die Knoten- und Kantenmenge von G
ist nun wie folgt definiert:
7.3 Minimale Knotenfärbungen
i≤k
Vi0 ,
i≤k
Ei0 ,
• V =
S
• E=
S
Seite 109
Man beachte, dass in G die Knoten B, T und F genau einmal vorkommen. Außerdem gibt es zu jeder Variable x, die in α benutzt wird, genau einen Knoten x und
einen Knoten ¬x.
Es ist leicht einzusehen, dass G in polynomieller Zeit anhand von α konstruiert
werden kann.
Es bleibt zu zeigen, dass die folgenden Aussagen äquivalent sind:
(1) G kann mit drei Farben gefärbt werden.
(2) Es gibt eine erfüllende Belegung µ für α.
((1) =⇒ (2)) Sei c also eine Knotenfärbung des Graphen G mit den drei Farben
0, 1 und 2, wobei o.B.d.A c(T ) = 1 gilt. Sei nun µ eine Belegung der Variablen
x1 , . . . , xn , die den Variablen genau dann den Wahrheitswert wahr zugeordnet,
wenn c(x1 ) = 1 gilt. Da in G für jede Variable x, die in α benutzt wird, der in
Abbildung 7.10 dargestellte Teilgraph vorkommt, ist die Belegung µ wohldefiniert.
Aus der Definition von G folgt, dass dass c auch eine Knotenfärbung für jeden
Teilgraphen G0i von G ist. Aus Beobachtung 2 folgt nun, dass es in jedem dieser
Teilgraphen Gi einen Knoten ai,j mit c(ai,j ) = 1 gibt. Dass die Belegung deshalb
jede Klausel αi und damit auch die Formel α erfüllt, sollte klar sein. (Man beachte,
dass jeder Knoten αi ebenfalls mit der Farbe 1 gefärbt ist, was bedeutet, dass µ
jeder Klausel αi den Wahrheitswert wahr zuordnet.)
x
Abb. 7.10: Relevanter
Teilgraph für den Teil
((1) =⇒ (2)).
T
B
¬x
F
((2) =⇒ (1)) Sei nun umgekehrt µ eine erfüllende Belegung für α, und damit eine
erfüllende Belegung für jede Klausel in α. Folglich gibt es für jedes i ∈ mit i ≤ k
ein Literal ai,j , dem durch µ der Wahrheitswert wahr zugeordnet wird. Wir weisen jetzt den zugehörigen Knoten ai,j sowie dem Knoten T die Farbe 1 zu. Unter
Benutzung von Beobachtung 2 folgt nun, dass man diese partielle Knotenfärbung
zu einer Knotenfärbung jedes Teilgraphen Gi (und damit auch von G) fortsetzen
kann, die die drei Farben 0, 1 und 2 benutzt.
N
Da man Instanzen des Minimierungsproblems MinNodeColoring effiziente kodieren kann, ohne irgendeine Zahl binär zu kodieren, ist dieses Problem ebenfalls
streng NP-schwer. Folglich ist MinNodeColoring nicht vollständig approximierbar (siehe Kapitel 6).
Man geht davon aus, dass das Minimierungsproblem ähnlich schwer wie die im
letzten Abschnitt behandelten Maximierungsprobleme MaxIndependetSet und
MaxClique approximieren lässt. Insbesondere vermutet man, dass es für MinNodeColoring höchstwahrscheinlich überhaupt keine Approximationsalgorithmus konstanter Güte gibt (siehe etwa Jansen and Margraf [2008]). Wie man zeigen
kann, dass es höchstwahrscheinlich keinen Approximationsalgorithmus konstanter Güte für MinNodeColoring gibt, der einen Approximationsfaktor δ mit δ < 34
hat, schauen wir uns im Folgenden genauer an.
Seite 110
S
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Satz 7.11
Aus P 6= NP folgt, dass es keinen Approximationsalgorithmus konstanter
Güte für MinNodeColoring gibt, der einen Approximationsfaktor kleiner
als 34 hat.
Beweis. Im Beweis von Satz 7.10 haben wir gezeigt, dass aus P 6= NP folgt, dass
es keinen effizienten Algorithmus gibt, mit dem man entscheiden kann, ob die
Knoten eines gegebenen Graphen mit drei Farben gefärbt werden können.
Wir nehmen nun an, dass einen Approximationsalgorithmus A konstanter Güte für MinNodeColoring gibt, der einen Approximationsfaktor kleiner als 34 hat.
Man kann sich nun leicht davon überzeugen, dass man mit Hilfe des folgenden Algorithmus B effizient überprüfen kann, ob es für einen gegebenen Graphen eine
Knotenfärbung mit drei Farben gibt, d.h. ob er 3-färbbar ist.
Algorithmus B
Eingabe: Graph G = (V, E)
1
2
3
4
5
6
7
Ü
Bestimme mit A eine Knotenfärbung c für den Graphen G.
Bestimme die Anzahl der Farben z, die die Knotenfärbung c benötigt.
if z < 4 then
return ‘G ist 3-färbbar.’;
else
return ‘G ist nicht 3-färbbar.’;
fi
Übung 7.3
Vervollständigen Sie den Beweis von Satz 7.11. Begründen Sie, weshalb man
mit dem angegebenen Algorithmus B effizient entscheiden kann, ob ein
Graph 3-färbbar ist.
Der Beweis von Satz 7.11 läßt offen, ob sich Färbungen der angegebenen Güte
schnell bestimmen lassen, wenn man von vornherein weiß, dass mehr als drei
Farben benötigt werden, um die Knoten eines gegebenen Graphen zu färben. Dass
diese Art von Zusatzinformation nicht wirklich hilfreich ist, zeigt die folgende
verallgemeinerte Version von Satz 7.11.
S
Satz 7.12
N
Sei m ∈
mit m > 3. Aus P 6= NP folgt, dass es keinen effizienten Algorithmus gibt, mit dem man für jeden Graphen G mit χ(G) ≥ m eine Knotenfärbung bestimmen kann, die weniger als 43 · χ(G) Farben verwendet.
Beweis. Für den Beweis dieses Satz ist folgende Beobachtung wichtig.
7.3 Minimale Knotenfärbungen
Seite 111
N
Beobachtung. Sei G = (V, E) ein Graph und k ∈ . Dann kann man dem Paar (G, k)
effizient einen Graphen Gk mit χ(Gk ) = k · χ(G) zuordnen.
Es sei angemerkt, dass es genügt, den dem Paar (G, k) zugeordneten Graphen
Gk so zu definieren, dass er aus k Kopien von G besteht, wobei die Knoten
unterschiedlicher Kopien von G jeweils durch eine Kante miteinander verbunden
sind. Der Graph Gk wird also so gewählt, dass für alle u, v ∈ V und alle i, j ∈
mit i, j ≤ k gilt:
N
• der Knoten (u, i) gehört zur Knotenmenge von Gk ,
• wenn die Kante {u, v} zu E gehört, so gehört die Kante {(u, i), (v, i)} zur
Kantenmenge von Gk ,
• wenn i 6= j gilt, so gehören auch die Kanten {(u, i), (u, j)} und {(u, i), (v, j)}
zur Kantenmenge von Gk .
Zur Illustration dieser Zuordnung dient Abbildung 7.11.
v1
(v1 ,1)
(v1 ,2)
v2
(v2 ,1)
(v2 ,2)
v3
(v3 ,1)
(v3 ,2)
N
Sei nun m ∈ . Wir nehmen an, dass Am ein effizienterAlgorithmus ist, mit dem
man für jeden Graphen G mit χ(G) ≥ m eine Knotenfärbung bestimmen kann,
welche weniger als 43 · χ(G) Farben verwendet. Dann kann man den folgenden
Algorithmus B benutzen, um zu entscheiden, ob es für einen gegebenen Graphen
eine Knotenfärbung mit drei Farben gibt, d.h. ob er 3-färbbar ist.
Algorithmus B
Eingabe: Graph G = (V, E)
1
2
3
4
5
6
7
8
Bestimme anhand des Paars (G, m) den Graphen Gm .
Bestimme mit Am eine Knotenfärbung c für den Graphen Gm .
Bestimme die Anzahl der Farben z, die die Knotenfärbung c benötigt.
if z < 4 · m then
return ‘G ist 3-färbbar.’;
else
return ‘G ist nicht 3-färbbar.’;
fi
Aus unserer Beobachtung folgt unmittelbar, dass B ein effizienter Algorithmus
ist. Um zu sehen, dass B korrekt arbeitet, unterscheiden wir die folgenden Fälle.
Fall 1. G ist 3-färbbar.
Also gilt χ(G) ≤ 3. Aus unserer Beobachtung folgt nun, dass χ(Gm ) ≤ 3 · m gelten
muss. Sei z die Anzahl der Farben, die die von Am für den Graphen Gm bestimmte
Abb. 7.11: Graph G
(links) und der G zugeordnete Graph G2
(rechts).
Seite 112
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Knotenfärbung c verwendet. Da Am nach Annahme eine Knotenfärbung c für Gm
bestimmt, die weniger als 43 · χ(Gm ) Farben verwendet, muss also
z<
4
4
· χ(Gm ) ≤ · 3 · m = 4 · m
3
3
gelten. Folglich beantwortet B in diesem Fall die Frage, ob G ein 3-färbbarer Graph
ist, korrekt.
Fall 2. G ist nicht 3-färbbar.
Jetzt gilt also χ(G) ≥ 4. Unsere Beobachtung impliziert nun, dass χ(Gm ) ≥ 4 · m
gilt. Sei z wieder die Anzahl der Farben, die die von Am für den Graphen Gm
bestimmte Knotenfärbung c verwendet. Da c eine Knotenfärbung für Gm ist, muss
z ≥ χ(Gm ), und damit auch z ≥ 4 · m gelten. Folglich beantwortet B auch in
diesem Fall die Frage, ob G ein 3-färbbarer Graph ist, korrekt.
Ü
Übung 7.4
Überlegen Sie sich, weshalb die im Beweis von Satz 7.11 aufgestellte Beobachtung korrekt ist.
Zum Abschluss dieses Kapitels schauen wir uns einen Approximationsalgorithmus für MinNodeColoring an, der zwar keine konstante Güte hat, mit dem man
aber trotzdem halbwegs brauchbare Knotenfärbungen bestimmen kann. Dieser
Algorithmus, GreedyNC genannt, benutzt den im letzten Abschnitt vorgestellten Approximationsalgorithmus GreedyIS als Unterprozedur. Im gegebenen Graphen G wird mit GreedyIS eine unabhängige Menge bestimmt und deren Knoten
alle mit ein und derselben Farbe gefärbt werden. Im Anschluss werden alle gerade gefärbten Knoten und alle Kanten, die diese Knoten als Ecke haben, aus G
gestrichen. Wenn es im so gebildeten Graphen G0 keine Knoten mehr gibt, wird
gestoppt. Andernfalls wird mit dem Teilgraphen G0 analog verfahren, wobei zum
Färben der Knoten in der mit GreedyIS bestimmten unabhängige Menge eine noch
nicht benutzte Farbe verwendet wird.
Zur Illustration der Arbeitsweise von GreedyNC dient das folgende Beispiel.
B
Beispiel 7.12
Sei G = (V, E) der Graph aus dem linken Teil von Abbildung 7.12. Man
beachte, dass χ(G) = 3 gilt.
Im ersten Schritt wird in G die unabhängige Menge U = {1, 4} bestimmt.
Im zweiten Schritt wird im Teilgraphen G0 (siehe den mittleren Teil von 7.12)
die unabhängige Menge U 0 = {2, 5} bestimmt. Im letzten Schritt wird im
Teilgraphen G000 (siehe den rechten Teil von Abbildung 7.12) die unabhängige
Menge U 00 = {3} bestimmt.
Die von GreedyNC bestimmte Knotenfärbung benutzt drei Farben und ist
damit sogar optimal.
7.3 Minimale Knotenfärbungen
Seite 113
Abb. 7.12: Graphen G
(links), G0 (mitte) und
G00 für Beispiel 7.12.
1
2
3
4
5
2
3
3
5
GreedyNC kann nun wie folgt beschrieben werden.
Algorithmus GreedyNC für MinNodeColoring
Eingabe: Graph G = (V, E)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
t := 1;
Vt := V ;
Et := E;
while Vt 6= ∅ do
Gt := (Vt , Et );
Ut := GreedyIS(Gt );
forall u ∈ Ut do
c(u) := t;
od
Bestimme die Menge Vt− aller aus Gt zu löschenden Knoten, wobei
Vt− genau die Knoten aus Ut enthält.
Bestimme die Menge Et− aller aus Gt zu löschenden Kanten, wobei
Et− alle Kanten aus Et enthält, die mindestens einen Knoten aus Vt−
als Ecke haben.
Vt+1 := Vt \ Vt− ;
Et+1 := Et \ Et− ;
t := t + 1;
od
return c;
Der schlimmste Fall tritt ein, wenn die Unterprozedur GreedyIS in jeder Runde eine unabhängige Menge bestimmt, die genau einen Knoten erhält. Da die Laufzeit
von GreedyIS polynomiell in der Größe des zu verabeitenden Graphen beschränkt
ist, muss auch die Laufzeit von GreedyNC polynomiell beschränkt sein. Da GreedyNS offenbar eine Knotenfärbung für den gegebenen Graphen G bestimmt, ist
GreedyNC ein Approximationsalgorithmmus für MinNodeColoring.
Die Güte von GreedyNC kann wie folgt abgeschätzt werden:
Satz 7.13
Sei G = (V, E) ein Graph mit χ(G) = k, d.h. ein optimale Knotenfärbung
Opt(I) für die Instanz I := G hat die Güte k. Ferner sei c die von GreedyNC
bei Eingabe von G bestimmte Knotenfärbung. Dann gilt:
• w(c) ≤
3·|V |
|V |
logk ( 9 )
· k.
Also hat GreedyNC eine Approximationsgüte δ(I) ∈ O
|V |
log(|V |)
.
S
Seite 114
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Beweis. Sei G = (V, E) der gegebene Graph. O.b.d.A. gelte χ(G) > 1. (Man kann
sich leicht davon überzeugen, dass GreedyNC im nicht betrachteten Fall stets eine
optimale Knotenfärbung bestimmt.)
Wir benutzen in diesem Beweis die in der Beschreibung von GreedyNC verwendeten Bezeichnngen. Sei t0 die Anzahl der Runden, die GreedyNC benötigt, um
die Eingabe G zu verarbeiten, sowie c die bestimmte Knotenfärbung.
Es sei daran erinnert, dass wir die folgende untere Schranke für die Größe der in
Runde t von der Unterprozedur GreedyIS im Teilgraphen Gt bestimmten unabhängigen Menge Ut kennen (siehe Satz 7.6).
Beobachtung 1. Für alle t ∈
N mit t ≤ t0 gilt: |Ut| ≥ logk
|Vt |
3
.
Wir benutzen nun diese Beobachtung, um abzuschätzen, wie viele Farben in der
von GreedyNC bestimmten Knotenfärbung benutzt werden. Das gelingt am einfachsten unter Verwendung der folgender Idee.
Sei s ∈ Q+ und t die aktuelle Runde von GreedyNC, d.h. es wird im Teilgraphen
Gt = (Vt , Et ) die unabhängige Menge Ut bestimmt. Falls |Vt | ≥ s ist, folgt aus
unserer Beobachtung, dass |Ut | ≥ logk 3s gilt. Falls |Vt | < s ist, wissen wir, dass
höchstens s Farben benötigt werden, um die Knoten in |Vt | zu färben. (Das in der
von GreedyNC bestimmten Knotenfärbung c eventuell weniger Farben benötigt
werden, ignorieren wir einfach.)
Sei nun tmax so gewählt, dass die Bedingung |Vtmax | < s erfüllt ist. Da im schlimmsten Fall |Vt | ≥ s für alle t < tmax gilt und in jeder dieser Runden genau eine noch
nicht verwendete Farbe benutzt wird, können wir die Güte der von GreedyNC
bestimmten Knotenfärbung c wie folgt abschätzen:
w(c) ≤ tmax − 1 + s ≤ tmax + s.
Wenn wir die Zahl s ∈ Q+ so wählen, dass tmax + s ≤
3·|V |
|V |
logk ( 9 )
gilt, ist also
garantiert, dass die angegebene obere Schranke für die Güte der von GreedyNC
bestimmten Knotenfärbung korrekt ist. Da w(Opt(I)) ≥ 1 gilt, folgt daraus sofort
w(c)
3 · |V |
3 · |V |
.
≤
≤
|V |
w(Opt(I))
logk 9 · w(Opt(I))
logk |V9 |
Also gilt für die Approximationsgüte δ(I) von GreedyNC
δ(I) :=
was sofort δ(I) ∈ O
|V |
log(|V |)
3 · |V |
,
logk |V9 |
impliziert.
Um den Beweis zu vervollständigen, müssen wir also nur noch eine geeignete
|V |
Zahl s ∈ Q+ wählen. Wir behaupten nun, dass s0 :=
eine gute Wahl ist.
|V |
logk ( 9 )
Um diese Behauptung zu verifizieren, ist die folgende Beobachtung wichtig.
Beobachtung 2. Für alle t ∈
N mit t ≤ t0 und |Vt| ≥ s0 gilt: |Ut| ≥ 21 · logk
|V |
9
.
7.3 Minimale Knotenfärbungen
Seite 115
Aus |V | ≥ |Vt | ≥ s0 folgt zusammen mit Beobachtung 1, dass




|V |
9· 9
|V |
|Vt |
 = logk 

|Ut | ≥ logk
≥ logk 
|V |
3
3 · log
3 · log |V |
k
k
9
9
gilt.
Da
x
logk (x)
1
3
≥
·
√
x für alle x ≥ 0 gilt (siehe Exkurs 7.2), erhalten wir

|Ut | ≥ logk 3 ·

|V |
9 
logk |V9 |
≥ logk
1
3· ·
3
r
|V |
9
!
.
Mit Hilfe der bekannten Logarithmengesetze folgt nun
!
r
1 !
|V |
1
|V | 2
|V |
|Ut | ≥ logk
= logk
≥ · logk
,
9
9
2
9
und damit ist Beobachtung 2 verifiziert.
Sei nun z :=
|Vt | ≥
|V |
|V | .
logk ( 9 )
|V |
|V |
logk ( 9 )
Beobachtung 2 belegt also, dass in jeder Runde t, für die
gilt, mindestens z Knoten des Graphen G gefärbt werden. Da



|V
|
2
·
|V
|
2
·
|V
|
1
 =
 = |V |
· logk
z·
·
|V |
2
9
logk 9
logk |V9 |

gilt, kann es maximal
2·|V |
|V |
logk ( 9 )
gefärbt werden. Also muss tmax
Runden geben, in denen jeweils z Knoten von G
2·|V |
≤
sowie tmax ≤ 2·|V|V| | gelten, und
|V |
logk ( 9 )
logk ( 9 )
wir erhalten wie gewünscht
w(c) ≤ tmax + s0 ≤
|V |
3 · |V |
2 · |V |
+
=
.
|V |
|V |
logk 9
logk 9
logk |V9 |
Exkurs 7.2
Sei k ≥ 2 und x ≥ 0. Wir wollen zeigen, dass
x
logk (x)
≥
1
3
·
√
x gilt.
Wegen
k ≥ 2 gilt log(x) ≥ logk (x) und es genügt offenbar zu zeigen, dass
√
x ≥ 31 · log(x) gilt.
P∞ i
2
Es sei daran erinnert, dass ex = i=0 xi! ≥ 1 + x + x2 gilt. Folglich gilt auch
√
√
√
e2· x ≥ 1 + 2 · x + 2 · x ≥ x, was sofort 2 · x ≥ loge (x) impliziert. Aus
√
3
2
loge (x) = log(x)
log(e) und log2 (e) = 1.45 . . . ≤ 2 folgt nun 2 · x ≥ 3 · log(x). Also
√
gilt auch x ≥ 13 · log(x).
E
Seite 116
Kapitel 7 Approximationsalgorithmen nichtkonstanter Güte
Kapitel 8 Entwurfstechniken
Seite 117
Kapitel 8 Entwurfstechniken
Bisher haben wir uns hauptsächlich darauf konzentriert, Approximierungsalgorithmen für konkrete Optimierungsprobleme vorzustellen und zu analysieren.
Zum Abschluss unserer Untersuchungen diskutieren wir zwei Ansätze, die sich
beim Entwurf von Approximationsalgorithmen als recht hilfreich herausgestellt
haben.
8.1 Entwurfstechnik Randomisierung
In diesem Kapitel beschäftigen wir uns mit so genannten randomisierten Algorithmen und schauen uns an, wie man solchen Algorithmen benutzen kann, um
Optimierungsprobleme zu lösen. Bevor wir uns den Details zuwenden, lernen wir
einen einfachen randomisierten Algorithmus kennen.
Seien zwei Listen A und B mit jeweils n paarweise verschiedenen natürlichen Zahlen gegeben. Wir sind daran interessiert herauszubekommen, ob A und B die selben Zahlen enthalten, d.h. ob B eine Permutation von A ist.
Um diese Frage zu beantworten, kann man einerseits – wie üblich – einen deterministischen Algorithmus oder aber einen randomisierten Algorithmus benutzen.
Die zweite Möglichkeit schauen wir uns im Folgenden genauer an.
Übung 8.1
Ü
Überlegen Sie sich, wie ein deterministischer Algorithmus arbeiten sollte,
mit dem man in O(n · log(n)) vielen Rechenschritten entscheiden kann, ob
für zwei gegebene Listen A und B der Länge n gilt, dass B eine Permutation
von A ist.
Unser randomisierter Algorithmus arbeitet wie folgt:
Algorithmus RandomPermutationTest
Eingabe: Listen A = (a1 , . . . , an ) und B = (b1 , . . . , bn )
1
2
3
4
5
6
7
8
9
10
11
12
Wähle zufällig eine natürliche Zahl x ∈
a := 1;
b := 1;
for i := 1 to n do
a := a · (x − ai );
b := a · (x − bi );
od
if a = b then
return true;
else
return false;
fi
N mit x ≤ 4n.
Man beachte, dass true die Ausgabe ’B ist eine Permutation von A’ kodiert, während false die Ausgabe ’B ist keine Permutation von A’ kodiert,
Seite 118
Kapitel 8 Entwurfstechniken
Offenbar benötigt RandomPermutationTest nur O(n) Rechenschritte, um seine
Ausgabe zu bestimmen. Man beachte, dass wir bei dieser Laufzeitabschätzung
davon ausgegangen sind, dass man in O(n) Rechenschritten die Zufallszahl x bestimmen und in O(n) Rechenschritten die relevanten arithmetischen Operationen
ausführen kann.
Da die von RandomPermutationTest bestimmten Ausgaben von der aktuell gewählten Zufallszahl x abhängen, sind sie – wie für randomisierte Algorithmen
üblich – nicht immer korrekt. Die Wahrscheinlichkeit dafür, dass RandomPermutationTest die Frage, ob B eine Permutation von A ist, nicht korrekt beantwortet,
kann wie folgt abgeschätzt werden:
Lemma 8.1. Seien A und B zwei Listen mit jeweils n paarweise verschiedenen natürlichen Zahlen. Dann gilt:
• Die Wahrscheinlichkeit dafür, dass die von RandomPermutationTest bestimmte
Antwort falsch ist, ist kleiner oder gleich 41 .
Beweis. Wir ordnen den beiden Listen A und B jeweils ein Polynom vom Grad n
zu; der Liste A das Polynom pA (x) := (x − a1 ) · . . . · (x − an ) und der Liste B das
Polynom pB (x) := (x − b1 ) · . . . · (x − bn ).
Das wesentliche Argument in unserem Beweis ist das folgende:
Fakt. Wenn B ist eine Permutation von A ist, so gilt pA (x) = pB (x) für alle x ∈
N.
Wir unterscheiden nun die folgenden Fälle:
Fall 1. RandomPermutationTest gibt aus, dass B keine Permutation von A ist.
N
Also muss in Zeile 1 zufällig eine Zahl x ∈ mit x ≤ 4n gewählt worden sein, für
die pA (x) 6= pB (x) gilt. Aus der Kontraposition unserer Beobachtung folgt sofort,
dass in diesem Fall die von RandomPermutationTest bestimmte Antwort immer
richtig ist.
Fall 2. RandomPermutationTest gibt aus, dass B eine Permutation von A ist.
N
Also muss in Zeile 1 zufällig eine Zahl x ∈
mit x ≤ 4n gewählt haben, für
die pA (x) = pB (x) gilt. Wir nehmen nun, dass B keine Permutation von A ist.
In diesem Fall muss x eine Nullstelle des Polynoms p(x) := pA (x) − pB (x) sein.
Da p(x) ein Polynom vom Grad n ist, hat dieses Polynom höchstens n Nullstellen.
Da x ≤ 4n gilt, ist die Wahrscheinlichkeit dafür, dass x eine dieser Nullstellen
n
ist, kleiner oder gleich 4n
. Also ist in diesem Fall die Wahrscheinlichkeit dafür,
dass die von RandomPermutationTest bestimmte Antwort falsch ist, kleiner oder
gleich 14 .
1
Um die Fehlerwahrscheinlichkeit zu verringern, sagen wir auf den Wert 1000
, kann
man nun wie folgt vorgehen.
Algorithmus RandomPermutationTest_5
Eingabe: Listen A = (a1 , . . . , an ) und B = (b1 , . . . , bn )
1
2
3
flag := true;
j := 1;
while ( flag = true && j ≤ 5 ) do
8.1 Entwurfstechnik Randomisierung
4
5
6
7
8
y := RandomPermutationTest(A, B);
flag := y;
j := j + 1;
od
return flag;
Offenbar liefert RandomPermutationTest_5 genau dann die Antwort true, wenn
in Zeile 1 von RandomPermutationTest fünfmal – unabhängig voneinander – zufällig eine Zahl x ∈
mit x ≤ 4n gewählt wurde, so dass pA (x) = pB (x) für
die den Listen A und B zugeordneten Polynomen gilt (siehe den Beweis von Lemma 8.1). Die Wahrscheinlichkeit dafür, dass die Antwort true falsch ist, ist also
5
1
1
, und damit kleiner gleich 1000
. Dass RandomPermutakleiner gleich 41 = 1024
tionTest_5 keinen Fehler macht, wenn die Antwort false ausgegeben wird, folgt
direkt aus dem Beweis von Lemma 8.1.
N
8.1.1 Grundlagen
Elementare Wahrscheinlichkeitstheorie
In diesem Unterabschnitt werden zentrale Begriffe aus der Wahrscheinlichkeitstheorie eingeführt, die notwendig sind, um uns im Anschluss mit randomisierten Approximationsalgorithmen auseinandersetzen zu können. Im Mittelpunkt
stehen die Begriffe Ereignis, Wahrscheinlichkeitsmaß, Zufallsvariable und Erwartungswert einer Zufallsvariablen, wobei wir uns – unser Zielsetzung folgend – auf
die Betrachtung endlicher Wahrscheinlichkeitsräume beschränken können.
Die Wahrscheinlichkeitstheorie wurde entwickelt, um Situationen bzw. Experimente mit mehrdeutigen Ergebnissen zu modellieren und zu analysieren. Einfache Beispiele für solche Experimente sind das Werfen einer Münze bzw. eines
Würfels. Bei diesen Experimenten kann man das Ergebnis nicht vorhersagen. Deshalb spricht man von zufälligen Ereignissen.
Bei der Modellierung eines Zufallsexperiments betrachten wir alle möglichen Ergebnisse dieses Experiments, die wir elementare Ereignisse nennen. Beim Werfen
einer Münze sind das die elementaren Ereignisse, dass Kopf oder Zahl fällt; beim
Werfen eines Würfels, dass eine 1, 2, 3, 4, 5 oder 6 gewürfelt wird.
Allgemein ist ein Ereignis eine Teilmenge der Menge aller elementaren Ereignisse.
Um konsistent zu bleiben, benutzen wir Einermengen, um elementare Ereignisse
zu beschreiben. Beim Werfen eines Würfels beschreibt also die Menge {3} das
Ereignis, dass eine 3 gewürfelt wurde und die Menge {1, 3, 5} das Ereignis, dass
eine ungerade Zahl gewürfelt wurde.
Sei nun Ω eine endliche Menge, die alle elementaren Ereignisse eines Zufallsexperimentes beschreibt. Das Ziel besteht darin, jeder Teilmenge A ⊆ Ω eine reelle
Zahl aus dem Intervall [0, 1] zuzuordnen, die angibt, wie wahrscheinlich es ist,
dass das Ereignis A eintritt. Dabei steht die Zahl 1 dafür, dass ein Ereignis mit
Sicherheit eintritt, und die Zahl 0 dafür, dass ein Ereignis unmöglich ist.
Seite 119
Seite 120
D
Kapitel 8 Entwurfstechniken
Definition 8.1
Sei Ω eine endliche Menge, die Menge der elementaren Ereignisse eines Zufallsexperimentes. Ferner sei Pr eine Funktion, die jedem Ereignis A, d.h. jeder Teilmenge A ⊆ Ω, ein reelle Zahl aus dem Intervall [0, 1] zuordnet.
Wir nennen die Funktion Pr ein Wahrscheinlichkeitsmaß auf Ω, falls gilt:
(i) Pr(∅) = 0,
(ii) Pr(Ω) = 1,
(iii) Pr(A ∪ B) = Pr(A) + Pr(B) für alle A, B ⊆ Ω mit A ∩ B = ∅.
Sei nun Pr ein Wahrscheinlichkeitsmaß auf Ω und A ⊆ Ω ein Ereignis. Aus Bedingung (iii) folgt, dass die Wahrscheinlichkeit dafür, dass das Ereignis A eintritt
(d.h. die Zahl Pr(A)), als Verhältnis der Summe der Wahrscheinlichkeiten der in A
enthaltenen elementaren Ereignisse zur Summe der Wahrscheinlichkeiten aller
möglichen elementaren Ereignisse in Ω definiert ist.
Das für unsere Betrachtungen zentrale Wahrscheinlichkeitsmaß ist die so genannte Gleichverteilung, bei der jedem elementaren Ereignis die gleiche Wahrscheinlichkeit zugeordnet wird, d.h. es gilt
Pr({ω}) = Pr({ω 0 }) =
1
|Ω|
für alle elementaren Ereignisse ω, ω 0 ∈ Ω.
B
Beispiel 8.1
Wir betrachten das Zufallsexperiment Werfen eines Würfels und legen als
Wahrscheinlichkeitsmaß die Gleichverteilung zugrunde.
Dann ist die Wahrscheinlichkeit dafür, dass eine 3 gewürfelt wird, offenbar
gleich 16 , d.h. Pr({3}) = 61 . Die Wahrscheinlichkeit dafür, dass eine ungerade
Zahl gewürfelt wird, ist dann gleich 12 , d.h. Pr(A) = 12 für A = {1, 3, 5}, da
Pr(A) = Pr({1}) + Pr({3}) + Pr({5}) gilt.
B
Beispiel 8.2
Wir betrachten das Zufallsexperiment dreimaliges Werfen einer Münze und
legen wieder als Wahrscheinlichkeitsmaß die Gleichverteilung zugrunde.
Da es insgesamt 8 elementare Ereignisse gibt, ist die Wahrscheinlichkeit dafür, dass das elementare Ereignis (Kopf,Kopf,Kopf) eintritt, genau 18 . Die
Wahrscheinlichkeit dafür, dass dieses elementare Ereignis nicht eintritt, ist 87 .
Folglich ist die Wahrscheinlichkeit dafür, dass beim dreimaligen Werfen einer Münze mindestens einmal Zahl gefallen ist, ebenfalls 78 .
Als nächstes wenden wir uns dem Begriff Zufallsvariable zu, der bei der Analy-
8.1 Entwurfstechnik Randomisierung
Seite 121
se von Zufallsexperimenten und damit auch bei der Analyse von randomisierten
Algorithmen eine zentrale Rolle spielt.
Definition 8.2
Sei Ω eine endliche Menge, die Menge der elementaren Ereignisse eines Zufallsexperiments. Eine Funktion X, die jedem elementaren Ereignis ω ∈ Ω
eine reelle Zahl zuordnet, nennen wir Zufallsvariable auf Ω.
D
Durch die Wahl einer Zufallsvariablen für ein Zufallsexperiment können wir den
elementaren Ereignissen Zahlen zuordnen, die zum Ausdruck bringen, was uns
mit Blick auf dieses Zufallsexperiment interessiert. Zur Illustration betrachten wir
folgendes Beispiel.
Beispiel 8.3
B
Es geht um das folgende Spiel mit einem Einsatz von einem Euro. Nachdem
wir den Einsatz bei der Spielbank bezahlt haben, dürfen wir dreimal eine
Münze werfen. Immer dann, wenn nach dem Werfen der Münze Kopf gefallen ist, bekommen wir von der Spielbank einen Euro als Gewinn ausgezahlt.
Die Frage ist, ob es sich für uns lohnt, an diesem Spiel teilzunehmen.
Wir betrachten also das Zufallsexperiment dreimaliges Werfen einer Münze
und legen wie zuvor als Wahrscheinlichkeitsmaß die Gleichverteilung zugrunde. Um die oben gestellte Frage zu beantworten, benutzt man eine Zufallsvariable X, die jedem elementaren Ereignis den dabei von der Spielbank
ausgezahlten Gewinn zuordnet. Also wird bspw. dem elementaren Ereignis ω = (Kopf, Zahl, Kopf) der Gewinn zwei Euro zugeordnet; d.h. es gilt
X(ω) = 2.
Wir wir gleich sehen werden, lohnt sich eine Teilnahme an diesem Spiel, da
wir durchschnittlich 1,5 Euro als Gewinn von der Spielbank ausgezahlt bekommen.
Um Fragen, wie die im letzten Beispiel gestellte, beantworten zu können, analysiert man den Erwartungswert einer Zufallsvariablen, d.h. den bzgl. des zugrunde
liegenden Wahrscheinlichkeitsmaßes gewichteten Durchschnittswert der Zufallsvariablen.
Sei Ω eine endliche Menge, die Menge der elementaren Ereignisse eines Zufallsexperimentes, Pr ein Wahrscheinlichkeitsmaß auf Ω und X eine Zufallsvariable
auf Ω. Desweiteren sei X(Ω) := {X(ω) | ω ∈ Ω}.
Für jede reelle Zahl z ∈ X(Ω) bezeichnen wir mit PrX (z) die Wahrscheinlichkeit
dafür, dass die Zufallsvariable X den Wert z annimmt, d.h.
X
PrX (z) :=
Pr({ω}),
ω∈Ereignis(X=z)
wobei Ereignis(X = z) die Teilmenge von Ω bezeichnet, die alle elementaren Ereignisse ω ∈ Ω mit X(ω) = z enthält.
Seite 122
Kapitel 8 Entwurfstechniken
Der Erwartungswert Exp(X) der Zufallsvariablen X ist nun definiert als:
X
X
Exp(X) :=
z · PrX (z) =
X(ω) · Pr({ω}).
ω∈Ω
z∈X(Ω)
Zur Illustration dieses Begriffs kommen wir auf Beispiel 8.3 zurück.
B
Beispiel 8.4
Offenbar kann die in Beispiel 8.3 betrachtete Zufallsvariable den Wert 0, 1, 2
oder 3 annehmen.
Da es insgesamt 8 elementare Ereignisse gibt, kann man sich leicht davon
überzeugen, dass PrX (0) = PrX (3) = 81 und PrX (1) = PrX (2) = 83 gilt.
Folglich erhalten wir:
Exp(X) =
3
X
z · PrX (z) = 0 ·
z=0
1
3
3
1
12
+1· +2· +3· =
.
8
8
8
8
8
Also kann man erwarten, dass man bei diesem Spiel im Durchschnitt 1,5 Euro als Gewinn von der Spielbank ausgezahlt bekommt, was den Einsatz von
einem Euro rechtfertigt.
Im Allgemeinen kann es relativ kompliziert werden, den Erwartungswert einer
Zufallsvariablen X zu bestimmen. Ein Trick, um einfacher zum Ziel zu kommen,
besteht darin, X als Summe von Zufallsvariablen Xi darzustellen, deren Erwartungswerte Exp(Xi ) sich einfacher berechnen lassen, und anschließend anhand
dieser Werte den uns interessierenden Erwartungswert Exp(X) zu bestimmen.
Lemma 8.2. Sei Ω eine endliche Menge, die Menge der elementaren Ereignisse eines
Zufallsexperimentes, Pr ein Wahrscheinlichkeitsmaß auf Ω und X einePZufallsvariable
n
auf Ω. Ferner seien X1 bis Xn Zufallsvariablen auf Ω, wobei X(ω) = i=1 Xi (ω) für
alle ω ∈ Ω gilt. Dann gilt:
• Exp(X) =
Pn
i=1
Exp(Xi ).
Beweis. Per Definition gilt:
n
X
Exp(Xi ) =
i=1
!
n
X
X
i=1
ω∈Ω
Xi (ω) · Pr({ω}) .
Man kann nun leicht nachrechnen, dass
!
n
X
X
X
Xi (ω) · Pr({ω}) =
i=1
gilt. Da X(ω) =
ω∈Ω
Pn
ω∈Ω
i=1
n
X
i=1
Pr({ω}) ·
n
X
!
Xi (ω)
i=1
Xi (ω) für alle ω ∈ Ω gilt, erhalten wir damit sofort:
Exp(Xi ) =
X
ω∈Ω
Pr({ω}) · X(ω) = Exp(X).
8.1 Entwurfstechnik Randomisierung
Seite 123
Das folgende Beispiel demonstriert, wie man die Aussage von Lemma 8.2, die so
genannte Linearität des Erwartungswertes, geschickt ausnutzen kann.
Beispiel 8.5
Wir betrachten das Zufallsexperiment n-faches Werfen eines Würfels, wobei
als Wahrscheinlichkeitsmaß wieder die Gleichverteilung zugrunde liegt.
In diesem Zufallsexperiment beschreiben nun Folgen der Länge n, die aus
den Ziffern 1 bis 6 gebildet sind, die zu betrachtenden elementaren Ereignisse, d.h. es gilt Ω = {1, . . . , 6}n . Wir interessieren uns für den Erwartungwert
der Zufallsvariable X, die für jedes elementare Ereignis ω ∈ Ω angibt, wie
oft die Zahl 1 in der Folge ω vorkommt.
Um die Berechnung des Erwartungswertes Exp(X) zu vereinfachen, führen
wir die Zufallsvariablen X1 bis Xn ein. Für jede dieser Zufallsvariablen Xi
und jedes elementare Ereignis ω ∈ Ω gilt:
• Xi (ω) = 1, falls das i-te Element von ω eine 1 ist,
• Xi (ω) = 0, sonst.
Pn
Offenbar gilt X(ω) = i=1 Xi (ω) für alle elementaren Ereignisse w ∈ Ω. Da
es insgesamt 6n elementare Ereignisse gibt und jede Zufallsvariable Xi nur
den Werte 0 oder 1 annehmen kann, gilt für jede Zufallsvariable Xi :
Exp(Xi ) =
1
X
z · PrXi (z) = 1 · PrXi (1) =
z=0
1
6n−1
= .
6n
6
(Man beachte, dass es genau 6n−1 Folgen der Länge n gibt, die nur aus den
Ziffern 1 bis 6 gebildet sind und deren i-tes Element eine 1 ist.) Damit folgt
unter Benutzung von Lemma 8.2:
Exp(X) =
n
X
i=1
Exp(Xi ) =
n
.
6
Zufallsvariablen und deren Erwartungswerte sind für die Analyse von randomisierten Algorithmen wichtig. Zur Illustration dieser Aussage betrachten wir noch
einmal den zu Beginn dieses Kapitels vorgestellten randomisierten Algorithmus
RandomPermutationTest.
B
Seite 124
E
Kapitel 8 Entwurfstechniken
Exkurs 8.1
Seien A und B Listen der Länge n. Um die Frage zu beantworten, ob B eine
Permutation von A ist, wählt RandomPermutationTest zufällig eine natürliche Zahl x mit x ≤ 4n aus und führt eine deterministische Berechnung aus,
die das Ergebnis true oder false liefert. Jede Berechnung dieses Algorithmus entspricht nun einem elementaren Ereignis, wobei wir davon ausgehen,
dass alle elementaren Ereignisse gleich wahrscheinlich sind. Aus der Analyse von RandomPermutationTest (siehe Lemma 8.1) folgt, dass auf jeden Fall
eine richtige Antwort bestimmt wird, wenn die Liste B eine Permutation der
Liste A ist.
Bei der Analyse von RandomPermutationTest genügt es, den Fall zu betrachten, dass B keine Permutation von A ist. Seien A und B entsprechende Listen
der Länge n.
Wir wählen jetzt eine binäre Zufallsvariable X, die einer Berechnung von
RandomPermutationTest genau dann die Zahl 1 zuordnet, wenn die Frage, ob B eine Permutation von A ist, richtig beantwortet wurde. Der Erwartungswert Exp(X) dieses Zufallsvariable X gibt nun an, wie groß die Wahrscheinlichkeit dafür ist, dass RandomPermutationTest die richtige Antwort
bestimmt.
Offensichtlich kann der randomisierte Algorithmus RandomPermutationTest bei Eingabe von A und B genau 4n verschiedene Berechnungen ausführen. (RandomPermutationTest wählt zufällig eine Zahl x ∈
mit x ≤ 4n
aus und arbeitet im Anschluß wie ein deterministischer Algorithmus.) Damit gibt es in unserem Ereignisraum genau 4n mögliche elementare Ereignisse.
N
Wir wissen bereits, dass genau die Berechnungen von RandomPermutationTest eine richtige Antwort liefern, bei denen x so gewählt wurde, dass x keine Nullstelle des Polynoms p(x) := pA (x) − pB (x) ist (siehe Lemma 8.1).
Da dieses Polynom höchstens n Nullstellen hat, gibt es also mindestens 3n
Berechnungen, die eine richtige Antwort liefern. Da als Wahrscheinlichkeitsmaß die Gleichverteilung zugrunde liegt, gilt demnach PrX (1) ≥ 43 , und
damit auch:
1
X
3
Exp(X) =
z · PrX (z) = 1 · PrX (1) ≥ .
4
z=0
Randomisierte Approximationsalgorithmen
Randomisierte Algorithmen sind ganz allgemein Algorithmen, die während der
Verarbeitung einer Eingabe Zufallsexperimente durchführen können. In Abhängigkeit vom Ergebnis dieser Zufallsexperimente entscheidet der Algorithmus, wie
die Eingabe weiter verarbeitet wird. Randomisierte Algorithmen können u.a. dazu benutzt werden, Entscheidungsprobleme oder Optimierungsprobleme zu lösen.
Zu Beginn dieses Kapitels haben wir bereits einen randomisierten Lösungsalgorithmus für ein Entscheidungsproblem kennenlernt. Als nächsten schauen wir
uns einen randomisierten Lösungsalgorithmus für eine Optimierungsvariante
des in Kapitel 3 behandelten NP-vollständigen Entscheidungsproblems 3SAT
an.
8.1 Entwurfstechnik Randomisierung
Seite 125
Es sei daran erinnert, dass es bei 3SAT darum geht zu entscheiden, ob eine aussagenlogische Formel in 3-konjunktiver Normalform1 erfüllbar ist. Beim Optimierungsproblem Max3SAT geht es darum, für eine solche Formel α eine Belegung
zu finden, die möglichst viele Klauseln von α erfüllt.
Formal ist eine Instanz I von Max3SAT eine aussagenlogische Formel α in 3konjunktiver Normalform über den Variablen x1 , . . . , xn . O.B.d.A. gehen wir davon aus, dass keine Klausel in α allgemeingültig ist, d.h. von jeder Belegung erfüllt
wird. (Anderenfalls kann man diese Klausel einfach aus α streichen.) Eine zulässige Lösung für eine Instanz α ist eine Belegung µ der Variablen x1 , . . . , xn , d.h.
eine Abbildung, die jeder dieser Variablen einen der beiden Wahrheitswerte wahr
bzw. falsch zuordnet. Die Güte w(µ) einer Belegung µ entspricht dann der Anzahl der Klauseln von α die µ erfüllt. Offenbar muss w(µ) ≤ m gelten, wenn in α
eine Konjunktion von m Klauseln ist.
Das Optimierungsproblem Max3SAT ist also wie folgt definiert:
Optimierungsproblem Max3SAT
Eingabe: aussagenlogische Formel α in 3-konjunktiver Normalform
Ausgabe: Belegung µ der Variablen von α, die eine maximale Güte hat
Es sei angemerkt, dass Max3SAT ein NP-schweres Optimierungsproblem ist.
Übung 8.2
Begründen Sie, weshalb jeder effiziente Lösungsalgorithmus für das Maximierungsproblem Max3SAT auch ein effizienter Lösungsalgorithmus für
das Entscheidungsproblem 3SAT ist.
Um dieses Maximierungsproblem zu lösen, kann man wie folgt vorgehen:
Algorithmus RandomMax3SAT
Eingabe: aussagenlogische Formel α in 3-konjunktiver Normalform
über den Variablen x1 , . . . , xn
1
2
3
4
5
6
7
8
9
10
11
for i := 1 to n do
Wähle zufällig eine Zahl zi ∈ {0, 1}.
od
for i := 1 to n do
if zi = 0 then
µ(xi ) := falsch;
else
µ(xi ) := wahr;
fi
od
return µ;
Der randomisierte Algorithmus RandomMax3SAT sieht sich die gegebene Formel
gar nicht an. Stattdessen wird n-mal eine Münze geworfen und anhand der Ergebnisse dieser Zufallsexperimente eine Belegung bestimmt und ausgegeben.
1 Das
sind aussagenlogische Formeln in konjunktiver Normalform, die die Eigenschaft haben, dass
in jeder Klausel genau drei paarweise verschiedene Literale vorkommen.
Ü
Seite 126
Kapitel 8 Entwurfstechniken
Bevor wir diesen randomisierten Algorithmus analysieren, wollen wir anhand
dieses Algorithmus diskutieren, welche Anforderungen ein randomisierter Approximationssalgorithmus generell zu erfüllen hat.
Sei (I, f, w) ein Optimierungsproblem. Ein randomisierter Algorithmus A ist
ein randomisierter Approximationsalgorithmus für dieses Optimierungsproblem,
falls er folgende Eigenschaften hat:
• A bestimmt zu jeder Instanz I ∈ I eine Lösung S ∈ f (I), wobei A initial
eine bestimmte Anzahl von Zufallsexperimenten durchführt und im Anschluß – unter Benutzung der Ergebnisse dieser Zufallsexperimente – wie
ein ganz normaler deterministischer Algorithmus arbeitet,
• A ist ein effizienter Algorithmus, d.h. es gibt ein Polynom p, so dass A maximal p(|I|) Rechenschritte benötigt, um – unter Benutzung der Ergebnisse
der jeweils durchgeführten Zufallsexperimente – eine Lösung S ∈ f (I) zu
bestimmen.
Es sei angemerkt, dass aus der Forderung, dass A ein effizienter Algorithmus ist,
unmittelbar folgt, dass die Anzahl der initial durchgeführten Zufallsexperimente
ebenfalls polynomiell in der Größe der jeweiligen Eingabe I beschränkt ist. (Andernfalls könnte A nicht in polynomiell vielen Rechenschritte – unter Berücksichtigung der Ergebnisse aller initial durchgeführten Zufallsexperimente – seine Lösung bestimmen.)
Ferner sei darauf hingewiesen dass jeder (deterministische) Approximationsalgorithmus für (I, f, w) (siehe Kapitel 2) auch ein randomisierter Approximationsalgorithmus für dieses Optimierungsproblem ist. (Es genügt sich vorzustellen, dass
ein (deterministischer) Approximationsalgorithmus bei Eingabe einer Instanz I
initial eine Münze wirft und anschließend – unabhängig vom Ergebnis dieses Zufallsexperiments – wie üblich eine Lösung bestimmt.)
B
Beispiel 8.6
Wir betrachten noch einmal den randomisierten Algorithmus RandomMax3SAT für das Optimierungsproblem Max3SAT.
Sei α eine aussagenlogische Formel in 3-konjunktiver Normalform über den
Variablen x1 , . . . , xn . Offenbar benötigt RandomMax3SAT nur O(n) Rechenschritte, um eine zulässige Lösung, d.h. eine Belegung µ der Variablen x1 ,
. . . , xn zu bestimmen. Da initial nur n Zufallsexperimente durchführt werden, ist RandomMax3SAT ein randomisierten Approximationsalgorithmus
für Max3SAT.
Als nächstes ist die Frage zu beantworten, welche Qualitätskriterien heranzuziehen sind, um einen randomisierten Approximationsalgorithmus zu beurteilen. Hierbei wollen wir analog wie bei der Beurteilung von Approximationsalgorithmen vorgehen (siehe Kapitel 2), wobei wir natürlich in geeigneter Weise berücksichtigen müssen, dass wir Aussagen über die Güte der von einen randomisierten Algorithmus bestimmten Lösungen treffen wollen.
8.1 Entwurfstechnik Randomisierung
Beispiel 8.7
Wir betrachten noch einmal den randomisierten Approximationsalgorithmus RandomMax3SAT für das Optimierungsproblem Max3SAT.
Sei α eine aussagenlogische Formel in 3-konjunktiver Normalform über den
Variablen x1 , . . . , x5 . Bei der Verarbeitung dieser Instanz werden initial fünf
Zufallsexperimente durchgeführt. Also gibt es insgesamt 25 Möglichkeiten,
wie die Eingabe α weiterverarbeitet wird, und folglich wird irgendeine der
25 möglichen Belegungen µ der Variablen x1 , . . . , x5 als Lösung bestimmt.
Welches Belegung das ist, läßt sich nicht vorhersagen.
Um Aussagen über die Güte der von RandomMax3SAT bestimmten Lösung
treffen zu können, bleibt uns deshalb nichts weiter übrig, als die Berechnung
von RandomMax3SAT als Zufallsexperiment zu verstehen, was es geeignet
zu analysieren gilt. Konkret haben wir es hier mit einem Zufallsexperiment
mit 25 elementaren Ereignissen zu tun (jedes elementare Ereignis entspricht
einem möglichen Ergebnis der fünf initial durchgeführten Zufallsexperimente), wobei die Gleichverteilung als Wahrscheinlichkeitsmaß zugrunde liegt.
Um dieses Zufallsexperiment beurteilen zu können, benutzen wir folgende
Zufallsvariable X. X ordnet jedem elementaren Ereignis eine Zahl zu die angibt, welche Güte die von RandomMax3SAT bestimmte Lösung hat, wenn
das jeweilige elementare Ereignis das Ergebnis der initial durchgeführten
fünf Zufallsexperimente ist. Der Erwartungswert Exp(X) dieser Zufallsvariablen verrät uns, welche durchschnittliche Güte die von RandomMax3SAT
bestimmten Lösungen haben.
Ganz allgemein wählen wir den folgenden Ansatz, um randomisierte Approximationsalgorithmen zu beurteilen.
Sei also A ein randomisierter Approximationsalgorithmus für ein Optimierungsproblem (I, f, w). Zu jeder Instanz I ∈ I bezeichnen wir mit ΩI die Menge der
elementaren Ereignisse des Zufallsexperiments, dessen Ergebnis festlegt, wie A
die Eingabe I deterministisch verarbeitet, um seine Ausgabe zu bestimmen. (Jedes
elementare Ereignis dieses Zufallsexperiments entspricht einem möglichen Ergebnis aller Zufallsexperimente, die A bei Eingabe von I initial durchführt). Ferner
bezeichnen wir für jedes elementare Ereignis ω ∈ ΩI mit A(I, ω) diejenige Lösung
aus f (I), die A bei Eingabe von I bestimmt, wenn ω das Ergebnis des betrachteten
Zufallsexperiments ist.
Sei Pr ein Wahrscheinlichkeitsmaß auf ΩI und XI diejenige Zufallsvariable auf ΩI ,
die jedem elementaren Ereignis ω ∈ ΩI die Güte der Lösung A(I, ω) zuordnet, d.h.
es gilt XI (ω) = w(A(I, ω)).
Die erwartete Approximationsgüte δA (I) des randomisierten Approximationsalgorithmus A für die Instanz I des Optimierungsproblems (I, f, w) ist nun wie
folgt definiert:
Exp(XI )
δA (I) :=
,
w(Opt(I))
wobei Opt(I) wie üblich eine optimale Lösung für die Instanz I sei.
Es sei angemerkt, dass δA (I) ≤ 1 gelten muss, wenn (I, f, w) ein Maximierungs-
Seite 127
B
Seite 128
Kapitel 8 Entwurfstechniken
problem ist. Falls (I, f, w) ein Minimierungsproblem ist, muss natürlich δA (I) ≥ 1
gelten.
In Analogie zu Kapitel 2 nennen wir A einen randomisierten Approximationsalgorithmus konstanter erwarteter Güte für das Optimierungsproblem (I, f, w),
wenn es eine Zahl δ ∈ Q+ gibt, so dass für alle Instanzen I ∈ I gilt:
• δ ≤ δA (I), falls (I, f, w) ein Maximierungsproblem ist,
• δA (I) ≤ δ, falls (I, f, w) ein Minimierungsproblem ist,
Die Zahl δ heißt erwarteter Approximationsfaktor von A.
Zur Illustration dieser zentralen Begriffsbildung analysieren wir zum Abschluss
dieses Abschnitts die erwartete Approximationsgüte des randomisierten Approximationsalgorithmus RandomMax3SAT.
S
Satz 8.1
RandomMax3SAT ist ein randomisierter Approximationsalgorithmus konstanter erwarteter Güte für das Maximierungsproblem Max3SAT mit dem
erwarteten Approximationsfaktor 87 .
Beweis. Sei I eine Instanz von Max3SAT, d.h. I ist eine aussagenlogische Formel α
in 3-konjunktiver Normalfom über den Variablen x1 , . . . , xn , die eine Konjunktion
der Klauseln C1 , . . . , Cm ist.
Bei der Verarbeitung von I bestimmt RandomMax3SAT (im Weiteren kurz A genannt) initial n-mal zufällig eine Zahl zi ∈ {0, 1}. Die der Berechnung von A zugeordnete Menge von elementaren Ereignissen ist also die Menge ΩI = {0, 1}n ;
die zugrunde liegende Wahrscheinlichkeitsverteilung Pr auf ΩI ist wiederum die
Gleichverteilung.
Um die erwartete Approximationsgüte δA (I) abzuschätzen, betrachten wir die folgenden binären Zufallsvariablen X1 , . . . , Xm , wobei Xi genau dann einem elementaren Ereignis ω ∈ ΩI den Wert 1 zuordnet, wenn die von A bestimmte Belegung
A(I, ω) die Klausel Ci erfüllt.
Die bei der Bestimmung von δA (I) zu berücksichtigende Zufallsvariable XI hat
offenbar die Eigenschaft, dass für jedes elementare Ereignis ω ∈ ΩI gilt:
• XI (ω) =
Pm
i=1
Xi (ω).
Sei nun Ci eine Klausel von α. Da Ci nicht allgemeingültig ist und eine Disjunktion
von drei paarweise verschiedenen Literalen ist, müssen in Ci drei verschiedene Variablen vorkommen. Also gibt es unter den 23 möglichen Belegungen dieser drei
Variablen genau eine Belegung, die die Klausel Ci nicht erfüllt. Damit gibt es unter den 2n möglichen Belegungen der Variablen x1 , . . . , xn genau 2n−3 Belegungen,
die die Klausel Ci nicht erfüllen.
Seien nun ω, ω 0 ∈ ΩI . Da ω 6= ω 0 impliziert, dass sich die von A bestimmten Belegungen A(I, ω) und A(I, ω 0 ) unterscheiden, gibt es für jede Belegung µ der Variablen x1 , . . . , xn ein elementares Ereignis ω ∈ ΩI mit A(I, ω) = µ.
8.1 Entwurfstechnik Randomisierung
Seite 129
Folglich gilt für jede Zufallsvariable Xi :
Exp(Xi ) =
1
X
z · PrXi (z) = 1 ·
z=0
2n − 2n−3
2n
=1−
1
7
= .
23
8
Unter Benutzung von Lemma 8.2 folgt nun:
Exp(XI ) =
m
X
Exp(Xi ) =
i=1
7
· m.
8
Berücksichtigen wir außerdem, dass maximal m Klauseln von α durch eine Belegung der Variablen x1 , . . . , xn erfüllt sein können, d.h. dass w(Opt(I)) ≤ m gilt,
erhalten wir wie gewünscht:
δA (I) =
Exp(Xi )
≥
w(Opt(I))
7
8
·m
7
= .
m
8
8.1.2 Anwendungsbeispiel: Maximale Schnitte
Im letzten Abschnitt haben wir gesehen, dass es für NP-schwere Optimierungsprobleme sehr einfache randomisierte Approximationsalgorithmen gibt, die eine
ziemlich gute erwartete Approximationsgüte haben. Wenn wir solche randomisierten Algorithmen benutzen, um ein Optimierungsproblem zu lösen, wissen
wir, dass sie effizient arbeiten. Wir müssen aber damit rechnen, dass mitunter Lösungen mit einer signifikant schlechteren Güte als der erwarteten Güte bestimmt
werden, ggf. sogar solche, die überhaupt nicht zu gebrauchen sind. Das ist der
Preis dafür, dass wir einen randomisierten Algorithmus verwenden.
Es gibt unterschiedliche Ansätze, dieses Problem zu umgehen, die wir im Folgenden mit Blick auf Maximierungsprobleme diskutieren.
Ein Ansatz besteht darin, einen gegebenen randomisierten Approximationsalgorithmus A wie folgt in einen (deterministischen) Lösungalgorithmus A0 umzuwandeln, d.h. zu derandomisieren. Für jedes mögliche Ergebnis der von A bei
Eingabe einer Instanz I initial ausgeführten Zufallsexperimente wird mit Hilfe
von A eine Lösung bestimmt. Unter all diesen Lösungen wird dann eine mit maximaler Güte ausgewählt und anschließend ausgegeben. So ist sichergestellt, dass
die Güte der von A0 bestimmten Lösung größer oder gleich der erwarteten Güte
der von A bestimmten Lösung ist. Kritisch ist, dass A0 in der Regel hoffnungslos
ineffizient sein wird. Wenn A initial n Zufallsexperimente durchführt, erhöht sich
die Rechenzeit von A0 mindestens um den Faktor 2n .
Wir werden jetzt einen besseren Ansatz kennenlernen, um einen gegebenen randomisierten Approximationsalgorithmus A zu derandomisieren, den man die Methode der bedingten Erwartungswerte nennt. Dieser Ansatz hat den entscheidenen Vorteil, dass man A in einen (deterministischen) Approximationsalgorithmus,
also sogar in einen effizienten (deterministischen) Lösungsalgorithmus überführen kann, der immer Lösungen bestimmt, deren Güte nicht schlechter als die erwartete Güte der von A bestimmten Lösungen ist.
Seite 130
Kapitel 8 Entwurfstechniken
Zur Illustration der Methode der bedingten Erwartungswerte betrachten wir das
folgende Maximierungsproblem MaxCut. Beim Maximierungsproblem MaxCut
geht es darum, in einem gegebenen (ungerichteten) Graphen G = (V, E) eine Zerlegung der Knotenmenge V in zwei Mengen C und D zu finden, so dass möglichst
viele Kanten aus E den Schnitt (C, D) für G kreuzen, d.h. die Anzahl der Kanten,
die einen Knoten aus C mit einem Knoten aus D verbinden, soll möglichst groß
sein.
B
Beispiel 8.8
Wir betrachten den Graphen G = (V, E) in Abbildung 8.1.
Sei C = {v1 , v3 , v4 } und D = {v2 , v5 }. Offenbar ist (C, D) ein Schnitt, der
von fünf Kanten gekreuzt wird. Sei nun C 0 = {v1 , v2 , v3 } und D0 = {v4 , v5 }.
Offenbar gibt es nur zwei Kanten, die den Schnitt (C 0 , D0 ) kreuzen.
Abb. 8.1: Graph für
Beispiel 8.8.
v1
v2
v3
v4
v5
Formal ist eine Instanz I von MaxCut ein Graph G = (V, E). Eine zulässige Lösung für diese Instanz I ist ein Schnitt (C, D) für G, d.h. eine Zerlegung V in zwei
disjunkte Teilmengen C und D, d.h. es muss C ∪D = V und C ∩D = ∅ gelten. Die
Güte einer zulässigen Lösung S = (C, D) entspricht nun der Anzahl der Kanten,
die den Schnitt (C, D) kreuzen.
Optimierungsproblem MaxCut
Eingabe: Graph G = (V, E)
Ausgabe: Schnitt (C, D) für G, der eine maximale Güte hat
Es sei angemerkt, dass MaxCut ein NP-schweres Optimierungsproblem ist. Ein
Beweis dieser Aussage kann man bspw. in Garey and Johnson [1979] finden. Einige weiterführende Erklärungen finden sich im Anhang zu diesem Kapitel.
Um einen Approximationsalgorithmus für dieses Maximierungsproblem zu entwerfen, gehen wir nun wie folgt vor. Zunächst überlegen wir uns einen sehr einfachen randomisierten Approximationsalgorithmus RandomMaxCut konstanter
erwarteter Güte für MaxCut, der den erwarteten Approximationsfaktor 21 hat. Im
Anschluss schauen wir uns an, wie man RandomMaxCut in einen (deterministischen) Approximationsalgorithmus DetMaxCut umwandeln kann.
Der randomisierte Approximationsalgorithmus RandomMaxCut arbeitet so ähnlich wie der randomisierte Algorithmus RandomMax3Sat. Ohne die gegebene Instanz I, d.h. einen Graphen G = (V, E) mit n Knoten, genauer zu analysieren,
wird n-mal eine Münze geworfen und anhand der Ergebnisse dieses Zufallsexperiments ein Schnitt (C, D) bestimmt und ausgegeben.
8.1 Entwurfstechnik Randomisierung
Seite 131
Algorithmus RandomMaxCut
Eingabe: Graph G = (V, E) mit V = {v1 , . . . , vn }
1
2
3
4
5
6
7
8
9
10
11
12
13
for i := 1 to n do
Wähle zufällig eine Zahl zi ∈ {0, 1}.
od
C := ∅;
D := ∅;
for i := 1 to n do
if zi = 0 then
D := D ∪ {vi };
else
C := C ∪ {vi };
fi
od
return (C, D);
Es sollte offensichtlich sein, dass RandomMaxCut nur polynomiell viele Rechenschritte benötigt, um zu einer Instanz von MaxCut eine zulässige Lösung zu bestimmen. Außerdem gilt:
Satz 8.2
S
RandomMaxCut ist ein randomisierter Approximationsalgorithmus konstanter erwarteter Güte für das Maximierungsproblem MaxCut mit dem erwarteten Approximationsfaktor 12 .
Beweis. Sei I eine Instanz von MaxCut, d.h. I ist ein Graph G = (V, E) mit der
Knotenmenge V = {v1 , . . . , vn } und der Kantenmenge E = {e1 , . . . , em }.
Bei der Verarbeitung von I bestimmt RandomMaxCut (im Weiteren kurz A genannt) initial n-mal zufällig eine Zahl zi ∈ {0, 1}. Die der Berechnung von A zugeordnete Menge von elementaren Ereignissen ist also die Menge ΩI = {0, 1}n ;
die zugrunde liegende Wahrscheinlichkeitsverteilung Pr auf ΩI ist wiederum die
Gleichverteilung.
Um die erwartete Approximationsgüte δA (I) abzuschätzen, betrachten wir die
folgenden binären Zufallsvariablen X1 , . . . , Xm , wobei Xi genau dann einem elementaren Ereignis ω ∈ ΩI den Wert 1 zuordnet, wenn die Kante ei den von A
bestimmten Schnitt A(I, ω) kreuzt.
Die bei der Bestimmung von δA (I) zu berücksichtigende Zufallsvariable XI hat
offenbar die Eigenschaft, dass für jedes elementare Ereignis ω ∈ ΩI gilt:
• XI (ω) =
Pm
i=1
Xi (ω).
Sei nun ei = {vj , vk } eine Kante im Graphen G. Offenbar gibt es genau 2n−2 Teilmengen von V , in denen keiner der beiden Knoten vorkommt, sowie 2n−2 Teilmengen von V , in denen beide Knoten vorkommen. Folglich gibt es 2n−1 Teilmengen
C ⊆ V , in denen genau einer der beiden Knoten vj oder vk vorkommt. Für jede
dieser Teilmengen C gilt, dass die Kante ei den Schnitt (C, D) mit D := V \ C
kreuzt.
Seite 132
Kapitel 8 Entwurfstechniken
Seien nun ω, ω 0 ∈ ΩI . Da ω 6= ω 0 impliziert, dass sich die von A bestimmten Schnitte A(I, ω) und A(I, ω 0 ) unterscheiden, gibt es für jede der 2n Teilmengen C ⊆ V
ein elementares Ereignis ω ∈ ΩI mit A(I, ω) = (C, D), wobei D := V \ C gilt.
Folglich gilt für jede Zufallsvariable Xi :
Exp(Xi ) =
1
X
z · PrXi (z) = 1 ·
z=0
2n−1
2n
=
1
.
2
Unter Benutzung von Lemma 8.2 folgt nun:
Exp(XI ) =
m
X
Exp(Xi ) =
i=1
1
· m.
2
Berücksichtigen wir weiterhin, dass es höchstens m Kanten gibt, die einen Schnitt
von G kreuzen können, d.h. es gilt w(Opt(I)) ≤ m, erhalten wir wie gewünscht:
δA (I) =
Exp(XI )
≥
w(Opt(I))
1
2
·m
1
= .
m
2
Um zu verstehen, wie man den randomisierten Approximationsalgorithmus RandomMaxCut mit Hilfe der Methode der bedingten Erwartungswerte derandomisieren kann, bedarf es einiger Vorüberlegungen und weiterer Begriffe aus der
Wahrscheinlichkeitstheorie.
Sei Ω eine endliche Menge, die Menge der Elementarereignisse, und Pr ein Wahrscheinlichkeitsmaß auf Ω. Ferner seien A, B ⊆ Ω zwei Ereignisse. Die bedingte
Wahrscheinlichkeit Pr(A | B), d.h. die Wahrscheinlichkeit dafür, dass als Ergebnis des Zufallsexperimentes ein elementares Ereignis ω ∈ A eintritt, wenn bekannt
ist, dass ω ∈ B gilt, ist definiert als:
Pr(A | B) :=
B
Pr(A ∩ B)
.
Pr(B)
Beispiel 8.9
Wir betrachten das Zufallsexperiment dreimaliges Werfen einer Münze, wobei als Wahrscheinlichkeitsmaß die Gleichverteilung zugrunde liegt.
Uns interessiert die Wahrscheinlichkeit daür, dass ingesamt zweimal Kopf
(kurz: K) und einmal Zahl (kurz: Z) fällt, wenn bekannt ist, dass beim ersten
Wurf bereits Kopf gefallen ist. Also gilt:
• A = {(K, K, Z), (K, Z, K), (Z, K, K)},
• B = {(K, K, K), (K, K, Z), (K, Z, K), (K, Z, Z)},
• A ∩ B = {(K, K, Z), (K, Z, K)}.
Da es ingesamt 8 elementare Ereignisse gibt, erhalten wir Pr(A ∩ B) =
2
8
8.1 Entwurfstechnik Randomisierung
Seite 133
und Pr(B) = 48 . Für die gesuchte Wahrscheinlichkeit, d.h. die bedingte Wahrscheinlichkeit Pr(A | B) gilt damit:
Pr(A | B) =
Pr(A ∩ B)
=
Pr(B)
2
8
4
8
=
1
.
2
Die bedingte Wahrscheinlichkeit Pr(A | B) ist also – wie zu vermuten war –
größer als die Wahrscheinlichkeit Pr(A).
Analog zum Begriff bedingte Wahrscheinlichkeit wird nun der Begriff bedingter
Erwartungswert definiert.
Sei Ω eine endliche Menge, die Menge der Elementarereignisse, Pr ein Wahrscheinlichkeitsmaß auf Ω und X eine Zufallsvariable auf Ω. Desweiteren sei
X(Ω) := {X(ω) | ω ∈ Ω}. Für jedes Ereignis B ⊆ Ω und jede reelle Zahl z ∈ X(Ω)
bezeichnen wir mit PrX (z | B) die Wahrscheinlichkeit dafür, dass die Zufallsvariable X den Wert z annimmt, wenn bekannt ist, dass ein elementares Ereignis
ω ∈ B Ergebnis des betrachteten Zufallsexperimentes ist, d.h.
X
PrX (z | B) :=
Pr({ω} | B),
ω∈Ereignis(X=z)
wobei Ereignis(X = z) die Teilmenge von Ω bezeichnet, die alle elementaren Ereignisse ω ∈ Ω mit X(ω) = z enthält.
Der bedingte Erwartungswert der Zufallsvariablen X bzgl. des Ereignisses B, d.h.
der Erwartungswert dieser Zufallsvariablen für den Fall, dass bekannt ist, dass ein
elementares Ereignis ω ∈ B Ergebnis des betrachteten Zufallsexperimentes ist, ist
nun definiert als:
X
X
Exp(X | B) :=
z · PrX (z | B) =
X(ω) · Pr({ω} | B).
z∈X(Ω)
ω∈Ω
Beispiel 8.10
B
Wir betrachten das Zufallsexperiment dreimaliges Werfen einer Münze, wobei als Wahrscheinlichkeitsmaß die Gleichverteilung zugrunde liegt. Außerdem sei X die in Beispiel 8.3 eingeführte Zufallsvariable.
Es sei daran erinnert, dass X jedem Ereignis den von der Spielbank ausgezahlten Gewinn zuordnet. Immer dann, wenn Kopf (kurz: K) fällt, erhält man
einen Euro von der Spielbank; wenn Zahl (kurz: Z) fällt, erhält man nichts.
Uns interessiert der bedingte Erwartungswert dieser Zufallsvariablen, wenn
bekannt ist, dass im ersten Wurf Kopf gefallen is, d.h. der bedingte Erwartungswert Exp(X | B), wobei gilt:
• B = {(K, K, K), (K, K, Z), (K, Z, K), (K, Z, Z)}.
Da Pr(ω | B) = 0 für alle ω ∈
/ B gilt, erhalten wir:
X
X
Exp(X | B) =
X(ω) · Pr({ω} | B) =
X(ω) · Pr({ω} | B).
ω∈Ω
ω∈B
Seite 134
Kapitel 8 Entwurfstechniken
Offenbar gilt Pr({ω} | B) =
X
Exp(X | B) =
Pr({ω})
Pr(B)
X(ω) ·
ω∈B
=
1
4
für alle ω ∈ B. Damit erhalten wir:
Pr({ω})
1
1
1
1
= 3 · + 2 · + 2 · + 1 · = 2.
Pr(B)
4
4
4
4
Für unsere weiteren Untersuchungen ist die folgende Eigenschaft des bedingten
Erwartungswerts wichtig.
Lemma 8.3. Sei Ω eine endliche Menge, die Menge der Elementarereignisse, Pr ein Wahrscheinlichkeitsmaß auf Ω und X eine Zufallsvariable auf Ω. Ferner seien B1 , B2 ⊆ Ω zwei
disjunkte Ereignisse mit Pr(B1 ) > 0 und Pr(B2 ) > 0 sowie B := B1 ∪ B2 . Dann gilt:
• Exp(X | B) = Exp(X | B1 ) · Pr(B1 | B) + Exp(X | B2 ) · Pr(B2 | B).
Beweis. Es sollte offensichtlich sein, dass für alle ω ∈ Ω gilt:
• Pr({ω} | B) =
Pr({ω})
Pr(B) ,
falls ω ∈ B ist,
• Pr({ω} | B) = 0, sonst.
Also erhalten wir:
Exp(X | B) =
X
X(ω) ·
ω∈Ω
X
Pr({ω})
Pr({ω})
=
X(ω) ·
.
Pr(B)
Pr(B)
ω∈B
Da B1 ∩ B2 = ∅ und B1 ∪ B2 = B gilt, folgt sofort
X
Exp(X | B) =
X(ω) ·
X
Pr({ω})
Pr({ω})
+
X(ω) ·
.
Pr(B)
Pr(B)
ω∈B2
ω∈B1
Da wir wir wissen, dass sowohl Pr(B1 ) > 0 als auch Pr(B2 ) > 0 gilt, ergibt sich
damit:
Exp(X | B) =
X
X(ω) ·
X
Pr({ω}) · Pr(B2 )
Pr({ω}) · Pr(B1 )
+
X(ω) ·
.
Pr(B) · Pr(B1 )
Pr(B) · Pr(B2 )
ω∈B2
ω∈B1
Da für alle ω ∈ B1 natürlich {ω} ∩ B1 = {ω} sowie {ω} ∩ B2 = {ω} für alle ω ∈ B2
gilt und außerdem B1 ∩ B = B1 sowie B2 ∩ B = B2 gilt, muss auch
Pr({ω}) · Pr(B1 )
= Pr({ω} | B1 ) · Pr(B1 | B)
Pr(B) · Pr(B1 )
sowie
Pr({ω}) · Pr(B2 )
= Pr({ω} | B2 ) · Pr(B2 | B)
Pr(B) · Pr(B2 )
gelten. Da weiterhin sowohl
Exp(X | B1 ) =
X
X(ω) ·
ω∈Ω
X
Pr({ω})
Pr({ω})
=
X(ω) ·
Pr(B1 )
Pr(B1 )
ω∈B1
als auch
Exp(X | B2 ) =
X
ω∈Ω
X(ω) ·
X
Pr({ω})
Pr({ω})
=
X(ω) ·
Pr(B2 )
Pr(B2 )
ω∈B2
8.1 Entwurfstechnik Randomisierung
Seite 135
gilt, erhalten wir wie gewünscht:
Exp(X | B) = Exp(X | B1 ) · Pr(B1 | B) + Exp(X | B2 ) · Pr(B2 | B).
Nachdem alle Vorüberlegungen abgeschlossen sind, wenden wir jetzt die Methode der bedingten Erwartungswerte an, um RandomMaxCut zu derandomisieren.
Um den auf diese Art gewonnenen (deterministischen) Approximationsalgorithmus DetMaxCut zu beschreiben, verwenden wir die folgenden Bezeichnungen.
Sei G = (V, E) ein Graph mit V = {v1 , . . . , vn }, d.h. G ist die gegebene Instanz von
MaxCut, sowie XI die bei der Bestimmung der erwarteten Approximationsgüte
von RandomMaxCut verwendete Zufallsvariable.
Der Definition des Approximationsalgorithmus DetMaxCut liegt folgende Idee
zugrunde. Statt wir RandomMaxCut in Abhängigkeit vom Ausgang eines
Münzwurfes zu entscheiden, ob ein Knoten vi in die Menge C des zu bestimmenden Schnittes (C, D) mit D = V \ C aufgenommen wird, geht DetMaxCut
wie folgt vor: Der Knoten vi wird nur dann in die die Menge C aufgenommen,
wenn zu erwarten ist, dass auf diese Art ein “besserer” Schnitt erzeugt wird, als
wenn vi in die Menge D aufgenommen wird.
Beispiel 8.11
B
Wir betrachten den in Abbildung 8.2 dargestellten Graphen und gehen davon aus, dass sich DetMaxCut bereits entschieden hat, den Knoten v1 in die
Menge C und die Knoten v2 und v3 in die Menge D aufzunehmen. Dann ist
es offensichtlich sinnvoller, den Knoten v4 in die Menge C aufzunehmen, da
der resultierende Schnitt die Güte 4 hat. (Wenn vi stattdessen in die Menge D
aufgenommen würde, hätte der zugehörige Schnitt nur die Güte 2.)
v1
v2
v3
v4
Abb. 8.2: Graph für
Beispiel 8.11.
Um diese Idee auszuarbeiten, benötigen wir die folgenden Bezeichnungen.
Sei α = (a1 , . . . , an ) ein Folge der Länge n, die nur die Zahlen 0, 1 oder 2 enthält,
d.h. es gilt α ∈ {0, 1, 2}n . Für jedes i ∈
mit i ≤ n bezeichne α(i,0) (bzw. α(i,1) )
n
die Folge aus {0, 1, 2} , die entsteht, wenn in α das Element ai durch eine 0 (bzw.
durch eine 1) ersetzt wird. Desweiteren bezeichne B (α) die Menge aller Folgen
aus {0, 1}n die entstehen, wenn man in α alle Elemente ai mit ai = 2 durch eine 0
bzw. eine 1 ersetzt.
N
Beispiel 8.12
Sei α = (1, 0, 2, 2). Dann ist α(3,0) = (1, 0, 0, 2) und α(4,1) = (1, 0, 2, 1). Außerdem ist B (α) = {(1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1)}.
B
Seite 136
Kapitel 8 Entwurfstechniken
Die Arbeitsweise unseren (deterministischen) Approximationsalgorithmus DetMaxCut kann nun wie folgt beschrieben werden.
Algorithmus DetMaxCut
Eingabe: Graph G = (V, E) mit V = {v1 , . . . , vn }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for i := 1 to n do
ai := 2;
od
α0 = (a1 , . . . , an ).
for i := 1 to n do
(i,1)
αi0 := αi−1 .
(i,0)
αi00 := αi−1 .
0
Bestimme Ei0 = Exp(XI | B (αi ) ).
00
Bestimme Ei00 = Exp(XI | B (αi ) ).
if Ei0 ≥ Ei00 then
αi := αi0 ;
else
αi := αi00 ;
fi
od
C := ∅;
D := ∅;
(/* Sei αn = (a1 , . . . , an ) */)
for i := 1 to n do
if ai = 0 then
D := D ∪ {vi };
else
C := C ∪ {vi };
fi
od
return (C, D);
Zur Illustration der Arbeitsweise von DetMaxCut schauen wir uns an, wie die Instanz I aus Abbildung 8.2 verarbeitet wird. (Es sei angemerkt, dass wir uns später
davon überzeugen, weshalb die angegebenen bedingten Erwartungswerte korrekt
sind.)
B
Beispiel 8.13
Zu Beginn wir α0 = (2, 2, 2, 2) gesetzt.
Im ersten Schritt wird α10 = (1, 2, 2, 2) sowie α100 = (0, 2, 2, 2) gesetzt. Da
0
00
Exp(XI | B (α1 ) ) = Exp(XI | B (α1 ) ) = 2 gilt, wird α1 := (1, 2, 2, 2) gesetzt.
Im zweiten Schritt wird α20 = (1, 1, 2, 2) sowie α200 = (1, 0, 2, 2) gesetzt. Da
0
00
Exp(XI | B (α2 ) ) = 1, 5 und Exp(XI | B (α2 ) ) = 2, 5 gilt, wird α2 := (1, 0, 2, 2)
gesetzt.
Im dritten Schritt wird α30 = (1, 0, 1, 2) sowie α300 = (1, 0, 0, 2) gesetzt. Da
0
00
Exp(XI | B (α3 ) ) = 2 und Exp(XI | B (α3 ) ) = 3 gilt, wird α3 := (1, 0, 0, 2)
gesetzt.
8.1 Entwurfstechnik Randomisierung
Seite 137
Zum Abschluss wird α40 = (1, 0, 0, 1) sowie α400 = (1, 0, 0, 0) gesetzt. Da
0
00
Exp(XI | B (α4 ) ) = 4 und Exp(XI | B (α4 ) ) = 2 gilt, wird α4 := (1, 0, 0, 1)
gesetzt.
DetMaxCut bestimmt demzufolge den Schnitt (C, D) mit C = {v1 , v4 } und
D = {v2 , v3 }, also sogar eine optimale Lösung.
Zum Abschluss dieses Abschnitts werden wir zeigen, dass DetMaxCut ein Approximationsalgorithmus konstanter Güte für MaxCut ist, der den Approximationsfaktor 12 hat.
Als Erstes kümmern wir uns um die Güte der von DetMaxCut bestimmten Lösungen.
Satz 8.3
Sei G = (V, E) ein Graph mit n Knoten und m Kanten sowie S = (C, D) der
von DetMaxCut bei Eingabe dieser Instanz I bestimmte Schnitt. Dann gilt:
• w(S) ≥
1
2
· m.
w(S)
Also gilt w(Opt(I))
≥
die Instanz I sei.
1
2,
wobei Opt(I) wie üblich eine optimale Lösung für
Beweis. Sei G = (V, E) die betrachtete Instanz von MaxCut, ΩI die bei der Bestimmung der erwarteten Approximationsgüte von RandomMaxCut betrachtete
Menge von elementaren Ereignissen, Pr das dabei verwendete Wahrscheinlichkeitsmaß auf ΩI sowie XI die dabei benutze Zufallsvariable auf ΩI .
Ferner seien αo bis αn die bei der Verarbeitung von I sukzessive bestimmten Folgen aus {0, 1, 2}n . Wir schauen uns jetzt an, was wir über die zugehörigen bedingten Erwartungswerte Exp(X | B (α0 ) ) bis Exp(X | B (αn ) ) wissen.
Da B (α0 ) = ΩI gilt, muss offenbar Exp(X | B (α0 ) ) = Exp(X) gelten. Wie im
Beweis von Satz 8.2 gezeigt, gilt Exp(X) ≥ 21 ·m, was sofort Exp(X | B (α0 ) ) ≥ 12 ·m
impliziert.
Da αn eine Folge aus {0, 1}n ist, muss B (αn ) = {αn } gelten. Damit gilt auch
Exp(X | B (αn ) ) = X(αn ) und folglich w(S) = Exp(X | B (αn ) ).
Um nun nachzuweisen, dass w(S) ≥ 21 · m ist, genügt es offenbar zu zeigen, dass
Exp(X | B (α0 ) ) ≤ Exp(X | B (αn ) ) gilt. Letzteres haben wir getan, wenn wir
zeigen können, dass Exp(X | B (αi−1 ) ) ≤ Exp(X | B (αi ) ) für alle i ∈ mit i ≤ n
gilt.
N
(i,1)
(i,0)
Sei also i entsprechend gewählt und αi0 := αi−1 sowie αi00 := αi−1 . Man sieht nun
unmittelbar, dass
0
00
• B (αi ) ∩ B (αi ) = ∅,
0
00
• |B (αi ) | = |B (αi ) |,
0
00
• B (αi ) ∪ B (αi ) = B (αi−1 ) .
S
Seite 138
Kapitel 8 Entwurfstechniken
gilt. Da das zugrunde liegende Wahrscheinlichkeitsmaß Pr die Gleichverteilung
ist, folgt daraus:
0
00
Pr(B (αi ) | B (αi−1 ) ) = Pr(B (αi ) | B (αi−1 ) ) =
1
.
2
Zusammen mit Lemma 8.3 ergibt sich also
Exp(X | B (αi−1 ) ) =
0
00
1
1
· Exp(X | B (αi ) ) + · Exp(X | B (αi ) ),
2
2
und damit auch
Exp(X | B (αi−1 ) ) ≤ 2 · max
0
00
1
1
· Exp(X | B (αi ) ), · Exp(X | B (αi ) ) .
2
2
Da αi so gewählt wurde, dass
n
o
0
00
Exp(X | B (αi ) ) = max Exp(X | B (αi ) ), Exp(X | B (αi ) )
gilt, erhalten wir wie gewünscht:
Exp(X | B (αi−1 ) ) ≤ Exp(X | B (αi ) ).
Da – wie gesehen – w(S) ≥ 21 · m gilt und höchstens alle Kanten von G einen
Schnitt kreuzen können, d.h. es gilt w(Opt(I)) ≤ m, folgt sofort:
1
1
m
1
w(S)
2m
≥
≥ 2 = .
w(Opt(I))
w(Opt(I))
m
2
Um das Hauptergebnis dieses Abschnitts zu beweisen, bleibt noch zu zeigen, dass
DecMaxCut ein effizienter Algorithmus ist. Wir müssen uns also überlegen, wie
man die relevanten bedingten Erwartungswerte effizient berechnen kann.
Um hierfür einen Ansatz zu entwickeln, schauen wir uns zunächst das folgende
Beispiel an.
B
Beispiel 8.14
Wir betrachten noch einmal den Graphen G = (V, E) aus Beispiel 8.11. In
Abbildung 8.3 sind den Kanten dieses Graphen Namen zugeordnet.
Sei α = (1, 0, 2, 2) und B (α) = {(1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1)}.
Um den bedingten Erwartungswert Exp(XI | B (α) ) zu berechnen, betrachten wir jedes ω ∈ B (α) separat. Offenbar gilt:
• X(ω) = 2 für ω = (1, 0, 0, 0), da e1 und e2 den zum elementaren Ereignis (1, 0, 0, 0) gehörenden Schnitt ({v1 }, {v2 , v3 , v4 }) kreuzen.
• X(ω) = 4 für ω = (1, 0, 0, 1), da e1 , e2 , e3 und e4 den zum elementaren
Ereignis (1, 0, 0, 1) gehörenden Schnitt ({v1 , v4 }, {v2 , v3 }) kreuzen.
• X(ω) = 2 für ω = (1, 0, 1, 0), da e1 und e4 den zum elementaren Ereignis (1, 0, 1, 0) gehörenden Schnitt ({v1 , v3 }, {v2 , v4 }) kreuzen.
8.1 Entwurfstechnik Randomisierung
Seite 139
• X(ω) = 2 für ω = (1, 0, 1, 1), da e1 und e3 den zum elementaren Ereignis (1, 0, 1, 1) gehörenden Schnitt ({v1 , v3 , v4 }, {v2 }) kreuzen.
Da Pr(ω | B (α) ) = 41 für alle ω ∈ B (α) gilt (es gibt offenbar insgesamt 16 elementare Ereignisse, von denen vier zu B (α) gehören), erhalten wir:
X
Exp(XI | B (α) ) =
X(ω) · Pr(ω | B (α) ) = 2, 5.
ω∈B (α)
v1
e1
e2
v3
v2
e3
e4
Abb. 8.3: Graph für
Beispiel 8.14.
v4
Ein genauerer Blick darauf, wie sich der Wert der Zufallsvariablen X für die elementaren Ereignisse ω ∈ B (α) in Beispiel 8.14 ergibt, zeigt nun:
• Für jedes ω ∈ B (α) gilt, dass die Kante e1 bei der Bestimmung von X(ω)
berücksichtigt wird.
• Für die Hälfte aller ω ∈ B (α) gilt, dass jede der Kanten e2 , e3 und e4 bei der
Bestimmung von X(ω) berücksichtigt wird.
Diese Beobachtung lässt sich nun ausnutzen, um die relevanten bedingten Erwartungswerte deutlich effizienter zu berechnen. Bei der Formulierung der zugrunde
liegenden Rechenvorschrift spielt die folgende Hilfsfunktion h eine wichtige Rolle.
Sei G = (V, E) ein Graph mit V = {v1 , . . . , vn } und α = (a1 , . . . , an ) eine Folge
aus {0, 1, 2}n . Dann setzen wir für alle Kanten e = {vi , vj }:
• h(e) := 1, falls ai = 0 und aj = 1 gilt,
• h(e) := 1, falls ai = 1 und aj = 0 gilt,
• h(e) := 12 , sonst.
Zur Illustration dieser Definition dient das folgende Beispiel:
Beispiel 8.15
Wir betrachten noch einmal den Graphen G = (V, E) aus Abbildung 8.3 und
den Vektor α = (1, 0, 2, 2). Dann gilt:
• h(e1 ) = 1,
• h(e2 ) = h(e3 ) = h(e3 ) = 12 .
Man kann sich nun leicht davon überzeugen, dass gilt:
X
Exp(XI | B (α) ) =
h(e) = 2, 5.
e∈E
Ganz allgemein erhalten wir nun:
B
Seite 140
Kapitel 8 Entwurfstechniken
Lemma 8.4. Sei G = (V, E) ein Graph mit V = {v1 , . . . , vn }, d.h. G ist die betrachtete
Instanz I von MaxCut, und α eine Folge aus {0, 1, 2}n . Dann gilt:
• Exp(XI | B (α) ) =
P
e∈E
h(e).
Beweis. Sei G = (V, E) die betrachtete Instanz von MaxCut mit V = {v1 , . . . , vn }
und E = {e1 , . . . , em } sowie α = (a1 , . . . , an ) die betrachtete Folge aus {0, 1, 2}n .
Weiterhin sei ΩI die bei der Bestimmung der erwarteten Approximationsgüte von
RandomMaxCut betrachtete Menge von elementaren Ereignissen, Pr das dabei
verwendete Wahrscheinlichkeitsmaß auf ΩI sowie XI die dabei benutze Zufallsvariable auf ΩI .
Wir benutzen nun – wie im Beweis von Satz 8.2 – die folgenden binären Zufallsvariablen X1 , . . . , Xm , wobei Xi einem elementaren Ereignis ω ∈ ΩI genau dann den
Wert 1 zuordnet, wenn die Kante ei den von A bestimmten Schnitt A(I, ω) kreuzt.
Es sei daran erinnert, dass für jedes elementare Ereignis ω ∈ ΩI gilt:
• XI (ω) =
Pm
i=1
Xi (ω).
In der folgenden Argumentation nutzen wir aus, dass – in Analogie zu Lemma 8.2
– auch für den bedingten Erwartungwert Exp(XI | B (α) ) gilt:
Exp(XI | B (α) ) =
n
X
Exp(Xi | B (α) ).
i=1
Um nun die Aussage von Lemma 8.4 zu verifizieren, genügt es deshalb im Folgenden zu zeigen, dass Exp(Xi | B (α) ) = h(ei ) für jede Zufallsvariable Xi gilt.
Sei also Xi eine dieser Zufallsvariablen und ei = (vj , vk ) die zu Xi gehörende
Kante von G. Wir unterscheidendie folgenden drei Fälle:
Fall 1. aj = 0 und ak = 1.
In diesem Fall gilt offenbar für jedes ω ∈ B (α) , dass die Kante ei den zu ω gehörenden Schnitt (C, D) kreuzt. (Man beachte, dass vj zu D und vk zu C gehört.) Also
ist PrXi (1 | B (α) ) = 1, und damit erhalten wir:
X
Exp(Xi | B (α) ) =
z · PrXi (z | B (α) ) = 1 · PrXi (1 | B (α) ) = 1.
z∈Xi (ΩI )
Also gilt in diesem Fall Exp(Xi | B (α) ) = h(ei ).
Fall 2. aj = 1 und ak = 0.
In diesem Fall kann analog wie im Fall 1 argumentiert werden.
Fall 3. aj = 2 oder ak = 2.
In diesem Fall gilt offenbar für die Hälfte aller ω ∈ B (α) , dass die Kante ei den zu ω
gehörenden Schnitt (C, D) kreuzt. (Man beachte, dass vj und vk beide zu C bzw.
beide zu D gehören oder vj zu D und vk zu C bzw. vj zu C und vk zu D gehört.)
8.2 Entwurfstechnik Lineare Programmierung
Seite 141
Da das zugrunde liegende Wahrscheinlichkeitsmaß Pr die Gleichverteilung ist,
muss PrXi (1 | B (α) ) = 21 gelten, und damit erhalten wir:
Exp(Xi | B (α) ) =
X
z · PrXi (z | B (α) ) = 1 · PrXi (1 | B (α) ) =
z∈Xi (ΩI )
1
.
2
Also gilt auch in diesem Fall Exp(Xi | B (α) ) = h(ei ).
Wenn in DetMaxCut die relevanten bedingten Erwartungswerte gemäß der in
Lemma 8.4 angegebenen Rechensvorschrift bestimmt werden, genügen polynomiell viele Rechenschritte, um eine Instanz von MaxCut zu verarbeiten. Also folgt
zusammen mit Satz 8.3 unmittelbar das Hauptergebnis dieses Abschnittes:
Satz 8.4
S
DetMaxCut ist ein Approximationsalgorithmus konstanter Güte für das Maximierungsproblem MaxCut mit dem Approximationsfaktor 12 .
Zum Abschluss sei angemerkt, dass man mit Hilfe der Methode der bedingten Erwartungswerte auch den randomisierten Approximationsalgorithmus RandomMax3Sat derandomisieren kann. Der dabei gewonnene (deterministische) Lösungsalgorithmus für Max3Sat ist ein Approximationsalgorithmus konstanter
Güte mit dem Approximationsfaktor 78 .
Übung 8.3
Benutzen Sie die Methode der bedingten Erwartungswerte, um den randomisierten Approximationsalgorithmus RandomMax3Sat zu derandomisieren.
8.2 Entwurfstechnik Lineare Programmierung
In diesem Abschnitt lernen wir einen zweiten recht vielversprechenden Ansatz
zum Entwurf von Approximationsalgorithmen für NP-schwere Optimierungsprobleme kennen. Die Grundidee besteht darin, bekannte Konzepte und Algorithmen aus dem Gebiet Operations Research zu benutzen, um NP-schwere Optimierungsprobleme zu modellieren und approximativ zu lösen.
Operations Research ist ein Teilgebiet der Mathematik, in dem es ganz allgemein
darum geht, praktisch relevante Problemstellungen geeignet zu modellieren und
die entstehenden mathematischen Modelle zu analysieren. Zur Illustration soll
das folgende Beispiel dienen.
Ü
Seite 142
B
Kapitel 8 Entwurfstechniken
Beispiel 8.16
Ein Unternehmen stellt unterschiedliche Produkte her. Es kennt die Details
des Produktionsprozesses (welche Arbeitsschritte sind nötig, wie viel Zeit
benötigen diese Arbeitschritte) und hat Informationen zur aktuellen Marktsituation (mit welchem Gewinn können die Produkte verkauft werden). Ziel
ist es, den Produktionsprozess so zu gestalten, dass mit dem Verkauf der in
in einem bestimmten Zeitraum produzierten Produkten möglichst viel Gewinn erzielt werden kann.
Konkret gilt etwa, dass das Unternehmen Produkte vom Typ 1 bzw. Typ 2
produziert, deren Herstellung jeweils drei Arbeitschritte benötigt und bei
deren Verkauf je Produkt 30 Euro bzw. 60 Euro Gewinn erzielt werden. Um
ein Produkt vom Typ 1 herzustellen, benötigt der erste Arbeitsschritt 25 Minuten, der zweite 60 Minuten und der dritte 68 Minuten. Zur Herstellung
eines Produkts vom Typ 2 werden für die einzelnen Arbeitsschritte 75, 60
bzw. 34 Minuten benötigt. Die Ausstattung des Unternehmens mit Maschinen erlaubt es, pro Tag 450 Minuten für den ersten, 480 Minuten für den
zweiten und 476 Minuten für den dritten Arbeitsschritt einzuplanen.
Das Unternehmen will wissen, wie viele Produkte vom Typ 1 und wie viele
vom Typ 2 pro Tag produziert werden müssen, um den durch den Verkauf
der hergestellten Produkte erzielten Gewinn zu maximieren.
Die in Beispiel 8.16 beschriebene Fragestellung kann folgendermaßen modelliert
werden.
B
Beispiel 8.17
Wir benutzen zwei Variablen z1 und z2 , um zu beschreiben, wie viele Produkte vom jeweiligen Typ pro Tag produziert werden. Der durch den Verkauf
der produzierten Produkte erzielte Gewinn ist offenar am größten, wenn der
Funktionswert der linearen Zielfunktion
h(z1 , z2 ) := 30 · z1 + 60 · z2
maximal ist. Um die Spezfika des Produktionsprozesses geeignet zu berücksichtigen, müssen beim Maximieren dieser Zielfunktion bestimmte Nebenbedingungen beachtet werden.
Bspw. resultiert die Information, dass pro Tag nur 450 Minuten für den ersten Arbeitsschritt eingeplant werden können und dass zur Produktion eines
Produkts 25 Minuten bzw. 75 Minuten für den ersten Arbeitsschritt benötigt
werden, in der linearen Nebenbedingung
25 · z1 + 75 · z2 ≤ 450.
Aus den Informationen zu den anderen Arbeitschritten kann man analog
entsprechende lineare Nebenbedingungen ableiten.
Die in Beispiel 8.16 beschriebene Fragestellung wird nun folgt modelliert. Es
geht darum, unter allen Paaren reeler Zahlen, die die linearen Nebenbedingungen
8.2 Entwurfstechnik Lineare Programmierung
Seite 143
• z1 ≥ 0,
• z2 ≥ 0,
• 25 · z1 + 75 · z2 ≤ 450,
• 60 · z1 + 60 · z2 ≤ 480,
• 68 · z1 + 34 · z2 ≤ 476.
erfüllen, eines auszuwählen, für das der Funktionswert der linearen Zielfunktion h maximal ist.
Wie unser Beispiel zeigt, kann man ein mathematisches Optimierungsproblem
verwenden, um eine praktisch interessante Problemstellung geeignet zu modelliern. Im Gebiet Operations Research wurden unterschiedliche mathematische Optimierungsprobleme studiert und eine Reihe tieferliegende mathematische Ergebnisse erzielt, die u.a. benutzt werden können, um Instanzen dieser Optimierungsprobleme zu lösen. Für uns sind das Optimierungsproblem LinearProgramming,
von dem wir in Beispiel 8.17 bereits eine Instanz kennengelernt haben, und eine
Variante davon, das Optimierungsproblem IntegerLinearProgramming, von zentraler Bedeutung.
8.2.1 Grundlagen
Eine Instanz I des Optimierungsproblems LinearProgramming, ein so genanntes
lineares Programm, wird beschrieben durch:
• eine Menge von n Variablen z1 , . . . , zn ,
N
• eine Menge von m linearen Nebenbedingungen, wobei
Pn für jedes j ∈ mit
j ≤ m die zugehörige Nebenbedingung die Form i=1 ai,j · zi ≤ bj hat,
Pn
• eine lineare Zielfunktion h(z1 , . . . , zn ) := i=1 ci · zi .
Jedes n-Tupel reeler Zahlen, das alle in der Beschreibung des linearen Programms I präzierten linearen Nebenbedingungen erfüllt, ist eine zulässige Lösung für I. Wenn I als Maximierungsproblem (Minimierungsproblem) interpretiert wird, geht es darum, eine zulässige Lösung zu finden, für die der Wert der
linearen Zielfunktion h maximal (minimal) ist, also darum, eine optimale Lösung
zu finden. Die Zielfunktion h ist also – unter Berücksichtigung der präzisierten
linearen Nebenbedingungen – zu maximieren (minimieren).
Optimierungsproblem LinearProgramming
Eingabe: lineares Programm I
Ausgabe: zulässige Lösung für I, die die Zielfunktion maximiert (minimiert)
Zur Illustration der verwendeten Begriffe kommen wir noch einmal auf das in
Beispiel 8.17 betrachtete lineare Programm zuück.
Seite 144
B
Kapitel 8 Entwurfstechniken
Beispiel 8.18
Man kann leicht nachrechnen, dass u.a. die Paare (0, 6), (7, 0) sowie (3, 5)
zulässige Lösungen sind, d.h. sie erfüllen alle in Beispiel 8.17 präzisierten
linearen Nebenbedingungen, und dass h(0, 6) = 240, h(7, 0) = 210 und
h(3, 5) = 290 gilt.
Es sei angemerkt, dass 290 der maximale Funktionswert ist, den die lineare Zielfunktion h annehmen kann, wenn alle linearen Nebenbedingungen
erfüllt sind. Also ist das Paar (3, 5) eine optimale Lösung für das lineare Programm aus Beispiel 8.17.
Bevor wir fortfahren, ist die folgende eher technische Anmerkung angebracht.
E
Exkurs 8.2
Um ein lineares Programm zuP
beschreiben, verwendet
mitunter auch
Pman
n
n
Nebenbedingungen der Form i=1 ai,j · zi ≥ bj oder i=1 ai,j · zi = bj .
Es sollte klar sein, dass man P
die erste Nebenbedingung äquivalent durch
n
die lineare Nebenbedingung i=1 −ai,j · zi ≤ −bj ersetzen kann. Analog
kann man die zweiteP
Nebenbedingung äquivalent
Pn durch die beiden linearen
n
Nebenbedingungen i=1 ai,j · zi ≤ bj und i=1 ai,j · zi ≥ bj ersetzen.
Das Optimierungsproblem LinearProgramming gehört zu den am intensivsten
studierten mathematischen Optimierungsproblemen. Es gibt eine ganz Reihe von
tiefgründigen Lösungsalgorithmen für dieses Optimierungsproblem, deren detailierte Beschreibung den Rahmen unserer Darstellung bei weitem sprengen würde.
Für unsere weiteren Betrachtungen ist nur wichtig, dass sich das Optimierungsproblem LinearProgramming effizient lösen lässt.
S
Satz 8.5
Es gibt einen Algorithmus A, so dass für jedes lineare Program, also für jede
Instanz I des Optimierungsproblems Linear Programming, gilt:
• A bestimmt bei Eingabe von I eine optimale Lösung, d.h. eine zulässige Lösung, für die der Wert der Zielfunktion h von I maximal (minimal) ist,
• A arbeitet effizient, d.h. die Anzahl der Rechenschritte, die A benötigt,
um eine optimale Lösung zu bestimmen, ist polynomiell in der Anzahl
der Bits beschränkt, die benötigt werden, um das lineare Programm I
zu beschreiben.
Das zweite Optimierungsproblem, das zum Verständnis des Entwurfsmethode
Lineare Programmierung wichtig ist, ist das Optimierungsproblem IntegerLinearProgramming.
Eine Instanz I des Optimierungsproblems IntegerLinearProgramming, ein so genanntes ganzzahliges lineares Programm, wird beschrieben durch:
8.2 Entwurfstechnik Lineare Programmierung
Seite 145
• eine Menge von n Variablen z1 , . . . , zn ,
Z
• eine Menge von n Nichtlinearitätsbedingungen der Form zi ∈ , so genannten Ganzzahligkeitsbedingungen2 ,
N
• eine Menge von m linearen Nebenbedingungen, wobei
Pn für jedes j ∈ mit
j ≤ m die zugehörige Nebenbedingung die Form i=1 ai,j · zi ≤ bj hat,
Pn
• eine lineare Zielfunktion h(z1 , . . . , zn ) := i=1 ci · zi .
Ein ganzzahliges lineares Programm I unterscheidet sich von einem linearen
Programm nur dadurch, dass die Menge der zulässigen Lösungen weiter eingeschränkt wird. Zulässige Lösungen des ganzzahligen linearenProgramms I sind
ausschießlich n-Tupel ganzer Zahlen, und zwar genau solche, die alle in der Beschreibung von I präzisierten linearen Nebenbedingungen erfüllen. Wenn I als
Maximierungsproblem (Minimierungsproblem) interpretiert wird, geht es wieder darum, eine zulässige Lösung zu finden, für die der Wert der linearen Zielfunktion h maximal (minimal) ist.
Optimierungsproblem IntegerLinearProgramming
Eingabe: ganzzahliges lineares Programm I
Ausgabe: zulässige Lösung für I, die die Zielfunktion maximiert (minimiert)
Wie wir gleich sehen werden unterscheiden sich die auf den ersten Blick sehr ähnlichen Optimierungsprobleme LinearProgramming und IntegerLinearProgramming gravierend in Bezug auf ihre algorithmische Beherrschbarkeit (man vergleiche hierzu Satz 8.5 und Satz 8.6). Bevor wir diesen Punkt genauer diskutieren, ist
die folgende Anmerkung wichtig.
Exkurs 8.3
E
Um ein ganzzahliges lineares Programm zu beschreiben, kann man auch
Nichtlinearitätsbedingungen der Form zi ∈ {0, 1} verwenden. Diese dienen
dazu, zum Ausdruck zu bringen, dass zulässige Lösungen n-Tupel aus der
Menge {0, 1}n sein müssen.
Es sollte klar sein, dass man jede dieser Nichtlinearitätsbedingungen äquivalent durch eine Ganzzahligkeitsbedingung der Form zi ∈ und zwei linerare Nebenbedingungen der Form zi ≥ 0 und zi ≤ 1 ersetzen kann.
Z
Die zentrale Idee hinter der Entwurfsmethode Lineare Programmierung besteht
nun darin, einen effizienten Lösungsalgorithmus für das Optimierungsproblem
LinearProgramming zu verwenden, um ein NP-schweres Optimierungsproblem
approximativ zu lösen.
Folgt man dieser Idee, ist es notwendig, ein interessierendes Optimierungsproblem zunächst einmal geeignet zu arithmetisieren, d.h. in die Sprache der gerade
eingeführten mathematischen Optimierungsprobleme zu übersetzen. Ein solchen
Übersetzung verfolgt das Ziel, jeder Instanz I des gegebenen Optimierungsproblems ein äquivalentes lineares bzw. ganzzahliges lineares Programm I 0 zuzuordnen. Äquivalent meint hierbei, dass sichergestellt ist, dass
• jeder zulässigen Lösung S 0 von I 0 eine zulässige Lösung S für I zugeordnet
werden kann, für die w(S) = h(S 0 ) gilt, und
2
Z bezeichnet wie üblich die Menge der ganzen Zahlen, also die Menge {0, −1, 1, −2, 2, . . . }.
Seite 146
Kapitel 8 Entwurfstechniken
• jeder zulässigen Lösung S für I auch eine zulässige Lösung S 0 für I 0 zugeordnet werden kann, so dass h(S 0 ) = w(S),
wobei w – wie üblich – die Gütefunktion des gegebenen Optimierungsproblems
bezeichnet.
Es sei angemerkt, dass man ein NP-schweres Optimierungsproblem – wenn
eine solche Übersetzung überhaupt möglich ist – höchstwahrscheinlich nur in
die Sprache des Optimierungsproblems IntegerLinearProgramming übersetzen
kann. (Weshalb das so ist, sehen wir später.)
B
Beispiel 8.19
Wir betrachten das NP-schwere Optimierungsproblem MaxSubsetSum (siehe Kapitel 1). Es sei daran erinnert, dass es bei diesem Maximierungsproblem darum geht, aus einer gegebenen Menge von Objekten bestimmter Größe solche auszuwählen, die zusammen in einen Behälter einer vorgegebenen
Größe passen. Ziel ist es, solche Objekte auszuwählen, die den zur Verfügung stehenden Behälter so gut wie möglich füllen.
Sei O = {o1 . . . , on } eine Menge von Objekten der Größe s(o1 ), . . . bzw. s(on )
sowie b die Größe des zur Verfügung stehenden Behälters. Dieser Instanz I
von MaxSubsetSum ordnen wir nun folgt eine Instanz I 0 des Optimierungsproblems IntegerLinearProgramming zu:
Wir wählen n Variablen z1 ,. . . , zn , also für jedes Objekt in O eine Variable,
sowie die Zielfunktion
h(z1 , . . . , zn ) :=
n
X
s(oi ) · zi ,
i=1
die unter Berücksichtigung von n Nichtlinearitätsbedingungen der Form
zi ∈ {0, 1} und der linearen Nebenbedingung
n
X
s(oi ) · zi ≤ b
i=1
zu maximieren ist.
Dass wir I ein äquivalentes ganzzahliges lineares Programm I 0 zugeordnet
haben, sieht man wie folgt:
Sei S 0 = (s01 , . . . , s0n ) eine zulässige Lösung von I 0 . Wir ordnen S 0 die Teilmenge O0 := {oi ∈ O | s0i = 1} zu. Die lineare Nebenbedingung garantiert
nun, dass O0 eine zulässige Lösung für die Instanz I von MaxSubsetSum ist.
Dass w(O0 ) = h(S 0 ) gilt, sollte offensichtlich sein. (Es sei daran erinnert, dass
w(O0 ) der Gesamtgröße der Objekte in O0 entspricht.)
Dass man völlig analog jeder zulässigen Lösung S für I eine zulässigen Lösung S 0 für I 0 zuordnen kann, für die h(S 0 ) = w(S) gilt, sollte klar sein.
Beispiel 8.19 illustriert ganz gut, weshalb die Sprache der ganzzahligen linearen
Programme in der Regel die bessere Wahl ist, wenn man ein NP-schweres Optimierungsproblem arithmetisieren will.
8.2 Entwurfstechnik Lineare Programmierung
Beispiel 8.20
Wir betrachten die folgende Instanz I von MaxSubsetSum, bei der drei Objekte o1 , o2 und o3 der Größe 3, 5 bzw. 6 gegeben sind und der zur Verfügung
stehende Behälter die Größe 10 hat.
Seite 147
B
Anstelle eines ganzzahligen lineare Programms könnte man versuchen, der
betrachteten Instanz I das folgende lineare Program I 0 zuzuordnen, bei dem
es darum geht, die Zielfunktion h(z1 , z2 , z3 ) := 3 · z1 + 5 · z2 + 6 · z3 unter
Berücksichtigung der linearen Nebenbedingungen z1 ≥ 0, z2 ≥ 0 und z3 ≥ 0
sowie 3 · z1 + 5 · z2 + 6 · z3 ≤ 10 zu maximieren.
Offenbar ist nun S = (1, 1, 13 ) eine optimale Lösung für I 0 mit h(S) = 10. Da
jede zulässige Lösung von I aber eine Güte kleiner oder gleich 9 hat, ist I 0
kein lineares Programm, das zur Instanz I von MaxSubsetSum äquivalent ist.
Wenn man MaxSubsetSum in die Sprache des Optimierungsproblems LinearProgramming übersetzt, arithmetisiert man de facto ein anderes, algorithmisch viel
einfacher zu beherrschendes Maximierungsproblem.
Beispiel 8.21
B
Wir betrachten die Version FracMaxSubsetSum des Maximierungsproblems
MaxSubsetSum, bei der es auch darum geht, aus einer gegebenen Menge von
Objekten bestimmter Größe solche auszuwählen, die zusammen in einen Behälter einer vorgegebenen Größe passen. Im Unterschied zu MaxSubsetSum
ist es jetzt zulässig, nur einen bestimmten Teil eines gegebenen Objektes einzupacken; also etwa nur die Hälfte oder ein Drittel. Ziel ist es wieder, den
zur Verfügung stehenden Behälter so gut wie möglich zu füllen.
Übung 8.4
Ü
Überlegen Sie sich, wie man das Maximierungsproblem FracMaxSubsetSum
in die Sprache des Optimierungsproblem LinearProgramming übersetzen
kann, und begründen Sie, weshalb FracMaxSubsetSum kein NP-schweres
Optimierungsproblem ist.
Das nächste Beispiel demonstriert, dass eine Arithmetisierung eines gegebenen
NP-schweren Optimierungsproblems mitunter auch ein klein wenig “anspruchsvoller” sein kann.
Beispiel 8.22
Wir betrachten das zu Beginn dieses Kapitels diskutierte Maximierungsproblem Max3Sat und interessieren uns zunächst nur dafür, wie man der Instanz
α = (x1 ∨ x2 ∨ ¬x3 ) ∧ (¬x1 ∨ ¬x2 ∨ x3 )
B
Seite 148
Kapitel 8 Entwurfstechniken
ein äquivalentes ganzzahliges lineares Programm I 0 zuordnen kann. (Wie
man die zugrunde liegende Idee verallgemeinern kann, sehen wir dann im
Beweis von Satz 8.6.)
Wir benutzen fünf Variablen z1 , z2 , z3 , z10 und z20 , wobei die ersten drei den
Variablen in α und die anderen beiden den Klauseln von α zugeordnet sind,
und betrachten die folgende lineare Zielfunktion
h(z1 , z2 , z3 , z10 , z20 ) := z10 + z20 ,
die es zu maximieren gilt. Neben den fünf Nichtinearitätsbedingungen der
Form zi ∈ {0, 1} bzw. zj0 ∈ {0, 1} verwenden wir die folgenden zwei linearen
Nebenbedingungen:
• z1 + z2 + (1 − z3 ) ≥ z10 (also z1 + z2 − z3 − z10 ≥ −1),
• (1 − z1 ) + (1 − z2 ) + z3 ≥ z20 (also −z1 − z2 + z3 − z20 ≥ −2).
Sei nun S 0 = (s01 , s02 , s03 , s04 , s05 ) eine Lösung von I 0 . Dieser Lösung ordnen wir
nun eine Belegung µ der Variablen von α (also eine zulässige Lösung für I)
zu, indem für jedes xi genau dann µ(xi ) := true gesetzt wird, wenn s0i = 0
gilt.
Die so definierte Belegung µ erfüllt offenbar genau dann die erste Klausel
von α nicht, wenn s01 = s02 = 0 sowie s03 = 1 gilt. Da in diesem Fall offenbar
s04 = 0 gelten muss (sonst würde S 0 die erste der beiden linearen Nebenbedingungen nicht erfüllen), folgt daraus, dass genau dann s04 = 1 gilt, wenn
µ die erste Klausel von α erfüllt. Völlig analog folgt, dass genau dann s05 = 1
gilt, wenn µ die zweite Klausel von α erfüllt ist. Folglich gibt der Funktionswert h(S 0 ) an, wie viele Klauseln von α die Belegung µ erfüllt, d.h. es gilt
w(µ) = h(S 0 ).
Dass man völlig analog auch jeder Belegung µ der Variablen in α eine zulässige Lösung S 0 von I 0 zuordnen, für die h(S 0 ) = w(µ) gilt, sollte wieder
offensichtlich sein.
Also haben wir der Instanz α von Max3Sat ein äquivalentes ganzzahliges
lineares Programm I 0 zugeordnet.
Nachdem wir gesehen haben, wie man ein gegebenes NP-schweres Optimierungsproblem in die Sprache des Optimierungsproblems IntegerLinearProgramming übersetzen kann, stellt sich die Frage, was uns das Ganze hilft.
Ein erster, naheliegende Ansatz wäre, einen der bekannten effizienten Lösungsalgorithmen für das Optimierungsproblem LinearProgramming so anpassen, dass
man eine effizienten Lösungsalgorithmus für das Optimierungsproblem IntegerLinearProgramming erhält. Diesen Algorithmus könnte man dann benutzen, um
eine optimale Lösung für das einer Instanz I des gegebenen Optimierungsproblems zugeordnete ganzzahlige lineare Programm I 0 zu bestimmen, anhand derer
im Anschluss eine optimale Lösung für I bestimmt wird.
Wie das folgende Ergebnis belegt, wird dieser Ansatz höchstwahrscheinlich nicht
funktionieren.
8.2 Entwurfstechnik Lineare Programmierung
Seite 149
Satz 8.6
Falls P 6= NP gilt, gibt es keinen Algorithmus A, so dass für jedes ganzzahlige linerare Programm, also für jedes Instanz I des Optimierungsproblems
IntegerLinearProgramming gilt:
• A bestimmt bei Eingabe von I eine optimale Lösung, d.h. eine zulässige Lösung, für die der Wert der Zielfunktion h von I maximal (minimal) ist,
• A arbeitet effizient, d.h. die Anzahl der Rechenschritte, die A benötigt,
um eine optimale Lösung zu bestimmen, ist polynomiell in der Anzahl
der Bits beschränkt, die benötigt werden, um das ganzzahlige lineare
Programm zu beschreiben.
Beweis. Wir nehmen also an, dass es einen effizienten Lösungsalgorithmus A für
das Optimierungsproblem IntegerLinearProgramming gibt. Um diese Annahme
zum Widerspruch zu führen, genügt es zu zeigen, dass A benutzt werden kann,
um das NP-schwere Maximierungsproblem Max3Sat effizient zu lösen.
Sei α = (a1,1 ∨ a1,2 ∨ a1,3 ) ∧ · · · ∧ (ak,1 ∨ ak,2 ∨ ak,3 ) die gegebene Instanz I von
Max3Sat, also eine aussagenlogische Formel in 3-konjunktiver Normalform über
den Variablen x1 , . . . , xn . Es sei daran erinnert, dass wir davon ausgehen können,
dass keine der Klauseln von α allgemeingültig ist.
Um eine optimale Lösung für die Instanz α von Max3Sat, also eine Belegung µ
der Variablen x1 , . . . , xn zu bestimmen, die möglichst viele Klauseln von α erfüllt,
kann man folgenden Algortithmus B benutzen.
Algorithmus B für Max3SAT
Eingabe: aussagenlogische Formel α in 3-konjunktiver Normalform
über den Variablen x1 , . . . , xn
1
2
3
4
Ordne α ein äquivalentes ganzzahliges lineares Programm I 0 zu.
Bestimme mit A eine zulässige Lösung S 0 für I 0 , die die Zielfunktion h
von I 0 maximiert.
Bestimme anhand von S 0 eine Belegung µ der Variablen x1 , . . . , xn .
return µ;
Um die erste Anweisung von B zu realisieren, benutzt man die in Beispiel 8.22
vorgestellte Idee. Man wählt sich zunächst n Variablen z1 , . . . , zn sowie k Variablen
z10 , . . . , zk0 und definiert die zugehörige Zielfunktion h wie folgt:
h(z1 , . . . , zn , z10 , . . . , zk0 ) :=
k
X
zj0 .
j=1
Zusätzlich zu den n + k Nichtlinearitätsbedingungen der Form zi ∈ {0, 1} bzw.
zj0 ∈ {0, 1} definiert man k lineare Nebenbedingungen, d.h. für jede Klausel in α
eine. Sei (aj,1 ∨ aj,2 ∨ aj,3 ) eine dieser Klauseln und bezeichne Xj+ (bzw. Xj− ) die
Menge der Variablen, die in dieser Klausel unnegiert (bzw. negiert) vorkommen.
S
Seite 150
Kapitel 8 Entwurfstechniken
Die der Klausel (aj,1 ∨ aj,2 ∨ aj,3 ) zugeordnete lineare Nebenbedingung ist nun
definiert als:
X
X
zi +
(1 − zi ) ≤ zj0 .
xi ∈Xj+
xi ∈Xi−
Es sollte offensichtlich sein, dass man anhand von α effizient eine Beschreibung
dieses ganzzahligen linearen Programms I 0 bestimmen kann. (Damit ist auch klar,
dass die Größe der Beschreibung von I 0 polynomiell in der Größe der Beschreibung von α beschränkt ist.)
Sei nun S 0 = (s01 , . . . , s0n , s0n+1 , . . . , s0n+k ) die von A bestimmte zulässige Lösung,
die die Zielfunktion h von I 0 maximiert. Da A nach Annahme ein effizienter Lösungsalgorithmus für das Optimierungsproblem IntegerLinearProgramming ist,
folgt aus den obigen Bemerkungen, dass die Anzahl der Rechenschritte, die A benötigt, um S 0 zu bestimmen, polynomiell in der Größe der Beschreibung von α
beschränkt ist. Also kann auch die zweite Anweisung von B effizient realisiert
werden.
Wie in Beispiel 8.22 demonstriert, kann man nun S 0 eine Belegung µ der Variablen
x1 , . . . , xn (also eine zulässige Lösung) zuordnen, indem man genau dann µ(xi ) :=
true setzt, wenn s0i = 1 gilt. Es sollte offensichtlich sein, dass man µ effizient
anhand von S 0 bestimmen kann, und folglich kann die dritte Anweisung von B
ebenfalls effizient implementiert werden.
Zum Abschluss sei angemerkt, dass man unter Benutzung der selben Argumente wie in Beispiel 8.22 zeigen kann, dass I 0 ein ganzzahliges linerares Programm
ist, dass äquivalent zur gegebenen Instanz I von Max3Sat ist. Folglich ist die S 0
zugeordnete Belegung µ eine optimale Lösung für diese Instanz von Max3Sat.
Zusammenfassend ist damit gezeigt, dass B ein effizienter Lösungsalgorithmus
für das NP-schwere Maximierungsproblem Max3Sat ist. Letzteres widerspricht
aber unmittelbar der Voraussetzung, dass P 6= NP gilt.
Eine anderer, deutlich zielführender Ansatz, ist der im Folgenden vorgestellte.
Sei I eine Instanz des betrachteten NP-schweren Optimierungsproblems und I 0
das I zugeordnete äquivalente ganzzahlige lineare Programm. Anstatt direkt eine
Lösung für I 0 zu bestimmen, relaxiert man I 0 zu einem linearen Programm I 00 , indem man in der Beschreibung von I 0 alle Nichtlinearitätsbedingungen der Form
zi ∈ (bzw. zi ∈ {0, 1}) streicht und durch lineare Nebenbedingungen der Form
zi ≥ 0 (bzw. zi ≥ 0 und zi ≤ 1) ersetzt.3 Anschließend löst man I 00 mit einem effizienten Lösungsalgorithmus für das Optimierungsproblem LinearProgramming
und benutzt die so gewonnene optimale Lösung für I 00 , um eine Lösung für I zu
bestimmen.
Z
3 Diese
linearen Nebenbedingungen sollen sicherstellen, dass das linerare Programm I 00 lösbar ist.
8.2 Entwurfstechnik Lineare Programmierung
Seite 151
Beispiel 8.23
B
Wir kommen noch einmal auf das zu Beginn dieses Abschnitts diskutierte
Beispiel zurück, in dem es darum ging, dass ein Unternehmen die Frage klären wollte, wie viele Produkte von Typ 1 und wie viele von Typ 2 pro Tag produziert werden sollten, um den Gewinn zu maximieren (siehe Beispiel 8.16).
Zur Modellierung dieser Fragestellung haben wir in Beispiel 8.17 ein lineares
Programm benutzt. Diese Modellierung berücksichtigt nicht, dass man ein
Produkt erst verkaufen kann, wenn seine Herstellung abgeschlossen wurde.
Die bessere Modellierung ist das folgende ganzzahlige lineare Programm I 0 ,
bei dem darum geht, die bereits in Beispiel 8.17 definerte Zielfunktion h unter Berücksichtigung der beiden Ganzzahligkeitsbedingungen z1 ∈ und
z2 ∈ sowie der bereits in Beispiel 8.17 angegebenen fünf linearen Nebenbedingungen zu maximieren.
Z
Z
Wenn man dieses ganzzahlige lineare Programm I 0 relaxiert, also die beiden
Nichtlinearitätsbedingungen z1 ∈ und z2 ∈ durch die beiden linearen
Nebenbedingungen z1 ≥ 0 und z2 ≥ 0 ersetzt, erhält man das in Beispiel 8.17
angegebene lineare Programm I 00 .
Z
Z
Es sei daran erinnert, dass das Paar (3, 5) ist eine optimale Lösung für I 00
ist (siehe Beispiel 8.18). Damit ist (3, 5) natürlich auch eine optimale Lösung
für I 0 .
In einigen Fällen (siehe etwa unser Beispiel 8.23) kann man Glück haben, dass jede
optimale Lösung S 00 für I 00 gleichzeitig eine zulässige Lösung des ganzzahligen
linearen Programms I 0 ist. In diesen Fällen kennt man also auch eine optimale
Lösung S 0 von I 0 , der man nun eine optimale Lösung S für die gegebene Instanz I
des betrachteten NP-schweren Optimierungsproblems zuordnen kann.
Man wird jedoch höchstwahrscheinlich nicht immer Glück haben. (Anderenfalls könnte man – unter Verwendung ähnlicher Argumente wie im Beweis von
Satz 8.6) relativ leicht zeigen, dass P = NP gilt.) In solchen Fällen benutzt man
zunächst die optimale Lösung S 00 für I 00 , um eine zulässige Lösung S 0 des ganzzahligen linearen Programms I 0 zu bestimmen. Im Anschluss wird S 0 eine zulässige
Lösung S für die gegebenen Instanz I des betrachteten NP-schweres Optimierungsproblems zugeordnet, die in der Regel jedoch nicht optimal sein wird. Es
besteht jedoch die Hoffnung, dass man die Güte von S sinnvoll nach unten (bzw.
oben) abschätzen kann.
8.2.2 Anwendungsbeispiel: Minimale Knotenüberdeckungen
Wir benutzenden zuletzt vorgestellten Ansatz, um einen Approximationsalgorithmus konstanter Güte für ein spezielles NP-schweres Minimierungsproblem,
das graphentheoretische Problem MinVertexCover, zu entwerfen. Dieser Algorithmus verarbeitet eine Instanz I dieses Minimierungsproblems wie folgt:
(i) Es wird ein zu I äquivalentes ganzzahliges linerares Programm I 0 (und damit auch die relaxierte Version I 00 von I 0 ) bestimmt.
(ii) Es wird eine optimale Lösung S 00 für das lineare Programm I 00 bestimmt,
wobei die Zielfunktion minimiert wird.
Seite 152
Kapitel 8 Entwurfstechniken
(iii) Es wird anhand von S 00 eine zulässige Lösung S 0 für das ganzzahlige linerare
Programm I 0 bestimmt.
(iv) Zum Abschluss wird anhand von S 0 die eigentlich interessierende Lösung
S für die Instanz I des betrachteten Minimierungsproblems bestimmt und
ausgegeben.
Damit die Anforderungen an einen Approximationsalgorithmus erfüllt sind,
muss sichergestellt werden, dass jeder dieser Arbeitsschritte effizient realisiert
werden kann. Insbesondere muss man in (ii) deshalb einen effizienten Lösungsalgorithmus für das Optimierungsproblem LinearProgramming verwenden.
Es sei angemerkt, dass jeder Approximationsalgorithmus für ein NP-schweres
Optimierungsproblem, den man unter Benutzung der Entwurfstechnik Linear
Programming entworfen hat, seine Eingaben wie oben beschrieben verarbeitet
(wobei bei einem Maximierungsproblem in Schritt (ii) die Zielfunktion nicht minimiert, sondern maximiert wird). Die so entwickelten Algorithmen unterscheiden
sich im wesentlichen darin, welchen Ansatz man verwendet, um in Schritt (iii) aus
einer optimalen Lösung S 00 für I 00 eine zulässige Lösung S 0 für I 0 bestimmt.
Im Folgenden werden wir einen Ansatz, bei dem S 0 anhand von S 00 bestimmt wird,
in dem schlicht die üblichen Rundungsregeln verwendet werden, kennenlernen.
Eine Beschreibung eines anderen Ansatzes, bei dem die Ergebnisse von Zufallsexperimenten festlegen, wie S 0 anhand von S 00 bestimmt wird, findet sich u.a. in
Wanka [2006].
Das Minimierungsproblem MinVertexCover ist ein graphentheoretisches Optimierungsproblem, zu dessen Definition der folgende Begriff wichtig ist.
Es sei G = (V, E) ein (ungerichteter) Graph und V 0 ⊆ V . Dann nennt man V 0 ⊆ V
eine Knotenüberdeckung für G, wenn V 0 mindestens eine Ecke jeder Kante von G
enthält, d.h. es gilt V 0 ∩ {u, v} =
6 ∅ für alle Kanten {u, v} ∈ E.
B
Beispiel 8.24
Wir betrachten den Graphen G in Abbildung 8.4. Offenbar sind dann die
Mengen V10 = {v1 , v4 , v5 } und V20 = {v2 , v3 , v5 } Knotenüberdeckungen für G,
während die Menge V30 = {v1 , v2 , v3 } keine Knotenüberdeckung für G ist.
Abb. 8.4: Graph für
Beispiel 8.24.
v1
v2
v3
v4
v5
Beim Minimierungsproblem MinVertex Cover geht es nun darum, in einem gegebenen Graphen G = (V, E) eine möglichst kleine Knotenüberdeckung zu finden.
Formal ist eine Instanz I von MinVertexCover ein Graph G = (V, E); eine
Knotenüberdeckung V 0 für G ist dann eine zulässige Lösung S für I der Güte
w(S) := |V 0 |.
8.2 Entwurfstechnik Lineare Programmierung
Seite 153
Optimierungsproblem MinVertexCover
Eingabe: Graph G = (V, E)
Ausgabe: Knotenüberdeckung für G mit einer minimalen Güte
Knotenüberdeckungen und unabhängige Mengen4 (siehe Kapitel 7) stehen nun
folgt miteinander in Beziehung.
Lemma 8.5. Sei G = (V, E) ein Graph und V 0 ⊆ V . Dann gilt:
(i) Wenn V 0 eine Knotenüberdeckung für G ist, so ist die Menge V 00 := V \ V 0 eine
unabhängige Menge von G.
(ii) Wenn V 0 eine unabhängige Menge von G ist, so ist die Menge V 00 := V \ V 0 eine
Knotenüberdeckung für G.
Beweis. (i) Sei V 0 eine Knotenüberdeckung für G. Dass dann V 00 eine unabängige
Menge von G ist, sieht man wie folgt. Falls V 00 weniger als zwei Knoten hat, ist alles
klar. Seien nun u, v zwei verschiedene Knoten in V 00 . Wir nehmen an, dass es in G
eine Kante gibt, die die beiden Knoten verbindet. Dann muss aber V 0 ∩ {u, v} = ∅
gelten, und folglich kann dann V 0 keine Knotenüberdeckng für G sein.
(ii) Sei jetzt umgekehrt V 0 eine unabhängige Menge von G. Ferner sei e = {u, v}
eine Kante von G. Offenbar können die beiden Ecken von e nicht zu V 0 gehören.
(Sonst wäre V 0 keine unabhängige Menge von G). Also gilt {u, v} ⊆ V 00 , und folglich muss V 00 eine Knotenüberdeckung für G sein.
Man kann nun ganz einfach zeigen, dass es höchstwahrscheinlich keinen effizienten Lösungsalgorithmus für das Minimierungsproblem MinVertexCover gibt.
Satz 8.7
MinVertexCover ist ein NP-schwere Optimierungsproblem.
Beweis. Sei A ein effizienter Lösungsalgorithmus für das Minimierungsproblem
MinVertexCover. Dann ist der folgende Algorithmus B ein effizienter Lösungsalgorithmus für das in Kapitel 7 untersuchte NP-schwere Maximierungsproblem
MaxIndependentSet.
Algorithmus B für MaxIndependentSet
Eingabe: Graph G = (V, E) mit V = {v1 , . . . , vn }
1
2
3
Bestimme mit A eine minimale Knotenüberdeckung V 0 für G.
V 00 := V \ V 0 ;
return V 00 ;
Dass B effizient arbeitet, sollte offensichtlich sein. Dass die von B bestimmte
Menge V 00 eine maximale unabhängige Menge für G ist, folgt direkt aus Lemma
8.5.
sei daran erinnert, dass eine Teilmenge V 0 der Knotenmenge eines Graphen eine unahbängige
Menge ist, wenn es keine Kante in G gibt, die zwei Knoten aus V 0 miteinander verbindet.
4 Es
S
Seite 154
Ü
Kapitel 8 Entwurfstechniken
Übung 8.5
Sei G = (V, E) ein Graph und V 0 eine minimale Knotenüberdeckung für G.
Zeigen Sie, dass aus Lemma 8.5 folgt, dass die Menge V 00 := V \ V 0 eine
maximale unabhängige Menge von G ist.
Wir wir gleich sehen werden (siehe Satz 8.8), unterscheidet sich die beiden Optimierungsprobleme MinVertexCover und MaxIndependetSet in Bezug auf ihre
Approximierbarkeit recht deutlich. Es sei daran erinnert, dass es für MaxIndependetSet höchstwahrscheinlich keinen Approximationsalgorithmus konstanter Güte gibt.
Um einen Approximationsalgorithmus konstanter Güte für MinVertexCover zu
entwickeln, überlegen wir uns als erstes, wie man jeder Instanz von MinVertexCover ein äquivalentes ganzzahliges lineares Optimierungsproblem zuordnen
kann.
B
Beispiel 8.25
Sei G der in Abbildung 8.5 dargestellte Graph.
Wir benutzen die Variablen z1 , z2 und z3 (jedem Knoten von G ist eine
Variable zugeordnet) und wählen die lineare Zielfunktion h(z1 , z2 , z3 ) =
z1 + z2 + z3 . Bei dem der gegebenen Instanz I von MinVertexCover zugeordneten ganzzahligen linearen Programm I 0 geht es darum, die Zielfunktion
h unter Berücksichtigung von drei Nichtlinearitätsbedingungen der Form
zi ∈ {0, 1} sowie der folgenden linearen Nebenbedingungen zu minimieren:
• z1 + z2 ≥ 1 (da es in G die Kante e1 = {v1 , v2 } gibt),
• z1 + z3 ≥ 1 (da es in G die Kante e2 = {v1 , v3 } gibt).
• z2 + z3 ≥ 1 (da es in G die Kante e3 = {v2 , v3 } gibt).
Sei nun S 0 = (s01 , s02 , s03 ) eine zulässige Lösung von I 0 . Wir ordnen S 0 die
Teilmenge V 0 := {vi ∈ V | s0i = 1} der Knotenmenge von G zu. Dass V 0 eine
Knotenüberdeckung von G (also eine zulässige Lösung für I) ist, sieht man
wie nun folgt wie folgt.
Da S 0 eine zulässige Lösung für I 0 ist, erfüllt S 0 die der Kante e1 zugeordnete
lineare Nebenbedingung z1 + z2 ≥ 1. Also gilt s01 + s02 ≥ 1, und folglich kann
nicht gleichzeitig s01 = 0 und s02 = 0 gelten. Da S 0 zur Menge {0, 1}3 gehört,
muss nun s01 = 1 oder s02 = 1 gelten, und folglich enthält V 0 eine der beiden
Ecken der Kante e1 . Da S 0 auch die den anderen beiden Kanten e2 und e3
zugeordneten linearen Nebenbedingungen erfüllt, muss auch s01 + s03 ≥ 1
und s02 + s03 ≥ 1 gelten. Also folgt völlig analog, dass V 0 auch eine der beiden
Ecken der Kante e2 und eine der beiden Ecken der Kante e3 enthält. Es sollte
klar sein, dass |V 0 | = h(S 0 ) gilt.
Da man in der selben Art und Weise auch jeder Knotenüberdeckung V 0 für
G eine zulässige Lösung S 0 für I 0 mit h(S 0 ) = |V 0 | zuordnen kann, haben wir
I ein äquivalentes ganzzahliges lineares Programm I 0 zugeordnet.
8.2 Entwurfstechnik Lineare Programmierung
Seite 155
Abb. 8.5: Graph für
Beispiel 8.25.
v1
e1
v2
e2
e3
v3
Es sollte nun nicht schwer sein, die in Beispiel 8.25 benutzte Idee zu verallgemeinern.
Übung 8.6
Sei G = (V, E) ein Graph mit der Knotenmenge V = {v1 , . . . , vn }. Geben Sie
ein zu dieser Instanz von MinVertexCover äquivalentes ganzzahliges lineares Optimierungsproblem an.
Ü
Jeder Instanz I von MinVertexCover kann man also ein äquivalentes ganzzahliges lineares Programm I 0 zuordnen. Dass man eine Beschreibung von I 0 effizient
anhand von I bestimmen kann, sollte offensichtlich sein.
Wir müssen uns jetzt nur noch darum kümmern, wie man einer zulässigen Lösung S 00 der relaxierten Version I 00 dieses ganzzahligen linearen Programms I 0
eine zulässige Lösung S 0 von I 0 zuordnen kann.
Beispiel 8.26
Wir betrachten noch einmal den Graphen aus Abbildung 8.5 und das dieser Instanz I von MinVertexCover zugeordnete ganzzahlige lineare Programms I 0 (siehe Beispiel 8.25).
Bei der relaxierten Version I 00 von I 0 geht es darum, die in Beispiel 8.25 angebene Zielfunktion h(z1 , z1 , z3 ) := z1 + z2 + z3 unter Berücksichtigung der
folgenden lineraren Nebenbedingungen zu minimieren:
• z1 ≥ 0, z2 ≥ 0 und z3 ≥ 0,
• z1 ≤ 1, z2 ≤ 1 und z3 ≤ 1,
• z1 + z2 ≥ 1, z1 + z3 ≥ 1 und z2 + z3 ≥ 1.
Man kann sich nun recht einfach davon überzeugen, dass jede zulässige Lösung S 00 = (s001 , s002 , s003 ) von I 00 die Ungleichung s001 + s002 + s003 ≥ 1.5 erfüllen
muss.
Offenbar ist (0.5, 0.5, 0.5) eine zulässige Lösung des linearen Programms I 00 ,
und zwar eine optimale. Dieser Lösung kann man – indem man ganz einfach die üblichen Rundungsregeln verwendet – das Triple (1, 1, 1) zuordnen,
das eine zulässige, aber keine optimale Lösung des ganzzahligen linearen
Programms I 0 ist.
B
Seite 156
Kapitel 8 Entwurfstechniken
Der Trick, einer zulässigen Lösung S 00 = (s001 , s002 , s003 ) von I 00 durch simples
Runden eine zulässige Lösung S 0 von I 0 zuzuordnen, funktioniert immer.
Das liegt daran, dass S 00 die den drei Kanten von G zugeordneten linerare Nebenbedingungen nur dann erfüllen kann, wenn max{s001 , s002 } ≥ 0.5,
max{s001 , s003 } ≥ 0.5 und max{s002 , s003 } ≥ 0.5 gilt. Folglich muss beim Runden
ein Tripel S 0 entstehen, dass ebenfalls alle den drei Kanten von G zugeordneten lineraren Nebenbedingungen erfüllt, und damit ist S 0 eine zulässige
Lösung für I 0 .
Nachdem alle notwendigen Vorüberlegungen abgeschlossen sind, können wir
den angekündigten Approximationsalgorithmus für das NP-schwere Minimierungsproblem MinVertexCover wie folgt formulieren:
Algorithmus DeterministicRounding für MinVertexCover
Eingabe: Graph G = (V, E) mit V = {v1 , . . . , vn }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Bestimme ein zu G äquivalentes ganzzahliges lineares Programm I 0 .
Bestimme eine optimale Lösung S 00 = (s001 , . . . , s00n ) für die relaxierte
Version I 00 von I, wobei die Zielfunktion h von I 00 zu minimieren ist.
for i := 1 to n do
if s00i ≤ 0.5 then
s0i := 0;
else
s0i := 1;
fi
od
S 0 := (s01 , . . . , s0n );
V 0 := ∅;
for i := 1 to n do
if s00i = 0 then
V 0 := V 0 ;
else
V 0 := V 0 ∪ {vi };
fi
od
return V 0 ;
Wie wir exemplarisch in Beispiel 8.25 gesehen haben (und wovon Sie sich in
Übung 8.6 überzeugen konnten), kann man jeder Instanz I von MinVertexCover
effizient eine äquivalentes ganzzahliges lineares Programm I 0 zuordnen. Zusammen mit Satz 8.5 folgt deshalb, dass DeterministicRounding ein effizienter Algorithmus ist.
S
Satz 8.8
DeterministicRounding ist ein Approximationsalgorithmus konstanter Güte
für das Minimierungsproblem MinVertexCover mit dem Approximationsfaktor 2.
Beweis. Sei G = (V, E) mit V = {v1 , . . . , vn } und E = {e1 , . . . , em } die betrachtete
Instanz I von MinVertexCover und Opt(I) eine optimale Lösung für I.
8.2 Entwurfstechnik Lineare Programmierung
Seite 157
Beim I zugeordneten äquivalenten ganzzahligen linearen Programm I 0 geht es
darum, die Zielfunktion
n
X
h(z1 , . . . , zn ) :=
zi
i=1
unter Berücksichtigung von n Nichtlinearitätsbedingungen der Form zi ∈ {0, 1}
und m linearen Nebenbedingungen zu minimieren. Es sei daran erinnert, dass es
für jede Kante {vj , vk } von G die lineare Nebenbedingung zj + zk ≥ 1 gibt (siehe
Beispiel 8.25).
Sei S 00 = (s001 , . . . , s00n ) die im Rahmen der Verarbeitung der Instanz I bestimmte optimale Lösung der relaxierten Version I 00 von I 0 . Da S 00 eine zulässige Lösung von I 00 ist, erfüllt S 00 auch jede lineare Nebenbedingung von I 0 , und damit
auch jede lineare Nebenbedingung der Form zj + zk ≥ 1. Da s00j + s00k ≥ 1 natürlich max{s00j , s00k } ≥ 0.5 impliziert, erfüllt auch das von DeterministicRounding
bestimmte n-Tupel S 0 alle diese linearen Nebenbedingen. Da S 0 offenbar auch die
Nichtlinearitätsbedingungen der Form zi ∈ {0, 1} erfüllt, ist S 0 eine zulässige Lösung von I 0 .
Es genügt zu zeigen, dass w(V 0 ) ≤ 2 · w(Opt(I)) für die von DeterministicRounding anhand von S 0 bestimmte Knotenmenge V 0 gilt.
Da I 0 ein zu I äquivalentes ganzzahliges lineares Programm ist, wissen wir, dass
h(S 0 ) = w(V 0 ) sowie h(Opt(I 0 )) = w(Opt(I)) gilt, wobei Opt(I 0 ) eine optimale
Lösung für I 0 bezeichne. Also genügt es zu zeigen, dass h(S 0 ) ≤ 2 · h(Opt(I 0 ))
gilt.
N
Sei nun i ∈
mit i ≤ n. Da S 00 ein zulässige Lösung für I 00 ist, gilt 0 ≤ s00i ≤ 1.
0
Da ferner si bestimmt wurde, indem s00i ab- bzw. aufgerundet wurde, muss auch
s0i ≤ 2 · s00i gelten. (Wenn auf 0 abgerundet wurde, ist das unmittelbar klar. Wurde
auf 1 aufgerundet, muss s00i ≥ 0.5 gelten, und damit gilt auch 2 · s00i ≥ 1.)
Also erhalten wir:
n
X
i=1
s0i = h(S 0 ) ≤ 2 · h(S 00 ) =
n
X
2 · s00i .
i=1
Da S 00 eine optimale Lösung für I 00 ist und jede zulässige Lösung für I 0 auch eine
zulässige Lösung für die relaxierte Version I 00 von I 0 ist, gilt h(S 00 ) ≤ h(Opt(I 0 )),
was – zusammen mit h(S 0 ) ≤ 2·h(S 00 ) – sofort h(S 0 ) ≤ 2·h(Opt(I 0 )) impliziert.
Seite 158
Kapitel 8 Entwurfstechniken
Kapitel 9 Anhang
Kapitel 9 Anhang
In diesem Kapitel sollen einige Ergebnisse aus der Komplexitätstheorie, die wir
bisher nicht genauer diskutiert haben, noch einmal aufgegriffen werden. Im Mittelpunkt stehen das Maximierungsproblem MaxCut (siehe Kapitel 8) und das Entscheidungsproblem HamiltonCircle (siehe Kapitel 4). Ziel ist besser zu verstehen,
weshalb das erste Problem ein NP-schweres Optimierungsproblem und das zweite ein NP-vollständiges Entscheidungsproblem ist.
9.1 Maximale Schnitte
In Kapitel 8 haben wir gesehen, wie man die Entwurfstechnik Randomisierung
benutzen kann, um Approximationsalgorithmen zu entwerfen. Zur Illustration
haben wir das Maximierungsproblem MaxCut ausgewählt, ohne genauer darauf
einzugehen, weshalb MaxCut ein NP-schweres Optimierungssproblem ist.
Wir sehen uns jetzt eine verallgemeinerte Version von MaxCut genauer an. Für
dieses Optimierungsproblem, das Maximierungsproblem MaxCut’, kann man
recht einfach zeigen, dass es höchstwahrscheinlich nicht effizient lösbar ist. Dabei
benutzt man, dass das Minimierungsproblem MinVertexCover ein NP-schweres
Optimierungssproblem ist (siehe Satz 8.8).
Es sei angemerkt, dass der für das Optimierungsproblem MaxCut entworfene Algorithmus DetMaxCut (siehe Satz 8.7) auch ein Approximationsalgorithmus konstanter Güte für MaxCut’ ist, der ebenfalls den Approximationsfaktor 12 hat.
Im Unterschied zu MaxCut sind Instanzen des Maximierungsproblems MaxCut’
nicht nur (schlichte) Graphen, sondern Graphen, die parallele Kanten haben dürfen. (Das sind Graphen, in denen zwei Knoten durch mehr als eine Kante verbunden sein können, siehe auch Kapitel 7). Alle anderen relevanten Begriffe (der
Begriff Schnitt für einen Graphen bzw. Güte eines Schnittes) sind genauso wie im
Kontext des Optimierungsproblems MaxCut definiert (siehe Kapitel 8).
Optimierungsproblem MaxCut’
Eingabe: Graph G = (V, E), der ggf. parallele Kanten hat
Ausgabe: Schnitt (C, D) von G, der eine maximale Güte hat
Es sei angemerkt, dass man einen Graphen G mit parallelen Kanten auch als einen
gewichteten (schlichten) Graphen G0 auffassen kann, in dem jeder Kante von G0
eine Zahl zugeordnet ist, die angibt, wie oft die entsprechende Kante in G vorkommt.
Um nachzuweisen, dass das Maximierungsproblem MaxCut’ ein NP-schweres
Optimierungssproblem ist, werden wir zeigen, wie man einen effizienten Lösungsalgorithmus für MaxCut’ benutzen kann, um das Minimierungsproblem
MinVertexCover (siehe Kapitel 8) effizient zu lösen.
Wir beginnen mit einigen Vorüberlegungen.
Sei G = (V, E) ein (schlichter) Graph. Wir ordnen G einen Graphen Gp = (Vp , Ep )
zu, der ggf. parallele Kanten hat, wobei gilt:
• die Knotenmenge Vp enthält alle Knoten von G sowie einen Knoten vp ,
Seite 159
Seite 160
Kapitel 9 Anhang
• die Kantenmenge Ep enthält alle Kanten von G sowie je Knoten v ∈ V noch
k parallele Kanten, die den Knoten v mit dem Knoten vp verbinden, wobei
k = grad (v) − 1 gilt.1
B
Beispiel 9.1
Der dem Graphen G = (V, E) (siehe Abbildung 9.1, links) entsprechend der
obigen Vorschrift zugeordnete Graph Gp = (Vp , Ep ) findet sich im rechten
Teil von Abbildung 9.1.
Man kann sich leicht davon überzeugen, dass C = {v1 , v2 } eine minimale
Knotenüberdeckung für G ist. Offenbar ist S = (C, D) mit D = {v3 , v4 , vp }
ein maximaler Schnitt in Gp ist.
Man beachte, dass S 0 = (C 0 , D0 ) mit C 0 = {v2 } und D0 = {v1 , v3 , v4 } zwar
ein maximaler Schnitt in G, aber C 0 keine Knotenüberdeckung für G ist.
Abb. 9.1: Graphen
G und Gp für Beispiel 9.1.
v1
v2
v1
v2
v3
v4
v3
v4
vp
Lemma 9.1. Sei G = (V, E) ein Graph, Gp = (Vp , Ep ) der G gemäß der obigen Vorschrift zugeordnete Graph sowie C ⊆ V und D = Vp \ C. Dann gilt:
• Wenn (C, D) ein maximaler Schnitt für Gp ist, dann ist C eine minimale Knotenüberdeckung für G.
Beweis. Wir zeigen zunächst, dass die folgende Beobachtung korrekt ist.
Beobachtung 1. Wenn (C, D) ein maximaler Schnitt für Gp ist, so ist C eine Knotenüberdeckung für G.
Wir nehmen an, dass C keine Knotenüberdeckung für G ist. Dann muss es eine
Kante e = {u, v} von G geben, deren beide Ecken nicht zu C gehören. Wir setzen
jetzt C 0 := C 0 ∪ {u} sowie D0 := Vp \ C 0 und interessieren uns dafür, wie viele
Kanten den Schnitt (C 0 , D0 ) für Gp kreuzen.
Sei nun K ⊆ Ep die Menge der Kanten von Gp , die den Schnitt (C, D) kreuzen.
Da u nicht zu C 0 gehört und die Kante e den Schnitt (C 0 , D0 ) kreuzt, gibt es in K
höchstens k Kanten, die den Schnitt (C 0 , D0 ) nicht kreuzen, wobei k = grad (u) − 1
gilt. (Das sind alles Kanten von G, und zwar die Kanten aus K, die u mit einem
Knoten aus C verbinden). Dafür kreuzen aber zusätzlich die Kante e und alle Kanten von Gp , die den Knoten u und den Knoten vp verbinden, den Schnitt (C 0 , D0 ).
(Man beachte, dass vp nicht zu C 0 gehört.) Das sind zusammen k 0 Kanten, wobei
k 0 = grad (u) − 1 + 1 gilt. Also kreuzen mehr Kanten den Schnitt (C 0 , D0 ) als den
Schnitt (C, D), und deshalb kann (C, D) kein maximaler Schnitt für Gp sein.
sei daran erinnert, dass die Zahl grad(v) angibt, wie viele Kanten von G den Knoten v als Ecke
haben, d.h. welchen Grad der Knoten v hat.
1 Es
9.1 Maximale Schnitte
Seite 161
Um den Beweis zu vervollständigen, genügt es jetzt zu zeigen, dass C eine minimale Knotenüberdeckung für G sein muss. Das ist eine unmittelbare Konsequenz
aus der folgenden Beobachtung.
Beobachtung 2. Sei C 0 eine Knotenüberdeckung für G sowie D0 = Vp \ C 0 und
S 0 = (C 0 , D0 ). Dann gilt w(S 0 ) = 2 · |E| − |C|, d.h. es gibt 2 · |E| − |C| Kanten, die
den Schnitt S 0 für Gp kreuzen.
Sei nun K 0 ⊆ E die Menge aller Kanten von G, für die gilt, dass sie einen Knoten aus C 0 mit einem Knoten in D0 verbinden. Offensichtlich kreuzen alle Kanten
aus K 0 sowie alle Kanten {v, vp } aus Gp mit v ∈ C 0 den Schnitt S 0 . (Man beachte,
dass vp nicht zu C 0 gehört.) Also gilt:
!
X
X
0
0
0
grad (v) − 1 = |K | +
grad (v) − |C 0 |.
w(S ) = |K | +
v∈C 0
v∈C 0
Unsere zweite Beobachtung ist nun verifziert, wenn wir zeigen können, dass
X
|K 0 | +
grad (v) = 2 · |E|
v∈C 0
gilt.
Sei also e = {u, v} eine Kante von G. Da C 0 eine Knotenüberdeckung für G ist,
müssen entweder beide Ecken von e oder genau eine Ecke von e (sagen wir die
Ecke u) zu C 0 gehören.
Im ersten Fall gehört e nicht zu K 0 . Dafür kreuzen aber die beiden Kanten {u, vp }
und {v, vp } den Schnitt S 0 . (Man beachte, dass vp nicht zu C 0 gehört.) Im zweiten Fall gehört e zu K 0 . Außerdem kreuzt die Kante {u, vp } den Schnitt S 0 , aber
die Kante {v, vp } den Schnitt S 0 nicht. (Man beachte, dass weder v noch vp zu C 0
gehören.)
Also wird jede Kante von G genau zweimal berücksichtigt, wenn die Summe
X
|K 0 | +
grad (v)
v∈C 0
bestimmt wird.
Aus Lemma 9.1 folgt nun unmittelbar:
Satz 9.1
MaxCut’ ist ein NP-schweres Optimierungsproblem.
Beweis. Sei A ein effizienter Lösungsalgorithmus für das Maximierungsproblem
MaxCut’. Dann ist der folgende Algorithmus B ein effizienter Lösungsalgorithmus für das NP-schwere Minimierungsproblem MinVertexCover.
S
Seite 162
Kapitel 9 Anhang
Algorithmus B für MinVertexCover
Eingabe: Graph G = (V, E) mit V = {v1 , . . . , vn }
1
2
3
4
5
6
7
8
Bestimme den G gemäß der obigen Vorschrift zugeordneten Graphen
Gp = (Vp , Ep ).
Bestimme mit A einen maximalen Schnitt (C, D) für Gp .
if vp ∈ C then
V 0 := D;
else
V 0 := C;
fi
return V 0 ;
Da man den G zugeordneten Graphen Gp effizient bestimmen kann, muss B ein
effizienter Algorithmus sein. Dass die von B bestimmte Menge V 0 eine minimale
unabhängige Menge für G ist, ergibt sich direkt aus Lemma 8.5.
9.2 Hamiltonsche Kreise
Wir wollen jetzt diskutieren, weshalb HamiltonCircle (siehe Kapitel 4) ein NPvollständiges Entscheidungsprobem ist. Es sei daran erinnert, dass HamiltonCircle die Frage adressiert, ob es in einem gegebenen Graphen G einen Hamiltonschen Kreis gibt.2
Um zu zeigen, dass ein gegebenes Entscheidungsproblem NP-vollständig ist,
zeigt man üblicherweise zuerst, dass das gegebene Problem zur Komplexitätsklasse NP gehört, und danach, dass sich ein bekanntes NP-vollständiges Entscheidungsproblem polynomiell auf das gegebene Entscheidungsproblem reduzieren
lässt (siehe Kapitel 3).
Genauso kann man zeigen, dass HamiltonCircle NP-vollständig ist (siehe bspw.
Blum [2007]), wo das NP-vollständige Entscheidungsproblem 3Sat polynomiell
auf HamiltonCircle reduziert wird. Es gibt aber auch eine andere Vorgehensweise.
Sei Π das betrachtete Entscheidungsproblem. Um zu zeigen, dass dieses Problem
NP-vollständig ist, kann man alternativ auch ein geeignetes NP-schweres Optimierungssproblem Π0 auswählen und zeigen, dass sich ein effizienter Lösungsalgorithmus für Π verwenden lässt, um Π0 effizient zu lösen. Da Π0 ein NP-schweres
Optimierungssproblem ist, weiß man damit, dass man jedes NP-vollständige Entscheidungsproblem effizient lösen kann (siehe Kapitel 3). Überzeugt man sich nun
noch davon, dass Π zur Komplexitätsklasse NP gehört, ist damit klar, dass Π ein
NP-vollständiges Entscheidungsproblem sein muss.
Um auf diese Art nachzuweisen, dass HamiltonCircle NP-vollständig ist, benutzen wir eine Version des Optimierungsproblems MinVertexCover (siehe Kapitel 8). Das Minimierungsproblem MinVertexCover’ adressiert nur die Frage, wie
groß eine minimale Knotenüberdeckung für einen gegebenen Graphen G sein
muss. Welche Knoten von G eine minimale Knotenüberdeckung bilden, ist im
Unterschied zu MinVertexCover irrelevant.
= {v0 , . . . , vn } genau dann ein Hamiltonscher Kreis für den
Graphen G = (V, E) ist, wenn {v0 , . . . , vn−1 } = V und |V | = n gilt.
2 Es sei daran erinnert, dass ein Kreis K
9.2 Hamiltonsche Kreise
Seite 163
Optimierungsproblem MinVertexCover’
Eingabe: Graph G = (V, E)
Ausgabe: Anzahl der Knoten in einer minimalen Knotenüberdeckung für G
Da MinVertexCover ein NP-schweres Optimierungsproblem ist (siehe Satz 8.7),
folgt unmittelbar:
Satz 9.2
MinVertexCover’ ist ein NP-schweres Optimierungsproblem.
Übung 9.1
S
Ü
Beweisen Sie Satz 9.2.
Satz 9.2 impliziert nun:
Satz 9.3
Das Entscheidungsproblem HamiltonCircle ist NP-vollständig.
Beweis. Zunächst überlegen wir uns, dass HamiltonCircle zur Komplexitätsklasse NP gehört. Sei also G = (V, E) mit V = {v1 , . . . , vn } die betrachtete Instanz von
HamiltonCircle. Um zu verifizieren, ob ein Pfad (v00 , v10 , . . . , vn0 ) im Graphen G
einen Hamiltonschen Kreis bildet, genügt es zu überprüfen, ob die folgenden drei
Bedingungen erfüllt sind:
• v00 = vn0 ,
0
• {v00 , . . . , vn−1
}=V,
0
• {vi−1
, vi0 } ∈ E für alle i ∈
N mit i ≤ n.
Es sollt klar sein, dass man effizient überprüfen kann, ob diese Bedingungen erfüllt sind. Also gibt es einen effizienten Verifikationsalgorithmus für das Entscheidungsproblem HamiltonCircle, und damit gehört es zur Komplexitätsklasse NP
(siehe Kapitel 3).
Wir nehmen nun an, dass A ein effizienter Lösungsalgorithmus für das Entscheidungsproblem HamiltonCircle ist. A kann man wie folgt benutzen, um einen
Lösungsalgorithmus für das Minimierungsproblems MinVertexCover’ zu definieren.
Algorithmus B für MinVertexCover’
Eingabe: Graph G = (V, E) mit V = {v1 , . . . , vn }
1
2
3
4
flag := false;
i := 1;
while (i < n && flag = false) do
Bestimme anhand von G und i einen Graphen Gi .
S
Seite 164
Kapitel 9 Anhang
5
6
7
8
9
10
11
12
Überprüfe mit A, ob es im Graphen Gi einen Hamiltonschen Kreis
gibt und setze y := A(Gi ).
if y = true then
flag := true.
else
i := i + 1.
fi
od
return i;
Offensichtlich ist B dann ein effizienter Lösungsalgorithmus für MinVertexCover’, wenn für alle i ∈ mit i ≤ n die folgenden Anforderungen erfüllt sind:
N
• Man kann anhand von G und i effizient einen Graphen Gi bestimmen.
• Es gibt genau dann einen Hamiltonschen Kreis im Graphen Gi , wenn es
eine Knotenüberdeckung der Größe i für den Graphen G gibt.
Dass man beide Anforderungen simultan erfüllen kann, schauen wir uns im Folgenden an.
Anstatt nun ganz allgemein zu diskutieren, wie man die in Satz 9.3 formulierten
Anforderungen erfüllen kann, beschränken wir darauf, ein Beispiel im Detail zu
analysieren. Wie sich die zugrunde liegenden Ideen und Argumente verallgemeinern lassen, sollte ersichtlich werden.
Wir betrachten den in Abbildung 9.2 dargestellten Graphen G = (V, E), in dem
jede Teilmenge V 0 ⊆ V der Größe zwei eine minimale Knotenüberdeckung ist.
Abb. 9.2: Graph G.
v1
e1
v2
e2
e3
v3
Wir diskutieren zunächst, wie man G geeignete Graphen G1 , G2 und G3 zuordnen
kann. Dazu konstruieren wir zunächst einen Graphen G0 .
Schritt 1: Konstruktion von G0
Wir ordnen als erstes jeder Kante e von G einen Graphen G0e zu. In Abbildung 9.3
finden sich die den Kanten e1 und e2 zugeordneten Graphen G0e1 (links) sowie G0e2
(rechts).
Abb. 9.3: Graphen G0e1
und G0e2 für G.
he1 ,v1 ,1i
he1 ,v2 ,1i
he2 ,v1 ,1i
he2 ,v2 ,1i
he1 ,v1 ,2i
he1 ,v2 ,2i
he2 ,v1 ,2i
he2 ,v3 ,2i
he1 ,v1 ,3i
he1 ,v2 ,3i
he2 ,v1 ,3i
he2 ,v3 ,3i
he1 ,v1 ,4i
he1 ,v2 ,4i
he2 ,v1 ,4i
he2 ,v3 ,4i
he1 ,v1 ,5
he1 ,v2 ,5i
he2 ,v1 ,5i
he2 ,v3 ,5i
he1 ,v1 ,6i
he1 ,v2 ,6i
he2 ,v1 ,6i
he2 ,v3 ,6i
Für die weiteren Überlegungen ist folgende Eigenschaft des einer Kante e = {u, v}
zugeordneten Graphen G0e wichtig:
9.2 Hamiltonsche Kreise
Seite 165
Sei G0 ein Graph, der G0e als Teilgraphen enthält, für den gilt, dass nur die vier
Knoten he, u, 1i, he, u, 6i, he, v, 1i und he, v, 6i mit anderen Knoten in G0 verbunden
sind. Dann gibt es genau drei Möglichkeiten, wie in einem Hamiltonschen Kreis
für G0 die Knoten von G0e besucht werden können (siehe Abbildung 9.4, in der die
relevanten Kanten hervorgehoben sind).
•
•
he,u,1i
•
•
he,u,2i
•
• •
he,u,3i
he,u,4i
• •
•
he,u,5i
•
•
he,u,6i
•
•
he,v,1i
• •
•
he,v,2i
•
•
he,v,3i
•
•
he,v,4i
•
•
he,v,5i
•
• •
he,v,6i
•
•
he,u,1i
•
•
he,u,2i
•
•
he,u,3i
•
•
he,u,4i
•
•
he,u,5i
•
•
he,u,6i
•
•
•
•
he,v,1i
•
•
he,v,2i
•
•
he,v,3i
•
•
he,v,4i
•
•
he,v,5i
•
•
he,v,6i
•
•
he,u,1i
• •
•
he,u,2i
•
•
he,u,3i
•
•
he,u,4i
•
•
he,u,5i
•
• •
he,u,6i
•
•
he,v,1i
•
•
he,v,2i
•
• •
he,v,3i
Abb. 9.4: Alle Möglichkeiten, alle Knoten
(0)
von Ge zu besuchen.
he,v,4i
• •
•
he,v,5i
•
•
he,v,6i
•
•
Der in Schritt 1 konstruierte Graph G0 enthält nun alle Knoten und Kanten der
Graphen G0e1 , G0e2 und G0e3 sowie drei weitere Kanten (siehe Abbildung 9.4).
he1 ,v1 ,1i
he1 ,v2 ,1i
he1 ,v1 ,2i
he1 ,v2 ,2i
he1 ,v1 ,3i
he1 ,v2 ,3i
he1 ,v1 ,4i
he1 ,v2 ,4i
he1 ,v1 ,5i
he1 ,v2 ,5
he1 ,v1 ,6i
he1 ,v2 ,6i
Abb. 9.5: Der G zugeordete Graph G0 .
he2 ,v1 ,1i
he2 ,v3 ,1i
he3 ,v3 ,1i
he3 ,v2 ,1i
he2 ,v1 ,2i
he2 ,v3 ,2i
he3 ,v3 ,2i
he3 ,v2 ,2i
he2 ,v1 ,3i
he2 ,v3 ,3i
he3 ,v3 ,3i
he3 ,v2 ,3i
he2 ,v1 ,4i
he2 ,v3 ,4i
he3 ,v3 ,4i
he3 ,v2 ,4i
he2 ,v1 ,5i
he2 ,v3 ,5i
he3 ,v3 ,5i
he3 ,v2 ,5i
he2 ,v1 ,6i
he2 ,v3 ,6i
he3 ,v3 ,6i
he3 ,v2 ,6i
Die drei weiteren Kanten wurden gemäß folgender Vorschrift in den Graphen G0
aufgenommen:
Die Kanten von G werden – bis auf die letzte Kante – der Reihe nach analysiert. Da
e1 die beiden Knoten v1 und v2 verbindet, wird die nächste Kante bestimmt, die
v1 mit einem anderen Knoten verbindet (also e2 ), sowie die nächste Kante, die v2
mit einem anderen Knoten verbindet (also e3 ). In G0 werden deshalb die Knoten
he1 , v1 , 6i und he2 , v1 , 1i sowie die Knoten he1 , v2 , 6i und he3 , v2 , 1i jeweils durch
eine Kante verbunden. Da die Kante e2 die Knoten v1 und v3 verbindet und es
keine nächste Kante gibt, die den Knoten v1 mit einem anderen Knoten verbindet,
werden in G0 deshalb nur die Knoten he2 , v3 , 6i und he3 , v3 , 1i durch eine Kante
verbunden. (Das man die Kante e3 nicht analysieren muss, sollte klar sein.)
Seite 166
Kapitel 9 Anhang
Der in Schritt 1 konstruierte Graph G0 hat nun folgende, für die weiteren Überlegungen wichtige Eigenschaft:
Sei v ein Knoten von G. Dann bilden alle Teilgraphen G0e von G0 , für die e eine
Kante mit der Ecke v ist, eine Kette (siehe Abbbildung 9.6, in der die drei Ketten
für die Knoten von G hervorgehoben sind).
Abb. 9.6: Die drei Ketten in G0 .
he1 ,v1 ,1i
•
•
he1 ,v1 ,2i
•
•
he1 ,v1 ,3i
•
•
he1 ,v1 ,4i
•
•
he1 ,v1 ,5i
•
•
he1 ,v1 ,6i
•
•
he2 ,v1 ,1i
•
•
he2 ,v1 ,2i
•
•
he2 ,v1 ,3i
•
•
he2 ,v1 ,4i
•
•
he2 ,v1 ,5i
•
•
he2 ,v1 ,6i
he2 ,v3 ,1i
•
•
he2 ,v3 ,2i
•
•
he2 ,v3 ,3i
•
•
he2 ,v3 ,4i
•
•
he2 ,v3 ,5i
•
• •
he2 ,v3 ,6i
he1 ,v2 ,1i
•
•
he1 ,v2 ,2i
•
•
he1 ,v2 ,3i
•
•
he1 ,v2 ,4i
•
•
he1 ,v2 ,5
•
•
he1 ,v2 ,6i
•
he3 ,v3 ,1i
• •
•
he3 ,v3 ,2i
•
•
he3 ,v3 ,3i
•
•
he3 ,v3 ,4i
•
•
he3 ,v3 ,5i
•
•
he3 ,v3 ,6i
•
he3 ,v2 ,1i
•
•
he3 ,v2 ,2i
•
•
he3 ,v2 ,3i
•
•
he3 ,v2 ,4i
•
•
he3 ,v2 ,5i
•
•
he3 ,v2 ,6i
Nachdem klar ist, wie der G zugeordnete Graph G0 aussieht, können in einem
zweiten Schritt die G zugeordneten Graphen G1 , G2 bzw. G3 anhand von G0 konstruiert werden.
Schritt 2: Konstruktion von G1 , G2 bzw. G3
Die Graphen G1 , G2 und G3 zu konstruieren, ist nun ziemlich einfach. Man erweitert den Graphen G0 um einen, zwei bzw. drei weitere Knoten a1 , a2 bzw. a3 , die
man auch Auswahlknoten nennt. Die Auswahlknoten werden mit jedem Anfangsund Endknoten der Ketten, die den drei Knoten von G im Graphen G0 zugeordnet
sind, verbunden.
Der Graph G2 ist in Abbildung 9.7 dargestellt. Aus Gründen der Übersichtlichkeit
gibt es in Abbildung 9.7 jeweils sechs Kopien der Auswahlknoten a1 und a2 .
Es sollte klar sein, dass man anhand des gegebenen Graphen G effizient den Graphen G0 , und damit auch die Graphen G1 , G2 sowie G3 bestimmen kann. Die gerade vorgestellte Vorschrift zur Konstruktion dieser Graphen erfüllt also die erste
im Beweis von Satz 9.3 formulierte Anforderung.
Ü
Übung 9.2
Überlegen Sie sich, wie viele Knoten die einem gegebenen Graphen G mit
n Knoten und m Kanten zugeordneten Graphen G0 , G1 und Gn haben.
9.2 Hamiltonsche Kreise
Seite 167
Um nachzuweisen, dass auch die zweite im Beweis von Satz 9.3 formulierte Anforderung efüllt ist, müssen wir uns jetzt überlegen, weshalb für jedes i ∈ mit
i ≤ 3 gilt:
N
• Wenn es eine Knotenüberdeckung der Größe i für G gibt, so gibt es auch
einen Hamiltonschen Kreis in Gi .
• Wenn es einen Hamiltonschen Kreis in Gi gibt, so gibt es auch eine Knotenüberdeckung der Größe i für G.
Zur Illustration betrachten wir nur den Fall i = 2.
Offenbar ist die Menge V 0 = {v1 , v3 } eine Knotenüberdeckung im gegebenen Graphen G (siehe Abbildung 9.7).
Abb. 9.7: Noch einmal
der Graph G.
v1
e1
v2
e2
v3
e3
Der Knotenüberdeckung V 0 für G kann nun wie folgt ein Hamiltonscher Kreis K
in G2 zugeordnet werden:
Da die Kante e1 nur vom Knoten v1 , aber die Kante e2 von den Knoten v1
und v3 überdeckt wird, wählt man sich den in Abbildung 9.8 rot hervorgehobenen Pfad P1 , der die Auswahlnkoten a1 und a2 verbindet. Offenbar besucht P1 alle
Knoten des Teilgraphen G0e1 sowie die Hälfte der Knoten des Teilgraphen G0e2 .
a2
a1
•
•
he1 ,v1 ,1i
•
•
he1 ,v1 ,2i
•
• •
he1 ,v1 ,3i
he1 ,v1 ,4i
• •
•
he1 ,v1 ,5i
•
•
he1 ,v1 ,6i
•
•
he2 ,v1 ,1i
•
•
he2 ,v1 ,2i
•
•
he2 ,v1 ,3i
•
•
he2 ,v1 ,4i
•
•
he2 ,v1 ,5i
•
•
he2 ,v1 ,6i
•
a2•
a1
he2 ,v3 ,1i
• •
•
he2 ,v3 ,2i
•
•
he2 ,v3 ,3i
•
•
he2 ,v3 ,4i
•
•
he2 ,v3 ,5i
•
• •
he2 ,v3 ,6i
a1
Abb. 9.8: Pfade in G2
für die von v1 und v3
überdeckten Kanten.
a2
he1 ,v2 ,1i
• •
•
he1 ,v2 ,2i
•
•
he1 ,v2 ,3i
•
•
he1 ,v2 ,4i
•
•
he1 ,v2 ,5
•
• •
he1 ,v2 ,6i
a1
he3 ,v3 ,1i
• •
•
he3 ,v3 ,2i
•
• •
he3 ,v3 ,3i
•a
2
a2
he3 ,v3 ,4i
• •
•
he3 ,v3 ,5i
•
•
he3 ,v3 ,6i
•
•
a1
he3 ,v2 ,1i
• •
•
he3 ,v2 ,2i
•
•
he3 ,v2 ,3i
•
•
he3 ,v2 ,4i
•
•
he3 ,v2 ,5i
•
• •
he3 ,v2 ,6i
a1
a2
Völlig analog kann man einen Pfad P2 wählen, der ebenfalls die beiden Auswahlknoten a1 und a2 verbindet, jedoch die Hälfte der Knoten des Teilgraphen G0e2
Seite 168
Kapitel 9 Anhang
sowie alle Knoten des Teilgraphen G0e3 besucht. Der Pfad P2 ist ebenfalls in Abbildung 9.8 hervorgehoben (und zwar blau).
Es sei angemerkt, dass es die beiden Pfade P1 und P2 deshalb im Graphen G2 gibt,
weil G0 die oben formulierten Eigenschaften hat (siehe auch Abbildung 9.4 und
9.6) und weil G0 ein Teilgraph von G2 ist, in dem insbesondere die vier Knoten
he1 , v1 , 1i, he2 , v1 , 6i, he2 , v3 , 1i sowie he3 , v3 , 6i jeweils mit den beiden Knoten a1
und a2 verbunden sind.
Da die in Abbildung 9.7 verwendeten Knoten a1 und a2 jeweils Kopien ein einzigen Auswahlknotens in G2 sind, ist klar, dass die beiden Pfade P1 und P2 zu
einem Hamiltonschen Kreis K in G2 zusammen gefasst werden können. Also haben wir der Knotenüberdeckung V 0 für G einen Hamiltonschen Kreis K in G2
zugeordnet.
Jetzt müssen wir uns nur noch überlegen, wie man – umgekehrt – einem Hamiltonschen Kreis K 0 in G2 eine Knotenüberdeckung V 00 der Größe zwei für G zuordnen
kann.
Da K 0 ein Hamiltonscher Kreis in G2 ist, kann man K 0 in zwei Pfade P10 und P20
zerlegen, die jeweils die beiden Auswahlknoten a1 und a2 verbinden und in denen diese Knoten jeweils genau einmal vorkommen. Die Wahl der Teilgraphen G0e
und der Kanten in G0 , die diese Teilgraphen verbinden, garantiert, dass es einen
Knoten v in G gibt, so dass P10 alle Teilgraphen G0e besuchen muss, für die gilt,
dass v eine Ecke von e ist (siehe Abbildung 9.4 und 9.6). Analog gibt es auch einen
Knoten v 0 in G, so dass P20 alle Teilgraphen G0e besucht, für die gilt, dass v 0 eine
Ecke von e ist.
Also besucht P10 alle Teilgraphen G0e , die einer Kante in G zugeordnet sind, die
vom Knoten v in G überdeckt wird. Gleiches gilt für P20 in Bezug auf den Knoten v 0 . Da P10 und P20 zu einem Hamiltonschen Kreis K 0 in G2 zusammengefasst
werden können, der alle Teilgraphen G0e von G2 besucht, und da jeder Kante e
von G ein Teilgraph G0e von G2 zugeordnet ist, muss V 00 = {v, v 0 } eine Knotenüberdeckung für G sein. Folglich haben wir dem Hamiltonschen Kreis K 0 in G2
eine Knotenüberdeckung V 00 der Größe zwei in G zugeordnet.
Ü
Übung 9.3
Überlegen Sie sich, wie der dem Graph G (siehe Abbildung 9.7) zugeordnete
Gaph G3 aussieht und geben Sie einen Hamiltonschen Kreis in G3 an.
Kapitel 10 Verzeichnisse
Seite 169
Kapitel 10 Verzeichnisse
10.1 Literatur
Norbert Blum. Einführung in formale Sprachen, Berechenbarkeit, Informations- und Lerntheorie. Oldenbourg,
2007.
Janos Csirik and David S. Johnson. Bounded space on-line bin packing: Best is better than first. In Proceedings
of the Annual ACM-SIAM Symposium on Discrete Algorithms, chapter 35. SIAM, 1991.
Michael R. Garey and David S. Johnson. Computers and Intractability: A Guide to the Theory of NP-Completeness.
W. H. Freeman & Co, 1979.
Klaus Jansen and Marian Margraf. Approximative Algorithmen und Nichtapproximierbarkeit. de Gruyter, 2008.
Donald E. Knuth. The Art of Computer Programming, Volume 4, Fascicle 3: Generating All Combinations and
Partitions. Addison-Wesley, 2009.
Bernhard Korte and Jens Vygen. Kombinatorische Optimierung: Theorie und Algorithmen. Addison-Wesley,
2008.
Sven Krumke and Hartmut Noltemeier. Graphentheoretische Konzepte und Algorithmen. Springer Vieweg, 2012.
Rolf Wanka. Approximationsalgorithmen – Eine Einführung. Springer Vieweg, 2006.
Herunterladen