Theoretische Informatik - fbi.h

Werbung
Vorlesung
Approximative Algorithmen
Marian Margraf
Version: 09.11.2012
Inhaltsverzeichnis
1 Einführung
1.1 Zwei Beispiele (Min Job Scheduling und MaxCut) . . . . . . . . . . . . . . .
1.2 Notationen und Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Das Problem Sat und der Satz von Cook . . . . . . . . . . . . . . . . . . . . . .
4
4
8
12
2 Algorithmen mit multiplikativer
2.1 Min Vertex Cover . . . . .
2.2 Max Independent Set . . .
2.3 Min Node Coloring . . . . .
Graphenprobleme
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
17
17
19
26
3 Algorithmen mit multiplikativer Güte: Prozessoptimierung
3.1 Min Job Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Min Traveling Salesman . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Nichtapproximierbarkeit: Min Traveling Salesman . . . . . . . . . . . . . . .
30
30
32
43
4 Approximationsschemata
4.1 Min Job Scheduling mit konstanter Maschinenanzahl . . . . . . . . . . . . . .
4.2 Max Knapsack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Min Job Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
48
50
53
5 Vollständige Approximationsschemata
5.1 Max Knapsack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Pseudopolynomielle Algorithmen und streng NP-schwere Probleme . . . . . . . .
57
57
63
6 Randomisierte Algorithmen
6.1 MaxSat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Wahrscheinlichkeitstheorie . . . . . . . . . . . . . . . . . . . . . . .
6.3 MaxSat (Fortsetzung) . . . . . . . . . . . . . . . . . . . . . . . .
6.4 Randomisierte Algorithmen . . . . . . . . . . . . . . . . . . . . . .
6.5 Derandomisierung: Die Methode der bedingten Wahrscheinlichkeit
6.6 MaxCut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
66
66
67
69
70
73
76
7 Lineare Programmierung: Deterministisches und randomisiertes Runden
7.1 MaxSat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Min Set Cover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
81
85
Literatur
86
Symbolindex
88
Index
90
Güte:
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
1 Einführung
Ein Ziel bei der Konstruktion von Algorithmen für Optimierungsprobleme ist häufig, die Laufzeit
der Algorithmen so gering wie möglich zu halten, um Lösungen schnell berechnen zu können,
Dabei muss man oft, wie wir noch sehen werden, darauf verzichten, optimale Lösungen zu
bestimmen.
Wir starten mit zwei motivierenden Beispielen und untersuchen zunächst sehr einfache Approximationsalgorithmen für diese Probleme, an denen wir die Hauptideen zur Konstruktion solcher
Algorithmen erläutern werden. Dass diese Probleme tatsächlich schwer zu lösen sind, können
wir allerdings erst im folgenden Kapitel zeigen, da uns die dafür benötigte Theorie hier noch
nicht zur Verfügung steht.
Nachdem wir dann schon zwei Optimierungsprobleme und zugehörige Approximationsalgorithmen kennen, wollen wir in Abschnitt 1.2 die wichtigsten Definitionen einführen und anhand der
bereits vorgestellten Beispiele erläutern. Dazu gehört neben der Definition von Optimierungsproblem, Algorithmus, Laufzeit und Approximationsgüte (die beschreibt, wie nahe eine gefundene
Lösung am Optimum liegt) auch eine sehr kurze Einführung in die Komplexitätsklassen P und
NP, die für ein grobes Verständnis der Problematik genügen sollte.
1.1 Zwei Beispiele (Min Job Scheduling und MaxCut)
Das folgende Problem wird uns immer wieder begegnen.
Beispiel 1.1 (Min Job Scheduling). Gegeben seien m identische Maschinen M1 , . . . , Mm , n
Jobs J1 , . . . , Jn und zu jedem Job Ji , i ∈ {1, . . . , n}, die Laufzeit pi ∈ N, die jede Maschine
benötigt, um den Job Ji auszuführen.
Weiter machen wir die folgenden Einschränkungen: Zu jedem Zeitpunkt kann jede Maschine nur
einen Job ausführen, und ein einmal angefangener Job kann nicht abgebrochen werden. Gesucht
ist dann eine Verteilung (ein sogenannter Schedule) der n Jobs auf die m Maschinen, die den
obigen Bedingungen genügt und möglichst schnell alle Jobs abarbeitet.
Ein Schedule
((s1 , Mi1 ), . . . , (sn , Min )),
ij ∈ {1, . . . , m},
wird durch n Paare (sk , Mij ), k ∈ {1, . . . , n}, ij ∈ {1, . . . , m}, beschrieben. Dabei bedeute
(sk , Mij ), dass der Job Jk zum Zeitpunkt sk auf der ij -ten Maschine Mij gestartet wird. Für
einen Schedule sei
Cmax := max{sk + pk ; k ∈ {1, . . . , n}}
der sogenannte Makespan des Schedules, also die Zeit, die die Maschinen bei vorgegebenem Schedule benötigen, um alle Jobs abzuarbeiten. Es geht also darum, den Makespan zu minimieren.
Allgemein werden wir Probleme wie folgt formulieren:
Optimierungsproblem 1.2 (Min Job Scheduling).
Eingabe:
Ausgabe:
4
Maschinen M1 , . . . , Mm , m ∈ N, Jobs J1 , . . . , Jn , n ∈ N, und Ausführungszeiten
p1 , . . . , pn für jeden Job.
Ein Schedule mit minimalem Makespan.
5
Kapitel 1: Einführung
Wir betrachten als Beispiel für das obige Problem zwei Maschinen M1 , M2 und fünf Jobs
J1 , . . . , J5 mit Laufzeiten p1 = 1, p2 = 2, p3 = 2, p4 = 4 und p5 = 1. Wie leicht zu sehen
ist, ist ein optimaler Schedule
((0, M1 ), (3, M1 ), (1, M1 ), (0, M2 ), (4, M2 )),
siehe Abbildung 1.1.
M
J1
J3
N
J2
J4
0
1
2
J5
3
4
5
Abbildung 1.1: Ein optimaler Schedule zu den Jobs aus Beispiel 1.1.
Wie wir später noch sehen werden, ist es im Allgemeinen sehr schwer, einen optimalen Schedule
zu finden. Das bedeutet, dass es höchstwahrscheinlich keinen effizienten Algorithmus gibt, der
für jede Eingabe des Problems einen optimalen Schedule konstruiert.
Abhilfe schafft ein Approximationsalgorithmus, d. h. ein Algorithmus, der effizient ist, also polynomielle Laufzeit hat, dafür aber keinen optimalen Wert liefert, sondern einen, der nicht zu sehr
vom Optimum abweicht. All die oben schon benutzten Begriffe wie schweres Problem, Algorithmus, Effizienz und polynomielle Laufzeit werden wir in den nächsten Abschnitten noch einmal
präzisieren. Hier soll es erst einmal genügen, mit der Anschauung, die diesen Begriffen zugrunde
liegt, zu arbeiten.
Wir werden nun einen Algorithmus für das Problem Min Job Scheduling kennen lernen, der
eine ziemlich gute Annäherung an das Optimum findet. In der Analyse dieses Algorithmus sehen
wir dann schon einige wichtige Techniken, die wir auch später benutzen werden.
Algorithmus List Schedule
Eingabe: m, p1 , . . . , pn
1
2
3
4
5
6
7
8
9
10
11
S := ∅
for i = 1 to m do
ai := 0
od
for k = 1 to n do
Berechne das kleinste i mit ai = min{aj ; j ∈ {1, . . . , m}}.
sk := ai
ai := ai + pk
S := S ∪ {(sk , Mi )}
od
return S
Der Algorithmus verfolgt also die Strategie, die Jobs auf die gerade frei werdende Maschine
zu verteilen, ohne sich die gesamte Eingabe überhaupt anzusehen. Wir werden im Laufe der
Lektüre noch weitere Approximationsalgorithmen für dieses Problem kennen lernen, die bei
weitem besser sind, allerdings ist deren Analyse dann auch komplizierter.
6
Kapitel 1: Einführung
Für unser oben angegebenes Beispiel berechnet der Algorithmus den in Abbildung 1.2 dargestellten Schedule.
M
J1
N
J3
J5
J2
0
J4
1
2
3
4
5
6
Abbildung 1.2: Das Ergebnis von List Schedule für die Instanz aus Beispiel 1.1.
Bevor wir im nächsten Abschnitt zeigen, dass dieser Algorithmus tatsächlich effizient ist, wozu
wir zunächst noch einige Definitionen benötigen, beweisen wir erst, dass die vom Algorithmus
List Schedule erzeugte Lösung höchstens doppelt so lang ist wie die eines optimalen Schedules.
Der obige Algorithmus, ebenso wie die folgende Analyse, stammen von Graham, siehe [12].
Satz 1.3. Der vom Algorithmus List Schedule erzeugte Schedule hat einen Makespan, der
höchstens doppelt so lang ist wie der Makespan eines optimalen Schedules.
Beweis. Gegeben seien m Maschinen und n Jobs mit Laufzeiten p1 , . . . , pn . Weiter sei OPT der
Makespan eines optimalen Schedules und C der vom Algorithmus erzeugte Makespan. Wie im
Algorithmus sei sk die Startzeit des k-ten Jobs in dem vom Algorithmus erzeugten Schedule und
Ck = sk + pk die Zeit, in der der k-te Job endet. Schließlich sei Jl der Job, der als letzter beendet
wird. Es gilt also C = Cl .
Bis zum Zeitpunkt sl ist jede Maschine durchgehend ausgelastet (sonst hätte Jl früher gestartet
werden können). Damit ist die durchschnittliche Laufzeit jeder Maschine bis zum Start des
letzten Jobs Jl höchstens
X
1
pk .
m
k∈{1,...,n}\{l}
Es gibt also mindestens eine Maschine, deren Laufzeit höchstens von dieser Größe ist, und es
folgt
X
1
pk .
sl ≤
m
k∈{1,...,n}\{l}
Insbesondere erhalten wir
C = Cl = sl + pl ≤
1
Weiter
ist m
1 Pn
k=1 pk .
m
Pn
k=1 pk
1
m
X
k∈{1,...,n}\{l}
pk + pl =
1
m
X
k∈{1,...,n}
1
pk + 1 −
pl .
m
die durchschnittliche Laufzeit jeder Maschine. Damit gilt also OPT ≥
7
Kapitel 1: Einführung
Da weiter OPT ≥ pl , folgt insgesamt
C ≤
≤
≤
≤
n
1 X
1
pl
pk + 1 −
m
m
k=1
1
OPT
OPT + 1 −
m
1
2−
OPT
m
2 OPT .
Wir können also sogar zeigen, dass der Algorithmus List Schedule eine Güte von 2 −
garantiert, wobei m die Anzahl der Maschinen ist.
1
m
Zunächst scheint es schwierig zu sein, den Wert der Lösung eines Approximationsalgorithmus
mit dem optimalen Wert zu vergleichen, da wir diesen gar nicht kennen. Der Trick dabei ist, gute
untere Schranken für die optimale Lösung zu suchen. Das Finden solcher Schranken ist häufig der
entscheidende Punkt in den Analysen von Approximationsalgorithmen. In dem obigen Beweis
sind diese Schranken
1 Pn
• OPT ≥ m
k=1 pk , und
• OPT ≥ pl .
Als zweites Beispiel lernen wir nun ein Maximierungsproblem kennen und analysieren einen
einfachen Approximationsalgorithmus für dieses Problem.
Optimierungsproblem 1.4 (MaxCut).
Eingabe:
Ausgabe:
Ein ungerichteter Graph G = (V, E) mit Knotenmenge V und Kantenmenge E.
Eine Partition (S, V \ S) der Knotenmenge so, dass die Größe w(S) des Schnittes,
also die Zahl der Kanten zwischen S und V \ S, maximiert wird.
5
3
4
1
2
Abbildung 1.3: Ein Beispiel für einen Schnitt.
Wir betrachten das Beispiel aus Abbildung 1.3: Der Schnitt S = {3, 4} hat eine Größe von 6
und ist, wie man leicht überlegt, ein maximaler Schnitt (im Bild sind die Schnittkanten jeweils
fett gezeichnet).
Auch dieses Problem ist, wie schon das Problem Min Job Scheduling, schwierig (dies wurde
von Karp in [27] gezeigt). Wir werden jetzt einen Approximationsalgorithmus kennen lernen,
der eine effiziente Laufzeit hat und dessen Lösungen mindestens halb so groß sind wie die Optimallösungen. Dieser Algorithmus und die Analyse findet man in Sahni und Gonzales [38].
8
Kapitel 1: Einführung
Algorithmus Local Improvement
Eingabe: G = (V, E)
1
2
3
4
5
S := ∅
while ∃v ∈ V : w(S ∆ {v}) > w(S) do
S := S ∆ {v}
od
return S
Dabei bezeichnet ∆ die symmetrische Differenz zweier Mengen, für unseren speziellen Fall heißt
dies
(
S ∪ {v}, falls v 6∈ S,
S ∆ {v} =
S \ {v}, sonst.
Die Idee des Algorithmus ist sehr einfach. Man startet mit einer Menge S von Knoten. Solange
es noch einen Knoten gibt, dessen Hinzunahme oder Wegnahme von S den aktuellen Schnitt
vergrößert, wird S entsprechend angepasst (local improvement). Andernfalls wird S ausgegeben.
Wir kommen nun zur angekündigten Analyse.
Satz 1.5. Der Algorithmus Local Improvement liefert zu jeder Eingabe einen Schnitt, für
dessen Größe w ≥ 21 OPT gilt, wobei OPT die Größe eines optimalen Schnittes bezeichnet.
Beweis. Sei G = (V, E) ein Graph und S der von dem Algorithmus berechnete Schnitt in G.
Dann gilt für alle v ∈ V , dass mindestens die Hälfte der Kanten durch v Schnittkanten bezüglich
S sind (andernfalls wäre S ∆ {v} ein größerer Schnitt). Also sind mindestens die Hälfte aller
Kanten Schnittkanten bezüglich S, woraus 2w ≥ |E| folgt. Da aber offensichtlich OPT ≤ |E|,
erhalten wir 2w ≥ |E| ≥ OPT.
Wie schon bei der Analyse des Algorithmus List Schedule haben wir für den obigen Beweis
eine Schranke für die optimale Lösung angegeben (|E| ≥ OPT), nur im Gegensatz zum Ersten
eine obere, da es sich bei MaxCut um ein Maximierungsproblem handelt.
1.2 Notationen und Definitionen
Wie oben versprochen, wollen wir nun einige im letzten Abschnitt bereits benutzten Begriffe an
dieser Stelle präzisieren und die Definitionen an einigen Beispielen motivieren.
Optimierungsprobleme
Ein Optimierungsproblem Π = (I, F, w) ist definiert durch:
• Eine Menge I von Instanzen.
• Zu jeder Instanz I ∈ I existiert eine Menge F (I) von zulässigen Lösungen,
• Jeder Lösung S ∈ F (I) ist ein Wert w(S) ∈ Q+ zugeordnet.
Das Ziel ist dann, bei gegebener Instanz eine zulässige Lösung so zu finden, dass w(S) möglichst
groß (Maximierungsproblem) oder möglichst klein ist (Minimierungsproblem).
Im Min Job Scheduling zum Beispiel wird eine Instanz I spezifiziert durch die Anzahl der
Maschinen, die Anzahl der Jobs und die Laufzeiten der einzelnen Jobs. Die Menge F (I) der
zulässigen Lösungen ist dann die Menge der Schedules zur Eingabe I. Weiter bezeichnet für jede
zulässige Lösung, also jeden Schedule S ∈ F (I) der Wert w(S) den Makespan. Da wir den Makespan möglichst klein haben wollen, handelt es sich hierbei also um ein Minimierungsproblem.
9
Kapitel 1: Einführung
Entscheidungsprobleme
Darüber hinaus können wir aber auch folgendes Entscheidungsproblem betrachten.
Entscheidungsproblem 1.6 (Job Scheduling).
Eingabe:
Frage:
m Maschinen M1 , . . . , Mm , n Jobs J1 , . . . , Jn , Ausführungszeiten p1 , . . . , pn für jeden
Job und k ∈ N.
Existiert ein Schedule mit einem Makespan kleiner gleich k?
Allgemein besteht ein Entscheidungsproblem Π = (I, YI ) aus einer Menge I von Instanzen und
einer Teilmenge YI ⊆ I von JA-Instanzen. Das Problem kann dann wie folgt formuliert werden:
Entscheidungsproblem 1.7 (Π = (I, YI )).
Eingabe:
Frage:
x ∈ I.
Gilt x ∈ YI ?
Die oben angegebene Konstruktion, also zu einem Optimierungsproblem ein Entscheidungsproblem zu konstruieren, lässt sich natürlich verallgemeinern.
Definition 1.8. Sei Π = (I, F, w) ein Optimierungsproblem. Dann heißt Π0 = (I 0 , YI 0 ) mit
I 0 = I × Q und
YI 0
= {(I, k) ∈ I 0 ; es existiert S ∈ F (I) mit w(S) ≥ k}
YI 0
= {(I, k) ∈ I 0 ; es existiert S ∈ F (I) mit w(S) ≤ k},
bzw.
wenn Π ein Maximierungs- bzw. ein Minimierungsproblem ist, das zu Π zugehörige Entscheidungsproblem.
Ein Algorithmus für ein Optimierungsproblem löst auch sofort das zugehörige Entscheidungsproblem. Dies ist umgekehrt nicht immer so. Wir werden im nächsten Kapitel noch einmal näher
darauf eingehen.
Um zwischen Optimierungsproblemen und den zugehörigen Entscheidungsproblemen unterscheiden zu können, werden wir Optimierungsprobleme entsprechend ihrer Zielfunktion mit dem
Präfix Min bzw. Max bezeichnen und beim zugehörigen Entscheidungsproblem dieses einfach
weglassen. Beispielsweise bezeichnet Min Job Scheduling also das Optimierungsproblem und
Job Scheduling die Entscheidungsvariante.
Algorithmus und Laufzeit
Formal gesehen ist ein Algorithmus eine deterministische Turingmaschine, siehe Vorlesung Theoretische Informatik. Wir werden aber Algorithmen umgangssprachlich formulieren.
Ein Algorithmus A für ein Problem Π berechnet zu jeder Eingabe I von Π einen Wert A(I). Für
Optimierungsprobleme ist dies eine zulässige Lösung, d. h. ein Element aus F (I), bei Entscheidungsproblemen ein Element aus der Menge {wahr, falsch}.
Die Laufzeit TA (I) eines Algorithmus A zu einer gegebenen Instanz I ist die Anzahl der elementaren Operationen, die der Algorithmus (und damit die zugehörige Turingmaschine) auf der
Eingabe I durchführt. Weiter bezeichnen wir mit
TA (n) = max{TA (I); |I| = n}
10
Kapitel 1: Einführung
die Zeitkomplexität, oder auch worst-case-Rechenzeit des Algorithmus A für Instanzen der Länge
n ∈ N. Wir sagen dann, dass ein Algorithmus A polynomielle Laufzeit hat, wenn es ein Polynom
p : N −→ R so gibt, dass
TA (n) ≤ p(n)
für alle n ∈ N.
Betrachten wir noch einmal das Problem Min Job Scheduling und den für dieses Problem
konstruierten Algorithmus List Schedule. Zunächst setzt der Algorithmus m Werte a1 , . . . , am
auf null. In jedem der n Schleifendurchläufe wird ein Minimum von m Elementen bestimmt, was
eine Laufzeit von mindestens m Schritten benötig. Bis auf eine multiplikative Konstante erhalten
wir also eine Laufzeit von m + n · m.
Definition 1.9. Wir nennen einen Algorithmus A effizient, wenn er polynomielle Laufzeit hat,
d.h. wenn TA ∈ O(p) für ein Polynom p.
Approximationsalgorithmus
Sei A ein Algorithmus für ein Optimierungsproblem Π. Für eine Instanz I ∈ I sei OPT(I) der
Wert einer optimalen Lösung der Instanz I. Weiter sei A(I) der Wert der vom Algorithmus A
gefundenen zulässigen Lösung. Dann ist
δA (I) =
A(I)
OPT(I)
die Approximationsgüte oder der Approximationsfaktor von A bei der Eingabe von I.
Weiter sei δ : I → Q+ eine Funktion. Wir sagen, dass A (multiplikative) Approximationsgüte
oder Approximationsfaktor δ hat, wenn für jede Instanz I ∈ I gilt
δA (I) ≥ δ(I)
bei einem Maximierungsproblem,
δA (I) ≤ δ(I)
bei einem Minimierungsproblem.
Häufig ist δ eine konstante Funktion oder hängt nur von der Eingabelänge ab. Mit dieser Notation
können wir nun sagen, dass der Algorithmus List Schedule einen Approximationsfaktor von
2 und der Algorithmus Local Improvement einen Approximationsfaktor von 12 hat.
Man beachte, dass die Approximationsgüte für Approximationsalgorithmen von Maximierungsproblemen immer kleiner gleich 1 ist, im Gegensatz dazu ist diese für Minimierungsprobleme
immer größer gleich 1. Um diese Asymmetrie aufzuheben, wird für Maximierungsprobleme häufig auch der Wert OPT(I)/A(I) anstelle von A(I)/ OPT(I) als Approximationsgüte bezeichnet.
Damit erhält man dann für alle Optimierungsprobleme eine Approximationsgüte größer gleich
1, unabhängig davon, ob es sich um Maximierungs- oder Minimierungsprobleme handelt.
Wir werden, da Verwechslungen ausgeschlossen sind, im Laufe der Vorlesung beide Begriffe
benutzen.
Die Komplexitätsklassen P und NP
Wir wollen in diesem Unterabschnitt eine sehr kurze Einführung in die Komplexitätsklassen P
und NP geben, die zum Verständnis der in der Vorlesung behandelten Themen ausreichen sollte.
Einfach gesagt besteht die Klasse P aus allen Entscheidungsproblemen Π, für die es einen polynomiell zeitbeschränkten Algorithmus gibt, der für jede Instanz I von Π korrekt entscheidet, ob
I eine JA-Instanz ist oder nicht.
11
Kapitel 1: Einführung
Schwieriger ist die Definition der Klasse NP. Diese besteht aus allen Entscheidungsproblemen
Π = (I, YI ), für die es einen polynomiell zeitbeschränkten Algorithmus A und ein Polynom p so
gibt, dass für alle I ∈ I gilt:
I ∈ YI ⇐⇒ es ex. y ∈ Σ∗ mit |y| ≤ p(|I|) so, dass A(I, y) = wahr.
Man kann y dann als Hilfsvariable dafür ansehen, dass der Algorithmus sich für die korrekte Antwort entscheidet. Allerdings kann das Finden dieser Hilfsvariable sehr schwer sein. Wir werden
im nächsten Kapitel weitere Interpretationen der Klasse NP kennen lernen.
Schauen wir uns aber zunächst ein Beispiel an. Bei der Entscheidungsvariante des Problems
Min Job Scheduling kann zu einer Eingabe I der Form m Maschinen, n Jobs mit Laufzeiten
”
p1 , . . . , pn und k ∈ N“ und einem Schedule s in polynomieller Zeit getestet werden, ob
(i) s überhaupt eine zulässige Lösung ist, und
(ii) der von s erzeugte Makespan kleiner als k ist.
Der Schedule s ist dann also die Hilfsvariable“, die dem Algorithmus hilft, sich für die richtige
”
Antwort zu entscheiden.
Als zweites Beispiel betrachten wir das Problem:
Entscheidungsproblem 1.10 (Clique).
Eingabe:
Frage:
Ein Graph G = (V, E), eine Zahl k ∈ N.
Existiert eine Clique C ⊆ V mit |C| ≥ k?
Lemma 1.11. Es gilt
Clique ∈ NP.
Beweis. Wir betrachten folgenden Algorithmus für das Problem, der als Eingabe einen Graphen
G = (V, E), eine Zahl k ∈ N und eine Knotenmenge C ⊆ V erwartet:
Algorithmus IsClique
Eingabe: G = (V, E), k, C
1
2
3
4
5
6
7
8
9
10
11
if |C| ≤ k then
return falsch
fi
for v ∈ C do
for w ∈ C\{v} do
if {v, w} 6∈ E then
return falsch
fi
od
od
return wahr
Der Algorithmus testet also zunächst, ob die Kardinalität der Knotenmenge C überhaupt der
Minimalforderung |C| ≥ k genügt, um danach zu überprüfen, ob C auch eine Clique bildet.
Da der Algorithmus offensichtlich polynomiell zeitbeschränkt ist, folgt die Behauptung.
Offensichtlich gilt P ⊆ NP, man setze die Hilfsvariable y in der Definition von NP einfach als
leeres Wort. Die große Frage aber ist, ob auch die Umkehrung gilt, d. h., ob die beiden Klassen
12
Kapitel 1: Einführung
gleich sind. Trotz vieler Bemühungen in den letzten Jahrzehnten konnte diese Frage bisher nicht
beantwortet werden, es wird allerdings angenommen, dass P eine echte Teilmenge von NP ist.
Ziel der Betrachtung der oben definierten Komplexitätsklassen, jedenfalls im Kontext dieser
Vorlesung, ist es, ein Verfahren in die Hand zu bekommen, mit dem man von Optimierungsproblemen zeigen kann, dass diese unter der Voraussetzung P 6= NP nicht polynomiell gelöst werden
können.
Offensichtlich ist ein Optimierungsproblem mindestens so schwer (schwer in Bezug auf polynomielle Lösbarkeit) wie das zugehörige Entscheidungsproblem. Haben wir nämlich einen polynomiellen Algorithmus für das Optimierungsproblem, so können wir auch sofort einen polynomiellen
Algorithmus für die Entscheidungsvariante angeben (man löse zunächst das Optimierungsproblem und vergleiche den optimalen Wert mit der Zahl aus der Eingabe des Entscheidungsproblems).
Wir müssen uns also bei der Frage, ob ein Optimierungsproblem nicht polynomiell gelöst werden
kann, nur auf das zugehörige Entscheidungsproblem konzentrieren. Kandidaten für Entscheidungsprobleme, die nicht in polynomieller Zeit gelöst werden können, sind die Probleme aus
NP\P, genauer werden wir, da wir ja gar nicht wissen, ob solche Elemente überhaupt existieren,
sogenannte NP-vollständige Entscheidungsprobleme betrachten.
Ein Entscheidungsproblem Π ist, einfach gesprochen, NP-vollständig, wenn sich jedes Entscheidungsproblem aus NP auf Π in polynomieller Zeit reduzieren lässt.
Definition 1.12. Seien Π1 = (I1 , YI1 ) und Π2 = (I2 , YI2 ) zwei Entscheidungsprobleme. Eine
polynomielle Reduktion von Π1 auf Π2 ist eine Abbildung f : I1 −→ I2 so, dass gilt:
1. Es gibt einen Algorithmus A, die f in polynomieller Zeit berechnet.
2. Für alle I ∈ I1 gilt I ∈ YI1 genau dann, wenn f (I) ∈ YI2 .
Gibt es eine polynomielle Reduktion von Π1 auf Π2 , so schreiben wir auch Π1 ≤ Π2 .
Dies bedeutet, dass, wenn Π polynomiell lösbar ist, jedes Entscheidungsproblem aus NP ebenfalls, dank der polynomiellen Reduktion, in polynomieller Zeit entschieden werden kann. Die
NP-vollständigen Probleme sind also die am schwierigsten zu lösenden Probleme in NP.
Wir werden im Laufe der Vorlesung eine Vielzahl von Problemen kennen lernen, die NPvollständig sind. Diese Probleme sind dann unter der Voraussetzung P 6= NP nicht in
polynomieller Zeit zu lösen.
1.3 Das Problem Sat und der Satz von Cook
Bisher wissen wir noch nicht, ob NP-vollständige Probleme überhaupt existieren. Wir werden
deshalb in diesem Abschnitt einige kennen lernen. Zunächst starten wir mit dem berühmten Satz
von Cook, der zeigt, dass das Problem Sat (Satisfiability), d. h. die Frage, ob eine aussagenlogische Formel in konjuktiver Normalform erfüllbar ist, NP-vollständig ist. Dieser Satz wurde von
Cook 1971 (siehe [5]) und unabhängig davon von Levin 1973 (siehe [31]) bewiesen.
Aussagenlogische
Formeln
bestehen
aus
booleschen
Variablen
x1 , x2 , . . .
und
Operatoren ∧, ∨, ¬. Die Variablen xi und ¬xi heißen auch Literale. (y1 ∨ · · · ∨ yk ) mit
Literalen y1 , . . . , yk heißt Klausel und α = c1 ∧ · · · ∧ cm mit Klauseln c1 , . . . , cm auch Ausdruck
in konjunktiver Normalform. Wir sagen, dass ein Ausdruck α erfüllbar ist, wenn es eine Belegung
der Variablen in α mit den Werten wahr und falsch so gibt, dass α den Wert wahr bekommt.
Ist α eine Formel über den Variablen x1 , . . . , xn , so ist also eine Belegung nichts anderes als
eine Abbildung
µ : {x1 , . . . , xn } −→ {wahr, falsch}.
13
Kapitel 1: Einführung
Beispiel 1.13.
(i) Wir betrachten die Formel
α = (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ ¬x2 ∨ ¬x3 ).
Dann ist µ mit µ(x1 ) = µ(x2 ) = µ(x3 ) = wahr eine erfüllende Belegung.
(ii) Für die Formel
α = (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ ¬x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ ¬x3 ) ∧
(x1 ∨ ¬x2 ∨ ¬x3 ) ∧ (¬x1 ∨ x2 ∨ x3 ) ∧ (¬x1 ∨ ¬x2 ∨ x3 ) ∧
(¬x1 ∨ x2 ∨ ¬x3 ) ∧ (¬x1 ∨ ¬x2 ∨ ¬x3 )
gibt es offensichtlich keine erfüllende Belegung.
Damit können wir das in diesem Abschnitt zu behandelnde Problem wie folgt formulieren.
Entscheidungsproblem 1.14 (Sat).
Eingabe:
Frage:
Eine aussagenlogische Formel α in konjunktiver Normalform.
Ist α erfüllbar?
Satz 1.15 (Satz von Cook (1971)). Sat ist NP-vollständig.
Beweisskizze. Ähnlich wie schon bei dem Problem Clique lässt sich zeigen, dass auch das Problem Sat aus NP ist. Man kann ja leicht von einer gegebenen Belegung in polynomieller Zeit
prüfen, ob diese alle Klauseln erfüllt.
Wir müssen nun nachweisen, dass jedes Problem aus NP in polynomieller Zeit auf Sat reduzierbar ist. Allerdings wollen wir zunächst zum besseren Verständnis die Hauptideen vorstellen,
ohne uns mit zu genauen Betrachtungen der zugrunde liegenden Formalien den Blick für das
Wesentliche zu verstellen.
Sei also Π ein Entscheidungsproblem aus NP und A ein polynomieller Algorithmus so, dass für
I
alle wahr-Instanzen I = (I1 , . . . , In ) von Π ein Zeuge yI = (y1I , . . . , yp(n)
) so existiert, dass A für
die Eingabe (I, yI ) wahr liefert, und für alle falsch-Instanzen I von Π gilt A(I, y) = falsch für
alle y mit |y| ≤ p(|I|) für ein Polynom p. Wir müssen nun zeigen, wie sich Π in polynomieller
Zeit auf Sat reduzieren lässt.
Der Algorithmus A lässt sich in eine boolesche Formel umwandeln. Dies ist nicht weiter verwunderlich, da Computer, in denen Algorithmen ablaufen, ja nur boolesche Operationen ausführen
können. Allerdings benötigt diese Aussage eine genaue Analyse der den Algorithmen zugrundeliegenden Theorie der Turingmaschinen, auf die wir an dieser Stelle aber verzichten.
Diese dem Algorithmus A zugeordnete boolesche Formel lässt sich in eine Formel in konjunktiver
Normalform umwandeln. Wir bezeichnen die so erhaltene Formel mit
α = c1 ∧ · · · ∧ cm
mit Klauseln c1 , . . . , cm über der Variablenmenge
X = {x1 , . . . , xn , y1 , . . . , yp(n) }.
Damit erhalten wir A(I, yI ) = wahr genau dann, wenn α mit der Variablenbelegung xi = Ii für
alle i ≤ |I| und yi = yiI für alle i ≤ p(|I|) erfüllt ist.
Für jede Eingabe I von Π betrachtet man die Formel αI , die aus α entsteht, indem die Variablen
x1 , . . . , xn mit den Werten I1 , . . . , In belegt sind. Es lässt sich zeigen, dass αI in polynomieller
Zeit aus I berechnet werden kann. Offensichtlich gilt nun: I ist genau dann eine wahr-Instanz
von Π, wenn es eine erfüllende Belegung für αI gibt. Damit haben wir aber Π auf Sat reduziert.
Da Π beliebig gewählt wurde, folgt die Behauptung.
14
Kapitel 1: Einführung
Nachdem wir nun gesehen haben, dass es zumindest ein NP-vollständiges Problem gibt, liefert
uns der nächste Satz eine Möglichkeit, von weiteren Entscheidungsproblemen zeigen zu können,
dass sie NP-vollständig sind.
Satz 1.16. Seien Π1 und Π2 zwei Entscheidungsprobleme aus NP so, dass
Π1 ≤ Π2 .
Dann gilt: Ist Π1 NP-vollständig, so auch Π2 .
Beweis. Der Beweis ist trivial.
Beweise für den Nachweis der NP-Vollständigkeit eines Entscheidungsproblems Π laufen dann
in der Regel nach dem folgenden Schema ab:
1. Zeige zunächst Π ∈ NP.
2. Wähle ein geeignetes NP-vollständiges Entscheidungsproblem Π0 .
3. Konstruiere eine polynomielle Transformation f von Π0 auf Π.
Die Hauptschwierigkeit ist natürlich das Finden einer polynomiellen Transformation von Π0 auf
Π. Wir werden das im Folgenden an drei Beispielen üben.
Eine aussagenlogische Formel in konjunktiver Normalform liegt in k-konjunktiver Normalform,
k ≥ 2, vor, wenn zusätzlich jede Klausel genau k Literale enthält. Diese Ausdrücke haben also
die Form
α = (y1 ∨ y2 ∨ · · · ∨ yk ) ∧ · · · ∧ (yn−(k+1 ∨ yn−(k+2) ∨ · · · ∨ yn ).
Es stellt sich heraus, dass das Problem 2Sat in polynomieller Zeit sogar linear lösbar ist, siehe
[6]. Der Fall k = 1 ist offensichtlich trivial. Für k > 2 liegen uns aber NP-vollständige Probleme
vor. Wir wollen dies für den Fall k = 3 exemplarisch beweisen.
Wir behandeln damit das folgende Problem.
Entscheidungsproblem 1.17 (3Sat).
Eingabe:
Frage:
Eine aussagenlogische Formel in 3-konjunktiver Normalform.
Ist α erfüllbar?
Satz 1.18. 3Sat ist NP-vollständig.
Beweisskizze. Da jede Instanz von 3Sat auch eine Instanz von Sat ist und Sat ∈ NP, folgt dies
auch für das obige Problem.
Wir müssen also nur noch Sat ≤ 3Sat zeigen. Dazu werden wir zu jeder Formel α = c1 ∧
· · · ∧ cm in konjunktiver Normalform über den Variablen X = {x1 , . . . , xn } eine Formel α0 in 3konjunktiver Normalform so konstruieren, dass α genau dann erfüllbar ist, wenn α0 erfüllbar ist.
Genauer konstruieren wir zu jeder Klausel ci einen Ausdruck αi0 in 3-konjunktiver Normalform
0 folgt dann die
so, dass ci genau dann erfüllbar ist, wenn dies für αi0 gilt. Mit α0 = α10 ∧ · · · ∧ αm
Behauptung.
Sei nun i ≤ m und ci = (y1 ∨ · · · ∨ yk ) mit Literalen y1 , . . . , yk ∈ {x1 , . . . , xn } ∪ {¬x1 , . . . , ¬xn }.
Die Form von αi0 hängt von der Anzahl der in ci enthaltenen Literale ab. Man beachte, dass die
zusätzlich definierten Variablen aus Zi nur in der Formel αi0 benutzt werden. Wir erhalten die
folgende Fallunterscheidung:
15
Kapitel 1: Einführung
Fall k = 1 :
Zi := {zi1 , zi2 },
αi0 := (y1 ∨ zi1 ∨ zi2 ) ∧ (y1 ∨ zi1 ∨ ¬zi2 )
∧(y1 ∨ ¬zi1 ∨ zi2 ) ∧ (y1 ∨ ¬zi1 ∨ ¬zi2 ).
Fall k = 2 :
Zi := {zi },
αi0 := (y1 ∨ y2 ∨ zi ) ∧ (y1 ∨ y2 ∨ ¬zi ).
Fall k = 3 :
Zi := ∅,
αi0 := ci .
Fall k ≥ 4 :
Zi := {zij ; 1 ≤ j ≤ k − 3},
^
αi0 := (y1 ∨ y2 ∨ zi1 ) ∧
(¬zij ∨ yj+2 ∨ zij+1 )
1≤j≤k−4
∧(¬zik−3
∨ yk−1 ∨ yk ).
Sei nun µ : {x1 , . . . , xn } −→ {wahr, falsch} eine erfüllende Belegung für ci . Wir zeigen, dass
sich µ zu einer erfüllenden Belegung für αi0 auf ganz X 0 := X ∪ Zi erweitern lässt.
In den Fällen 1 und 2 ist die Formel αi0 bereits erfüllt. Wir können also µ beliebig auf Zi fortsetzen
und erhalten so eine erfüllende Belegung für αi0 .
Im Fall 3 ist Zi leer, d. h., an dieser Stelle ist nichts zu tun.
Der einzige verbleibende Fall ist Fall 4. Da µ eine erfüllende Belegung für ci ist, gibt es zumindest
ein l so, dass µ(yl ) = wahr ist. Wir setzen
l0 := min{µ(yl ) = wahr}
l
und unterscheiden die folgenden beiden Fälle.
Fall 4.1: l0 ≤ 2. Dann setzen wir µ(zij ) = falsch für alle j ≤ k − 3. Damit ist offensichtlich µ eine erfüllenden Belegung für αi0 .
Fall 4.2: l0 > 2. Dann setzen wir µ(zij ) = wahr für alle 1 ≤ j ≤ l0 − 2 und µ(zij ) = falsch für
alle l0 − 1 ≤ j ≤ k − 3. Damit ist dann µ auch erfüllend.
Ist umgekehrt µ eine erfüllende Belegung von αi0 , so ist leicht einzusehen, dass die Einschränkung
von µ auf {x1 , . . . , xn } ebenfalls eine erfüllende Belegung für ci ist.
Wir wollen das vorgestellte Verfahren anhand des Cliquenproblems vertiefen.
Satz 1.19 (Karp [27]). Clique ist NP-vollständig.
Beweis. Wir wissen bereits, dass das Problem aus NP ist und müssen nur noch
3Sat ≤ Clique zeigen. Sei dazu α eine Formel in 3-konjunktiver Normalform, etwa
α = (a11 ∨ a12 ∨ a13 ) ∧ · · · ∧ (ak1 ∨ ak2 ∨ ak3 )
mit aij ∈ {x1 , . . . , xn } ∪ {¬x1 , . . . , ¬xn } für alle i ∈ {1, . . . , k}, j ∈ {1, . . . , 3}.
Wir konstruieren nun einen Graphen G so, dass in G genau dann eine Clique der Größe k
existiert, wenn α erfüllbar ist. Sei
V = {(j, i); j ≤ k, i ∈ {1, . . . , 3}},
E = {{(j, i), (h, l)}; j 6= h, aji 6= ¬ah,l }.
16
Kapitel 1: Einführung
ax
ay
az
y
az
x
ax
y
z
Abbildung 1.4: Der zur Formel (1.1) gehörende Graph.
Zum Beispiel ergibt die Formel
α = (¬x ∨ ¬y ∨ ¬z) ∧ (x ∨ y ∨ ¬z) ∧ (¬x ∨ y ∨ z)
(1.1)
den Graphen aus Abbildung 1.4. Dabei ist µ(x) = 0, µ(y) = 1, µ(z) = 0 eine erfüllende Belegung
von α und {a11 , a22 , a33 } eine Clique von G.
Es ist leicht einzusehen, dass G in polynomieller Zeit konstruiert werden kann. Wir zeigen nun,
dass G genau dann eine Clique der Größe k hat, wenn es eine erfüllende Belegung für α gibt.
=⇒“ Sei C ⊆ V eine Clique von G mit |C| = k. Da je zwei Literale in derselben Klausel nicht
”
durch eine Kante verbunden sind, gibt es für alle j ∈ {1, . . . , k} genau einen Knoten (j, ij ) ∈ C.
Sei nun µ eine Belegung für die Aussagensymbole x1 , . . . , xn mit
µ(ajij ) = wahr.
Da für alle j, h ∈ {1, . . . , k} stets ajij 6= ¬ahih , ist die Belegung zulässig. Weiter existiert in jeder
Klausel mindestens ein auf wahr gesetztes Literal, d. h., α ist erfüllbar.
⇐=“ Sei umgekehrt µ eine erfüllende Belegung für α. Dann gibt es für alle j ∈ {1, . . . , k} einen
”
Index ij so, dass µ(ajij ) = wahr. Insbesondere gilt ajij 6= ¬ahih für alle j, h ∈ {1, . . . , k}, also ist
C = {(j, ij ); j ∈ {1, . . . , k}} eine Clique der Größe k.
2 Algorithmen mit multiplikativer Güte:
Graphenprobleme
Graphen spielen eine wichtige Rolle in der kombinatorischen Optimierung, insbesondere Färbungsprobleme in Graphen. Anhand dieses recht einfach zu beschreibenden Problems lassen
sich eine Reihe von Techniken für das Design approximativer Algorithmen erläutern.
Wir werden sehen, dass das Problem Max Independent Set eng mit dem Färbungsproblem
verknüpft ist, jede Farbklasse einer Knotenfärbung bildet ja eine unabhängige Menge. Damit
liegt es nahe, einen Algorithmus für Max Independent Set zu benutzen, um Algorithmen
zur Konstruktion von Färbungen zu konstruieren. Umgekehrt ist es möglich bei Kenntnis der
chromatischen Zahl eines Graphen, die Analyse von Algorithmen für das Problem Max Independent Set zu verbessern.
Das Problem Min Vertex Cover, das wir im ersten Abschnitt dieses Kapitel behandeln, ist
eng mit dem Problem Max Independent Set und darüber hinaus mit dem bereits kennen
gelernten Problem Max Clique verknüpft. Genauer sind diese drei Probleme äquivalent“: Ha”
ben wir einen optimalen Algorithmus für eines der drei Probleme, so erhalten wir durch ganz
einfache Transformationen auch einen optimalen Algorithmen für die anderen beiden, siehe die
Lemmata 2.3 und 2.6. Die Probleme Min Vertex Cover, Max Independent Set und Max
Clique sind damit nur verschiedene Formulierungen ein und desselben Problems.
2.1 Min Vertex Cover
Sei G = (V, E) ein Graph. Ein Vertex Cover C ⊆ V ist eine Teilmenge der Knotenmenge so,
dass für alle Kanten e ∈ E mindestens ein Knoten v ∈ C mit v ∈ e existiert. Bei dem Problem
Min Vertex Cover geht es darum, eine solche Knotenmenge mit kleinster Kardinalität zu
finden.
Optimierungsproblem 2.1 (Min Vertex Cover).
Eingabe:
Ausgabe:
Ein Graph G = (V, E).
Ein Vertex Cover C mit minimaler Knotenanzahl.
Dieses Problem ist, wie wir gleich zeigen werden, NP-schwer. Es wird damit unter der Voraussetzung P 6= NP keinen polynomiellen Algorithmus geben, der optimale Lösungen findet.
Satz 2.2. Min Vertex Cover ist NP-schwer.
Beweis. Wir wissen bereits, dass das Problem Max Clique NP-schwer ist. Die Probleme
Max Clique und Min Vertex Cover hängen wie folgt zusammen:
Lemma 2.3. Sei G = (V, E) ein Graph und
Gc := (V, E c := {v, w}; {v, w} 6∈ E )
der sogenannte Komplementgraph von G. Weiter sei V 0 ⊆ V. Dann sind äquivalent:
(i) V 0 ist ein Vertex Cover in G.
17
18
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
4
4
1
1
5
5
2
3
2
6
3
6
Abbildung 2.1: Links der Ursprungsgraph, rechts sein Komplement. Die Knoten v4 , v5 , v6 bilden
ein Vertexcover in G, die Knoten v1 , v2 , v3 eine Clique in Gc .
(ii) V \V 0 ist eine Clique in Gc .
Damit können wir aus einem minimalen Vertex Covers in G sofort eine maximale Clique in Gc
konstruieren. Mit der NP-Schwere des Problems Max Clique folgt dann auch die Behauptung.
Der Algorithmus, den wir in diesem Abschnitt behandeln wollen, stammt von Gavril (siehe [10]).
Die Idee dazu ist sehr einfach. Wir wählen ohne irgendwelche Nebenbedingungen eine Kante aus,
nehmen die Knoten der Kante ins Vertex Cover auf und löschen anschließend alle Kanten, die
zu diesen inzident sind. Dieses Verfahren wird so lange wiederholt, bis alle Kanten überdeckt
sind.
Algorithmus VC
Eingabe: G
1
2
3
4
5
6
7
8
C=∅
E0 = E
while E 0 6= ∅ do
Wähle {u, v} ∈ E 0 .
C = C ∪ {u, v}
E 0 = E 0 \ {e ∈ E 0 ; e ∩ {u, v} =
6 ∅}
od
return C
Für die Arbeitsweise des Algorithmus siehe auch Abbildung 2.2.
Satz 2.4. Der Algorithmus VC hat eine multiplikative Güte von 2.
Beweis. Sei C die von VC erzeugte Knotenmenge. Offensichtlich ist dann C ein Vertex Cover.
Sei weiter C ∗ ein optimales Vertex Cover und A die Menge der vom Algorithmus ausgewählten
Kanten. Dann bildet A ein Matching (d. h., je zwei Kanten aus A haben keinen gemeinsamen
Knoten). Also gilt |C| = 2|A|. Da auch C ∗ ein Vertex Cover ist, gibt es für jede Kante e ∈ A
einen Knoten ve ∈ C ∗ mit ve ∈ e. Weiter gilt ve 6= vf für alle e 6= f ∈ A (A ist ein Matching),
also |A| ≤ |C ∗ |. Insgesamt erhalten wir
|C| ≤ 2|A| ≤ 2|C ∗ |.
19
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
2
3
5
7
2
3
5
7
1
4
6
8
1
4
6
8
(a) Schritt 1:
C = {2, 3}
(b) Schritt 2:
C = {2, 3, 5, 8}
2
3
5
7
1
4
6
8
(c) Schritt 3:
C = {2, 3, 4, 5, 6, 8}
2
1
2
3
5
7
1
4
6
8
(d) Schritt 4:
Der Algorithmus VC liefert das
Vertex-Cover C = {2, 3, 4, 5, 6, 8}
3
5
7
4
6
8
(e) Optimale Lösung: C ∗ = {2, 4, 5, 8}
Abbildung 2.2: Eine Beispielinstanz von Min Vertex Cover.
2.2 Max Independent Set
Wir kennen bereits das Problem Clique, bei dem es darum geht, eine möglichst große Menge
von Knoten in einem Graphen so zu finden, dass je zwei Knoten aus dieser Menge durch eine
Kante verbunden sind. Eine unabhängige Menge, oder auch independent set, ist eine Menge von
Knoten in einem Graphen so, dass je zwei Knoten aus dieser Menge nicht durch eine Kante
verbunden sind, also das entsprechende duale Problem.
Optimierungsproblem 2.5 (Max Independent Set).
Eingabe:
Ausgabe:
Ein Graph G = (V, E).
Eine unabhängige Menge maximaler Kardinalität.
Wie schon beim Problem Min Vertex Cover ist auch Max Independent Set zum Problem
Max Clique äquivalent. Es gilt nämlich, wie man leicht zeigt:
Lemma 2.6. Sei G = (V, E) ein Graph und
Gc := (V, E c := {{v, w}; {v, w} 6∈ E})
sein Komplement. Sei weiter V 0 ⊆ V . Dann sind äquivalent:
(i) V 0 ist eine unabhängige Menge in G.
(ii) V 0 ist eine Clique in Gc .
Die Probleme Min Vertex Cover, Max Clique und Max Independent Set sind also
nur verschiedene Formulierungen desselben Problems. Es folgt somit sofort, da Max Clique
NP-schwer ist:
20
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
Satz 2.7. Max Independent Set ist NP-schwer.
Wir untersuchen nun den folgenden naheliegenden Algorithmus, der der Regel folgt, immer
Knoten mit möglichst kleinem Grad in die unabhängige Menge mit aufzunehmen.
Algorithmus AIS
Eingabe: G = (V, E)
1
2
3
4
5
6
7
8
9
10
11
U := ∅
t := 0
V (0) := V
while V (t) 6= ∅ do
G(t) := der durch V (t) induzierte Graph
vt := ein Knoten mit minimalem Grad in G(t)
V (t+1) := V (t) \ ({vt } ∪ ΓG(t) (vt ))
U := U ∪ {vt }
t := t + 1
od
return U
Offensichtlich liefert der obige Algorithmus eine unabhängige Menge und hat eine Laufzeit von
O(|V | + |E|). Die folgende Analyse des Algorithmus stammt von Halldórsson und Radharkrishnan [14].
Satz 2.8. Sei G = (V, E) ein Graph und U = AIS(G) die vom Algorithmus AIS berechnete
unabhängige Menge. Sei weiter UOPT eine maximale unabhängige Menge in G. Dann gilt
|UOPT | ≤ |U | · (|E|/|V | + 1).
Der Algorithmus hat also eine Güte von 1/(|E|/|V | + 1).
Für Graphen mit kleiner Kantenzahl ist diese Güte schon ziemlich gut. Es ist aber auch leicht
einzusehen, dass eine große unabhängige Menge um so leichter zu finden ist, je weniger Kanten im
Graphen vorhanden sind. Allerdings kann ein Graph auf n Knoten bis zu n(n−1)
Kanten haben.
2
Für Graphen mit hoher Kantenzahl hat man also mit Hilfe der Güte kaum eine verwertbare
Aussage. Am Ende dieses Abschnitts werden wir erläutern, warum diese im allgemeinen Fall
auch nicht zu erwarten ist.
Wir werden allerdings nach diesem Beweis einen zweiten Satz kennen lernen, der unter Ausnutzung weiterer Voraussetzungen an den Graphen eine bessere Güte garantiert.
Beweis. Sei γt := |{vt } ∪ ΓGt (vt )| die Anzahl der in Runde t gelöschten Knoten und κt :=
|UOPT ∩ ({vt } ∪ ΓGt (vt ))| die Anzahl der in Runde t gelöschten Knoten aus der maximalen
unabhängigen Menge UOPT . Weiter bezeichnen wir mit U = AIS(G) die vom Algorithmus
gefundene unabhängige Menge und mit t0 die Anzahl der Runden, die der Algorithmus bei
Eingabe von G durchläuft, d. h. t0 = |U |. Offensichtlich gilt dann
t0
X
t=1
γt = |V | und
t0
X
κt = |UOPT |.
(2.1)
t=1
Wir überlegen uns nun, wie viele Kanten in Schritt t mindestens aus dem Graphen G(t) gelöscht
werden. Nach Definition des Graphen G(t+1) werden alle Kanten aus G(t) gelöscht, die einen
21
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
v
Abbildung 2.3: Ein Beispiel mit γt − 1 = 4 und κt − 1 = 2.
Endpunkt in der Menge {vt } ∪ ΓGt (vt ) haben. Da vt den kleinsten Grad in G(t) hat, müssen alle
Nachbarn von vt mindestens den Grad von vt , also mindestens den Grad γt − 1 haben.
Die Menge der gelöschten Kanten wird minimal, wenn alle Knoten in {vt } ∪ ΓGt (vt ) paarweise
durch eine Kante verbunden sind, dies sind aber genau 21 γt (γt − 1) Kanten. Beachten wir nun,
dass in der Menge {vt }∪ΓGt (vt ) auch κt Knoten liegen, die unabhängig sind, d. h. nicht durch eine
1
Kante verbunden sind, so müssen wir diese 21 κt (κt −1)
wieder von 2 γt (γt −1) abziehen. Allerdings
hat dann jedes Element aus UOPT ∩ {vt } ∪ ΓGt (vt ) nicht den notwendigen Knotengrad. Diese
restlichen κt − 1 Kanten für jeden Knoten aus {vt } ∪ ΓGt (vt ) enden also außerhalb der Menge
{vt } ∪ ΓGt (vt ). Insgesamt erhalten wir also, dass mindestens 21 γt (γt − 1) + 21 κt (κt − 1) Kanten in
Schritt t gelöscht werden.
Mit diesem Ergebnis können wir die Anzahl der Kanten in G wie folgt abschätzen: Es gilt
t0
X
1
t=1
2
· γt · (γt − 1) +
1
· κt · (κt − 1) ≤ |E|,
2
und damit, unter Ausnutzung der Formeln in (2.1),
t0
X
γt2 + κ2t ≤ 2 · |E| + |V | + |UOPT |.
t=1
Wir nutzen nun die Cauchy–Schwarzsche Ungleichung
hx, yi2 ≤ hx, xi · hy, yi
wie folgt aus: Setze xt = γt und yt =
2
|V | ·
|V |
t0
|V |
t0
für alle t ≤ t0 . Dann folgt
2
|V | 2
=
|V | ·
t0
!2
t0
X
=
xt · yt
t=1
= hx, yi2
t0
t0
X
X
≤
x2t ·
yt2
=
t=1
t0
X
t=1
t=1
x2t
· t0 ·
|V |
t0
2
,
22
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
und wir erhalten
t
t
t=1
t=1
0
0
X
X
1
γt2 .
x2t =
|V |2 ≤
t0
Eine analoge Rechnung mit xt = κt und yt =
|UOPT |
t0
zeigt
t
0
X
1
2
κ2t .
|UOPT | ≤
t0
t=1
Insgesamt erhalten wir also
t
0
|V |2 + |UOPT |2 X
γt2 + κ2t ≤ 2 · |E| + |V | + |UOPT |.
≤
t0
t=1
Einsetzen von t0 = |U | ergibt unter Ausnutzung von |UOPT | ≤ |V |
|UOPT |/|U |
≤
=
2 · |E| + |V | + |UOPT |
|V |2 /|UOPT | + |UOPT |
2 · |E|/|V | + 1 + |UOPT |/|V |
|V |/|UOPT | + |UOPT |/|V |
{z
}
|
≥2
≤
|UOPT |≤|V |
≤
≤
2 · |E|/|V | + 1 + |UOPT |/|V |
2
2 · |E|/|V | + 1 + |V |/|V |
2
|E|/|V | + 1,
also die Behauptung.
Wir wollen im Folgenden die Analyse des Algorithmus unter Kenntnis der Knotenfärbungszahl
des Eingabegraphen verbessern.
Definition 2.9. Sei G = (V, E) ein Graph.
(i) Eine Knotenfärbung ist eine Abbildung c : V → {1, . . . , n} so, dass für je zwei verschiedene
Knoten v, w ∈ V mit {v, w} ∈ E c(v) 6= c(w) gilt, d. h., zwei Knoten, die durch eine Kante
verbunden sind, haben unterschiedliche Farben.
(ii) Die Zahl
χ(G) := min{n ∈ N; es existiert eine Knotenfärbung c : V → {1, . . . , n}}
heißt auch chromatische Zahl χ von G.
Man beachte, dass eine Knotenfärbung c : V −→ {1, . . . , n} eines Graphen G = (V, E) eine
Partition der Knotenmenge V in unabhängige Mengen liefert. Zwei Knoten nämlich, die mit
derselben Farbe gefärbt wurden, haben keine gemeinsame Kante, d. h. für alle i ≤ n ist c−1 (i)
also eine unabhängige Menge in G.
Damit liegt es nahe, unter Kenntnis der chromatischen Zahl eines Graphen den obigen Algorithmus noch genauer analysieren zu können. Zunächst stellt das nächste Lemma eine Beziehung
zwischen der chromatischen Zahl und dem Minimalgrad eines Graphen her.
Lemma 2.10. Sei G = (V, E) ein k-färbbarer Graph. Dann gilt
δ(G) ≤ (1 − 1/k) · |V |.
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
23
Beweis. Wir bezeichnen mit Ui ⊆ V , i ≤ k, die Menge der Knoten, die mit der Farbe i gefärbt
wurden. Da V die disjunkte Vereinigung der Mengen Ui ist, gilt
k
X
|Ui | = |V |.
i=1
Also gibt es ein i ≤ k mit |Ui | ≥ |V |/k.
Sei nun u ein Knoten aus Ui . Da u keine Kanten mit anderen Knoten aus Ui gemeinsam hat,
kann u nur zu Knoten aus V \Ui durch eine Kante verbunden sein. Wegen
|V \Ui | = |V | − |Ui | ≤ |V | − |V |/k
folgt die Behauptung.
Damit sind wir nun in der Lage, die Analyse des obigen Algorithmus wesentlich zu verbessern.
Satz 2.11. Für jeden k-färbbaren Graphen G = (V, E) gilt
|AIS(G)| ≥ logk (|V |/3).
Beweis. Sei U die vom Algorithmus AIS konstruierte unabhängige Menge. Sei weiter v0 = |V |
und vt = |V (t) |. Mit t0 bezeichnen wir die Anzahl der Runden, die der Algorithmus durchläuft.
Es gilt somit |U | = t0 . Weiter können wir annehmen, dass k ≥ 2, da aus k = 1 gerade E = ∅
folgt.
Mit dem obigen Lemma erhalten wir δ(ut ) ≤ vt − vt /k = (1 − 1/k)vt . Die Nachbarn von ut
werden zusammen mit ut in Runde t gelöscht, so dass für alle t ≥ 0
vt
1
· vt − 1 ≥
−1
vt+1 ≥ vt −
1−
k
k
gilt. Nutzen wir diese Abschätzung iterativ aus, so erhalten wir
k
1
v0
vt ≥ t −
· 1− t .
k
k−1
k
Da k ≥ 2, gilt
k
k−1
· 1−
1
kt
≤ 2 und damit
vt ≥
v0
− 2.
kt
Der Algorithmus läuft, so lange V (t) =
6 ∅, d. h. so lange vt ≥ 1 gilt. Mit der obigen Abschätzung
erhalten wir, dass aus vk0t − 2 ≥ 1 auch vt ≥ 1 folgt. Die Frage ist also, für welche t diese
Ungleichung gilt. Wir erhalten
v0
v0
− 2 ≥ 1 ⇐⇒
≥3
t
k
kt
⇐⇒ v0 /3 ≥ k t
⇐⇒ logk (v0 /3) ≥ logk (k t ) = t logk (k) = t.
Für k-färbbare Graphen durchläuft der Algorithmus somit mindestens logk (v0 /3) Runden. Da
in jeder Runde genau ein Knoten zu der unabhängigen Menge hinzugefügt wird, folgt die Behauptung.
24
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
Dass wir in diesem Abschnitt keinen Approximationsalgorithmus für das Problem Max Independent Set mit konstanter Güte angegeben haben, ist kein Zufall. Findet man einen solchen
Algorithmus, so kann man sofort eine ganze Schar von Approximationsalgorithmen angeben,
die das Problem beliebig gut approximieren. Genauer heißt dies, dass man für jede vorgegebene
Approximationsschranke 1−ε, ε > 0, einen Approximationsalgorithmus Aε mit Güte 1−ε findet,
siehe Satz 2.14. Solch eine Menge von Approximationsalgorithmen bezeichnen wir als Approximationsschema. In Kapitel 4 werden wir solche Schemata noch einmal ausführlich behandeln.
Wichtig für die Konstruktion im Beweis von Satz 2.14 ist die folgende Definition. Dabei sei für
einen Graphen G = (V, E) Ê := E ∪ {{u, u}; u ∈ V }.
Definition 2.12 (Produkt zweier Graphen). Seien G1 = (V1 , E1 ) und G2 = (V2 , E2 ) Graphen.
Dann bezeichnen wir mit G1 × G2 = (V, E), wobei
:= V1 × V2 und
V
E := {{(u, v), (u0 , v 0 )}; {u, u0 } ∈ Ê1 und {v, v 0 } ∈ Ê2 },
das Produkt von G1 und G2 . Für G×G schreiben wir auch kurz G2 und nennen G2 das Quadrat
von G.
(1,1)
(1,2)
(1,3)
1
2
(2,1)
(2,2)
(2,3)
3
(3,1)
G
(3,2)
(3,3)
G2=G x G
Abbildung 2.4: Ein einfacher Graph G und sein Quadrat.
Beispiel 2.13. Abbildung 2.4 zeigt einen einfachen Graphen und sein Quadrat. Man erkennt
sicherlich, dass das Quadrat größerer Graphen schnell unübersichtlich wird.
Das folgende Lemma zeigt zunächst, wie sich die Größen einer unabhängigen Menge in einem
Graphen und seinem Quadrat verhalten.
Lemma 2.14. Sei G ein Graph. Dann sind äquivalent:
(i) G hat eine unabhängige Menge der Größe mindestens k, und
(ii) G2 hat eine unabhängige Menge der Größe mindestens k 2 .
Beweis. (i) =⇒ (ii): Sei U eine unabhängige Menge von G mit |U | ≥ k. Sei weiter Ū :=
{(u, v); u, v ∈ U }. Dann ist Ū offensichtlich eine unabhängige Menge von G2 . Weiter gilt |Ū | ≥ k 2 ,
also folgt die Behauptung.
(i) ⇐= (ii): Sei nun U 2 eine unabhängige Menge von G2 mit k 2 Knoten. Dann sind {u; (u, v) ∈
U 2 für irgendein v} und {v; (u, v) ∈ U 2 für irgendein u} unabhängige Mengen in G, und mindestens eine der beiden hat mindestens k Knoten.
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
25
Wir sind nun in der Lage, das versprochene Resultat zu beweisen.
Satz 2.15. Falls es einen approximativen Algorithmus mit konstanter Güte r < 1 für Max
Independent Set gibt, so gibt es auch ein Approximationsschema.
Beweis. Es sei A ein approximativer Algorithmus mit Güte r < 1 und einer polynomiellen
Laufzeit O(nk ), wobei n die Anzahl der Knoten in dem jeweiligen Graphen sei. Wir bezeichnen
mit A(G) die Größe der unabhängigen Menge, die vom Algorithmus konstruiert wird, und mit
OPT(G) die Größe einer maximalen unabhängigen Menge im Graphen G. Dann gilt also
A(G) ≥ r · OPT(G)
für jede Instanz G von Max Independent Set.
Der Trick besteht nun darin, den Algorithmus A zunächst auf G2 anzuwenden und dann wie im
Beweis von Lemma 2.14 (zweiter Teil) aus der von A konstruierten unabhängigen Menge für G2
eine für G zu bauen.
Algorithmus A2
Eingabe: G = (V, E)
1
2
3
4
5
6
7
8
9
Konstruiere G2 .
U 2 = A(G2 )
U1 := {u; (u, v) ∈ U 2 für irgendein v}
U2 := {v; (u, v) ∈ U 2 für irgendein u}
if |U1 | ≥ |U2 | then
return U1
else
return U2
fi
Der Algorithmus A hat bei Eingabe von G2 eine Laufzeit von O(n2k ), insgesamt erhalten wir also
eine Laufzeit von O(n2k ) für A2 . Da weiter A eine Güte von r garantiert, folgt aus Lemma 2.14,
dass A2 eine unabhängige Menge in G der Größe mindestens
√
r · OPT(G)
√
konstruiert. Die Approximationsgüte von A2 ist also r.
Wenn wir das Quadrat nun zweimal bilden, also (G2 )2 betrachten, so erhalten wir einen appro√
ximativen Algorithmus mit Güte 4 r und Laufzeit O(n4k ). Da
√
lim N r −→ 1,
N →∞
√
finden wir für alle ε > 0 ein N ∈ N so, dass N r > 1 − ε. Der Algorithmus Aε wählt nun N so,
√
dass N r ≥ 1−ε und N = 2l , wir bilden also das l-fache Quadrat. Dann läuft Aε in polynomieller
Zeit, da N = N (ε) konstant ist, und es gilt
√
Aε (G) ≥ N r · OPT(G) ≥ (1 − ε) · OPT(G)
für jede Instanz G von Max Independent Set.
Man überlege sich, dass alle Aussagen über die Approximationsgüte von Max Independent
Set dank Lemma 2.6 auch für das Problem Max Clique gelten. Wir erhalten also insbesondere
mit Satz 2.15 sofort als Konsequenz:
Satz 2.16. Falls es einen approximativen Algorithmus mit konstanter Güte r < 1 für Max
Clique gibt, so gibt es auch ein Approximationsschema.
26
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
2.3 Min Node Coloring
Färbbarkeit von Graphen haben wir schon kurz im letzten Abschnitt angesprochen. Wir wollen
an dieser Stelle einen Approximationsalgorithmus für dieses Problem konstruieren, der den im
letzten Abschnitt behandelten Algorithmus für das Problem Max Independent Set nutzt.
Optimierungsproblem 2.17 (Min Node Coloring).
Eingabe:
Ausgabe:
Ein Graph G = (V, E).
Eine minimale Knotenfärbung von G.
Abbildung 2.5 zeigt einen Graphen G mit einer 3-Färbung. Offensichtlich benötigt eine Färbung
für einen Graphen G mindestens so viele Farben wie die Kardinalität einer größten Clique in
G. Da der Graph aus Abbildung 2.5 ein Dreieck enthält, gilt hier χ(G) ≥ 3, die angegebene
Färbung ist also somit schon optimal.
v2
v1
v4
v3
v5
v6
Abbildung 2.5: Ein Graph mit χ(G) = 3: c(v1 ) = v(v5 ) = 1, c(v2 ) = c(v4 ) = c(v6 ) = 2 und
c(v3 ) = 3.
Dieses Problem ist, wie der nächste Satz zeigt, NP-schwer, sogar die folgende Einschränkung der
Entscheidungsvariante ist NP-vollständig.
Entscheidungsproblem 2.18 (Node 3-Coloring).
Eingabe:
Frage:
Ein Graph G = (V, E).
Existiert eine 3-Färbung von G?
Satz 2.19 (Karp [27]). Das Problem Node 3-Coloring ist NP-vollständig.
Beweis. Wir zeigen 3Sat ≤ Node 3-Coloring. Sei also
α = (a11 ∨ a12 ∨ a13 ) ∧ · · · ∧ (ak1 ∨ ak2 ∨ ak3 )
eine Formel in 3-konjunktiver Normalform über X = {x1 , . . . , xn }. Gesucht ist nun ein Graph
Gα = (V, E), der genau dann 3-färbbar ist, wenn α eine erfüllende Belegung besitzt.
Wir bauen Gα aus k + 1 Teilgraphen G0 , . . . , Gk zusammen, die wie folgt gegeben sind (siehe
Abbildung 2.6):
Sei G0 = (V0 , E0 ) mit
V0 := {u, x1 , . . . , xn , ¬x1 . . . , ¬xn },
E0 := {u, x1 }, . . . , {u, xn }, {u, ¬x1 }, . . . , {u, ¬xn }, {x1 , ¬x1 }, . . . , {xn , ¬xn } ,
und für alle 1 ≤ i ≤ k sei Gi := (Vi , Ei ) mit
Vi := {v, ai , bi , ci , yi , zi },
Ei := {v, yi }, {v, zi }, {ai , yi }, {ai , zi }, {bi , yi }, {ci , zi }, {bi , ci } .
27
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
c
xn
z
nxn
b
x2
nx2
x1
nx1
a
u
y
v
Abbildung 2.6: Die Graphen G0 und Gi .
Damit ist dann Gα = (V, E) definiert via
V
:= V0 ∪ V1 ∪ · · · ∪ Vk ,
k
[
E := E0 ∪ E1 ∪ · · · ∪ Ek ∪ {u, v} ∪
{ai1 , ai }, {ai2 , bi }, {ai3 , ci } .
i=1
Wir vereinigen also die obigen Teilgraphen, fügen die Kante {u, v} und für jede Klausel (ai1 ∨
ai2 ∨ ai3 ) die Kanten {ai1 , ai }, {ai2 , bi }, und {ai3 , ci } hinzu. Es bleibt zu zeigen, dass α genau
dann eine erfüllende Belegung besitzt, wenn Gα 3-färbbar ist.
=⇒“ Sei also nun
”
µ : X −→ {wahr, falsch}
eine erfüllende Belegung für α.
Wir definieren zunächst eine lokale Färbung c auf den Knoten
x1 , . . . , xn , ¬x1 , . . . , ¬xn , u, v
wie folgt:
c(u) = 2, c(v) = 0, c(xi ) = µ(xi ) und c(¬xi ) = 1 − µ(xi )
für alle i ≤ n, wobei wir wahr mit 1 und falsch mit 0 identifizieren.
Diese muss nun geschickt auf den restlichen Knoten {ai , bi , ci , yi , zi ; i ≤ n} von V fortgesetzt
werden. Wir benötigen dafür die folgende Aussage: Sind a, b, c ∈ {0, 1} mit 1 ∈ {a, b, c}, dann
gibt es eine 3-Färbung c von Gi mit
1. c(v) = 0 und
2. c(ai ) 6= a, c(bi ) 6= b und c(ci ) 6= c.
Dies ist relativ einfach durch geeignete Fallunterscheidungen zu beweisen.
Da die Belegung µ erfüllend ist, existiert für alle i ≤ n zumindest ein j ≤ 3 mit µ(aij ) = wahr.
Nach der obigen Aussage lässt sich damit für alle i ≤ n eine 3-Färbung von Gi so finden, dass
1. c(v) = 0 und
2. c(ai ) 6= ai1 , c(bi ) 6= ai2 und c(ci ) 6= ai3 .
Dies definiert uns dann eine 3-Färbung auf ganz G.
⇐=“ Sei nun c : V −→ {1, 2, 3} eine 3-Färbung von G. Da die Knoten v und u verbunden sind,
”
gilt c(v) 6= c(u). Wir können also o.B.d.A. annehmen, dass c(u) = 2 und c(v) = 0.
Da für alle i ≤ n die Knoten u, xi und ¬xi ein Dreieck in G0 bilden, folgt unmittelbar c(xi ) +
c(¬xi ) = 1. Damit ist dann die Einschränkung µ := c|X von c auf X eine zulässige Belegung der
Variablen (wieder mit der Identifizierung wahr = 1 und falsch = 0).
Weiter erhalten wir, dass für jedes i ≤ n zumindest einer der Knoten ai , bi oder ci mit der Farbe
0 gefärbt ist (dies folgt sofort aus der Struktur der Graphen Gi ). Also gibt es für alle i ≤ n
28
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
zumindest ein j ≤ 3 so, dass µ(aij ) = c(aij ) = 1. Das heißt aber gerade, dass die Belegung µ
auch erfüllend ist.
Das Problem Max Independent Set haben wir im letzten Abschnitt kennen gelernt und wir
werden den Algorithmus AIS für die Formulierung eines Algorithmus für das Problem Min
Node Coloring wie folgt benutzen: Zunächst berechnet AIS eine unabhängige Menge im
Graphen. Die Knoten dieser Menge werden dann mit einer Farbe gefärbt und anschließend im
Graphen gelöscht. In dem so entstandenen neuen Graphen wird dann wieder mittels AIS eine
unabhängige Menge berechnet und mit einer weiteren Farbe gefärbt. Dies geschieht so lange, bis
alle Knoten aus dem Graphen gelöscht und somit gefärbt wurden. Der Algorithmus wurde von
Johnson in [25] zum ersten Mal publiziert.
Algorithmus ACol
Eingabe: G = (V, E)
1
2
3
4
5
6
7
8
9
10
11
12
t := 1
V (1) := V
while V (t) 6= ∅ do
G(t) := der durch V (t) induzierte Graph
Ut := AIS(G(t) )
for v ∈ Ut do
c(v) := t
od
V (t) := V (t) − Ut
t := t + 1
od
return c
Im schlimmsten Fall, zum Beispiel wenn die Eingabe ein vollständiger Graph auf n Knoten ist,
wird die while-Schleife n-mal durchlaufen. Der Algorithmus ist also polynomiell.
Satz 2.20. Sei G = (V, E) ein k-färbbarer Graph und n = |V |. Dann konstruiert der obige
Algorithmus eine Färbung mit höchstens log 3n
Farben, er hat also eine relative Güte von
k (n/16)
O(n/ log n).
Beweis. Setze nt := V (t) . Aus Satz 2.11 folgt |U (t) | ≥ logk (nt /3). Damit erhalten wir
nt+1 ≤ nt − logk (nt /3)
(2.2)
für alle t ≥ 1. Sei nun t0 die Anzahl der vom Algorithmus durchlaufenen Runden, also die Anzahl
der Farben, mit dem der Graph gefärbt wurde. Der Algorithmus bricht ab, wenn alle Knoten
gefärbt wurden, wenn also nt0 < 1.
Wir überlegen uns nun mit Hilfe der Formel (2.2), wann dies spätestens der Fall ist.
Kapitel 2: Algorithmen mit multiplikativer Güte: Graphenprobleme
Für alle r ≥
n
logk (n/16)
gilt (unter Ausnutzung von
n
logk n
≥
3
4
29
· n1/2 )
n
logk (r/3) ≥ logk
3 · logk (n/16)
16 n/16
≥ logk
3 logk (n/16)
n/16
≥ logk
logk (n/16)
≥ logk ((n/16)1/2 )
1
=
· logk (n/16).
2
Es werden also, solange nt ≥
n
logk n/16
2n
logk (n/16)
gilt, mindestens
1
2
· logk (n/16) Knoten in jeder Runde
gefärbt. Nach spätestens t =
Runden ist die Anzahl der Knoten in V (t) kleiner als
n
logk n/16 . Gehen wir jetzt davon aus, dass der Algorithmus im schlimmsten Fall für jeden dieser
Knoten eine eigene Farbe zuordnet, so kommen wir auf eine Anzahl von
2n
n
3n
+
=
logk (n/16) logk n/16
logk (n/16)
Farben und es folgt die Behauptung.
Der obige Ansatz wurde von einigen Autoren genutzt (und verbessert), um bessere
proximationsalgorithmen zu erhalten, so zum Beispiel von Widgerson in [39], der
Güte von O(n(log log n/ log n)2 ) garantiert, von Berger und Rompel [3] mit einer Güte
O(n(log log n/ log n)3 ). Der bisher beste Algorithmus stammt von Halldórsson und hat
Güte von O(n(log log n)2 /(log n)3 ), vergleiche [13].
Apeine
von
eine
3 Algorithmen mit multiplikativer Güte:
Prozessoptimierung
Die Optimierung von Produktionsprozessen spielt in der Industrie eine große Rolle. Zu den
damit verbundenen Problemen zählt das schon in der Einleitung kennen gelernte Min Job
Scheduling, bei dem es darum geht, eine Anzahl von Jobs so zu verteilen, dass der Makespan,
also die Zeit, bis der letzte Job beendet ist, minimiert wird. Wir werden im ersten Abschnitt
dieses Kapitels einen Algorithmus mit Güte 43 für dieses Problem behandeln. Natürlich gibt es
auch andere Varianten dieses Problems. So kann zum Beispiel darauf verzichtet werden, dass
die Maschinen identisch sind, d. h. jeder Job auf jeder Maschine dieselben Ausführungszeiten
besitzt. Eine weitere Verallgemeinerung ist, dass die Jobs, wie ja häufig bei Parallelisierungen
von Computerprogrammen, in einer bestimmten Reihenfolge abgearbeitet werden müssen und
die Prozessoren bzw. Maschinen Kommunikationszeiten benötigen (um zum Beispiel Ergebnisse
auszutauschen).
Auch das Problem des Handlungsreisenden, oder Min Traveling Salesman, ist ein klassisches
Problem, das Prozesse optimiert. Hier geht es darum, zu vorgegebenen Städten mit entsprechenden Entfernungen eine möglichst kurze Rundreise zu finden, die alle Städte besucht. Wir werden
dieses Problem natürlich in Graphen mit einer Gewichts- bzw. Entfernungsfunktion auf der Menge der Kanten formulieren. Erfüllt diese Gewichtsfunktion die Dreiecksungleichung, so können
wir für diese Klasse von Graphen einen Approximationsalgorithmus mit Güte 2 und durch leichte
Modifikation auch einen mit Güte 3/2 konstruieren.
Das allgemeine Min Traveling Salesman ist allerdings, wie wir im letzten Abschnitt dieses
Kapitels sehen werden, überhaupt nicht zu approximieren. Genauer gibt es unter der Voraussetzung P 6= NP für jedes c ∈ N keinen Approximationsalgorithmus mit Güte c (wie wir in
den Übungen sehen werden, gilt dies anstelle einer Konstanten c für jede in polynomieller Zeit
berechenbare Funktion). Dies wird unser erstes Nichtapproximierbarkeitsresultat für die multiplikative Güte eines Optimierungsproblems sein, das wir kennen lernen werden. Für die additive
Güte haben wir solche Resultate ja schon in Abschnitt ?? behandelt.
3.1 Min Job Scheduling
Dieses Problem haben wir schon im einleitenden Kapitel behandelt und einen Approximationsalgorithmus angegeben, der eine Güte von 2 hat. Wir werden nun zeigen, dass durch eine einfache
Modifikation dieses Algorithmus die Güte auf 34 verbessert werden kann.
Zunächst zur Erinnerung das Problem:
Optimierungsproblem 3.1 (Min Job Scheduling).
Eingabe:
Ausgabe:
m ∈ N Maschinen M1 , . . . , Mm , n ∈ N Jobs J1 , . . . , Jn und Ausführungszeiten
p1 , . . . , pn für jeden Job.
Ein Schedule mit minimalem Makespan.
Erinnern wir uns an den in Abschnitt 1.1 kennen gelernten Algorithmus für dieses Problem. Die
Jobs werden einfach der nächsten frei werdenden Maschine zugeordnet, wobei die Reihenfolge
der Jobs eher zufällig durch die Eingabe festgelegt wird. Es liegt nahe, die Jobs zunächst nach
30
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
31
der Laufzeit zu sortieren, beginnend mit dem Job, der die meiste Zeit benötigt. Genau dies tut
der folgende Algorithmus.
Algorithmus LPT
Eingabe: m, n, Ji , pi (Longest Processing Time First)
1
2
Sortiere die Jobs J1 , . . . , Jn nach absteigenden Laufzeiten (d. h. p1 ≥ p2 ≥ · · · ≥ pn ).
Berechne einen Schedule mit dem Algorithmus List Schedule.
Der Algorithmus geht zurück auf Graham, siehe [12].
Satz 3.2. Der Algorithmus LPT hat eine Approximationsgüte von 43 .
Beweis. Sei J = (m, p1 , . . . , pn ) eine Instanz des Problems, C(J) der vom Algorithmus erzeugte
Makespan, OPT(J) der optimale Makespan zur Eingabe J und sk der Zeitpunkt, zu dem der
Job Jk in dem vom Algorithmus erzeugten Schedule startet. Weiter sei Jl der Job, der als letzter
fertig wird (d. h. C(J) = sl + pl ). Wir unterscheiden die beiden folgenden Fälle.
Fall 1: Es gelte pl ≤ OPT(J)
. Da sl ≤ OPT(J) (bis zum Zeitpunkt sl sind ja alle Maschinen
3
durchgehend belegt), erhalten wir
C = sl + pl ≤ OPT(J) +
Fall 2: Es gelte also jetzt pl >
OPT(J)
.
3
1
4
OPT(J) = OPT(J).
3
3
Man betrachtet nun eine neue Instanz
J 0 = (m, p1 , . . . , pl )
des Problems, die durch Löschen der letzten pl+1 , . . . , pn Jobs aus J entsteht. Da Jl der Job ist,
der als Letzter terminiert, gilt C(J) = C(J 0 ). Weiter haben wir OPT(J 0 ) ≤ OPT(J). Können
wir also zeigen, dass C(J 0 ) ≤ 34 OPT(J 0 ), so folgt unmittelbar
C(J) = C(J 0 ) ≤
4
4
OPT(J 0 ) ≤ OPT(J),
3
3
und damit die Behauptung.
Wir betrachten also im Folgenden die Instanz J 0 . Da die Laufzeiten sortiert sind, hat jeder Job
0)
eine Laufzeit von mehr als OPT(J
. Also können in jedem optimalen Schedule höchstens zwei
3
Jobs pro Maschine laufen. Insbesondere gibt es dann höchstens 2m Jobs. Sei h ≥ 0 so, dass
l = 2m − h. Dann gibt es also h Jobs, die allein auf einer Maschine laufen, und die restlichen
Jobs laufen jeweils in Paaren. Ein optimales Schedule hat damit die in Abbildung 3.1 skizzierte
Form (wir nehmen o.B.d.A. an, dass die h Jobs, die allein laufen, auf den ersten h Maschinen
verteilt sind), wobei π eine Permutation auf der Menge {1, . . . , l} sei.
Der Algorithmus LPT verteilt zunächst die ersten m Jobs auf die m Maschinen. Da diese in
umgekehrter Reihenfolge fertig werden, ergeben sich die Paare
(Jm , Jm+1 ), . . . , (Jh+1 , Jl )
auf den Maschinen h + 1, h + 2, . . . , m, siehe Abbildung 3.2.
Wir werden nun durch geeignete Vertauschungen den optimalen Schedule in den vom Algorithmus erzeugten Schedule umwandeln, ohne den Makespan zu verschlechtern. Betrachten wir
zunächst die ersten h Maschinen. Angenommen, es existiert i ∈ {1, . . . , h} so, dass π(i) > h.
Dann existiert j ∈ {h+1, . . . , l} so, dass π(j) ≤ h. Da pπ(i) ≤ pπ(j) , können wir die Jobs Jπ(i) und
32
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
1
j1
2
j2
h
j3
h+1
m
j4
j6
j5
j7
Abbildung 3.1: Form eines optimalen Schedules in Fall 2.
Jπ(j) vertauschen, ohne einen schlechteren Makespan zu erhalten. Verfahren wir weiter in dieser
Art, so erhalten wir das Schedule aus Abbildung 3.3, dessen Makespan nicht schlechter ist als der
Makespan des optimalen Schedules, wobei π eine Permutation auf der Menge {h + 1, h + 2, . . . , l}
sei.
Durch ähnlich geschickte Vertauschung der Jobs zeigt man den Rest der Behauptung. Wir nennen
im Folgenden die Jobs Jh+1 , . . . , Jm groß und Jm+1 , . . . , Jn klein. Zunächst einmal ist offensichtlich, dass, wenn in einem optimalen Schedule zwei große Jobs auf einer Maschine laufen, der
optimale Makespan mindestens so groß ist wie der Makespan des Schedules, den unser Algorithmus konstruiert. Wir können also o.B.d.A. annehmen, dass die großen Jobs Jh+1 , . . . , Jm jeweils
auf den Maschinen Mh+1 , . . . , Mm laufen. Damit ist dann aber klar, dass der vom Algorithmus
konstruierte Schedule schon optimal ist.
Im Fall 2 liefert der Algorithmus also sogar eine optimale Lösung, womit der Satz bewiesen ist.
3.2 Min Traveling Salesman
Wir betrachten in diesem Abschnitt das Problem des Handlungsreisenden (Traveling Salesman
Problem). Zur Formulierung benötigen wir noch einige Notationen.
Eine Rundreise in einem Graphen G = ({v1 , . . . , vn }, E) ist ein Kreis, der jeden Knoten genau
einmal besucht. Genauer ist eine Rundreise also eine Permutation π : {1, . . . , n} → {1, . . . , n}
so, dass gilt:
{vπ(i) , vπ(i+1) } ∈ E für alle i ∈ {1, . . . , n − 1}, und {vπ(n) , vπ(1) } ∈ E.
Das Problem des Handlungsreisenden ist dann, eine Rundreise in einem (ungerichteten) kantengewichteten vollständigen Graphen G = (V, E) mit minimaler Gesamtlänge zu finden.
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
1
j1
2
j2
h
j3
h+1
m
j4
j6
33
j5
j7
Abbildung 3.2: Schedule, der vom Algorithmus LPT im Fall 2 konstruiert wird.
Optimierungsproblem 3.3 (Min Traveling Salesman).
Eingabe:
Ausgabe:
Ein vollständiger Graph G = ({v1 , . . . , vn }, E) mit einer Gewichtsfunktion w :
E −→ N auf den Kanten.
Eine Permutation π : {1, . . . , n} → {1, . . . , n} so, dass der Wert
w(π) =
n−1
X
w({vπ(i) , vπ(i+1) }) + w({vπ(n) , vπ(1) })
i=1
minimal ist.
Dieses Problem ist, wie wir im letzten Abschnitt zu diesem Kapitel noch sehen werden, NPschwer. Wir sind sogar in der Lage, diese Aussage zu verschärfen. Genauer gilt nämlich, dass es
für das Problem Min Traveling Salesman keinen Approximationsalgorithmus mit konstanter
(multiplikativer) Güte gibt.
Wir betrachten hier zunächst einmal nur einen Spezialfall von Min Traveling Salesman,
der durch folgende Aufgabenstellung motiviert ist: Wir denken uns n Punkte eingebettet in der
Ebene R2 . Das Gewicht einer Kante, die zwei Punkte u und v verbindet, sei der euklidische
Abstand von u und v in der Ebene, also
w(u, v) := ||u − v||2 .
Damit gilt dann die sogenannte Dreiecksungleichung, d. h., für drei Punkte t, u, v gilt w(t, u) +
w(u, v) ≤ w(t, v) (zur Erleichterung schreiben wir im Folgenden auch w(u, v) anstelle von
w({u, v})).
Wir wollen also zunächst das Problem Min Traveling Salesman nur für folgende Eingaben
untersuchen: Sei G = ({v1 , . . . , vn }, E) der vollständige Graph auf n Punkten mit Kantengewichten w(vi , vj ) ∈ N für alle i, j ∈ {1, . . . , n}. Weiter gelte die Dreiecksungleichung, d. h., für
alle i, j, k ∈ {1, . . . , n} haben wir w(vi , vk ) ≤ w(vi , vj ) + w(vj , vk ).
34
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
1
j1
2
j2
h
j3
h+1
j4
m
j6
j5
j7
Abbildung 3.3: Schedule des Algorithmus nach der Transformation.
Diese Einschränkung von Min Traveling Salesman heißt auch metrisches Min Traveling
Salesman (Min ∆TSP).
Optimierungsproblem 3.4 (Min ∆TSP).
Eingabe:
Ausgabe:
Anzahl von Punkten n ∈ N und Abstände w(i, j) = w(j, i) für alle i, j ∈ {1, . . . , n},
i 6= j, so, dass die Dreiecksungleichung gilt.
Eine Permutation π : {1, . . . , n} → {1, . . . , n} so, dass
w(π) =
n−1
X
w(vπ(i) , vπ(i+1) ) + w(vπ(n) , vπ(1) )
i=1
minimal ist.
Wir erinnern noch einmal an einige Begriffe, die wir für den nun folgenden Algorithmus benötigen.
Sei G = (V, E = {e1 , . . . , em }, inz) ein Multigraph. Ein Eulerkreis ist ein Kreis in G, der jede
Kante von G genau einmal enthält, genauer also eine Permutation π : {1, . . . , m} −→ {1, . . . , m}
so, dass gilt
inz(eπ(i) ) ∩ inz(eπ(i+1) ) 6= ∅ für alle 1 ≤ i ≤ m und inz(eπ(m) ) ∩ inz(eπ(1) ) 6= ∅.
G heißt eulersch, wenn es einen Eulerkreis in G gibt.
Entscheidungsproblem 3.5 (EulerKreis).
Eingabe:
Frage:
Ein Multigraph G.
Ist G eulersch?
Dieses Entscheidungsproblem ist, wie der folgende Satz zeigt, in polynomieller Zeit lösbar.
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
35
Abbildung 3.4: Die sieben Brücken über den Pregel.
Satz 3.6 (Euler). Es sei G ein zusammenhängender Multigraph. Dann sind die folgenden Aussagen äquivalent:
1. G ist eulersch.
2. Jeder Knoten in G hat geraden Grad.
3. Die Kantenmenge von G kann in Kreise zerlegt werden.
Beweis. (i) =⇒ (ii): Sei C ein Eulerkreis von G. Dann trägt jedes Vorkommen von v auf C 2
zum Grad von v bei. Jede Kante kommt genau einmal in C vor. Es folgt die Behauptung.
(ii) =⇒ (iii): Sei |V | = n. Da G zusammenhängend ist, hat G mindestens n − 1 Kanten. Da
G keine Knoten vom Grad 1 hat, hat G mindestens n Kanten. Also enthält G einen Kreis
K. Entfernen von K ergibt einen Graphen H, in dem jeder Knoten geraden Grad hat. Durch
Induktion zerlege man die Kantenmenge von H in Kreise und somit auch die Kantenmenge von
G.
(iii) =⇒ (i): Dies zeigt man durch Zusammensetzen der Kreise: Sei K ein Kreis in einer Zerlegung
von E in Kreise. Ist K ein Eulerkreis, so sind wir fertig. Andernfalls gibt es einen Kreis K 0 , der mit
K einen Knoten v gemeinsam hat. O.B.d.A. wähle v als Anfangs- und Endknoten beider Kreise.
Dann ist C k C 0 (C gefolgt von C 0 ) ein Kreis. Durch Iteration erhalten wir einen Eulerkreis.
Satz 3.6 löst übrigens auch das sogenannte Königsberger Brückenproblem. Die Frage ist hier,
ob es eine Rundreise durch Königsberg so gibt, dass alle sieben Brücken über den Pregel genau
einmal besucht werden und man zum Schluss wieder an den Ausgangspunkt zurückkehrt. Man
formuliert dieses Problem in einem Graphen wie in Abbildung 3.4 dargestellt.1 Wie man sieht,
hat hier jeder Knoten einen ungeraden Grad, es gibt also keinen Eulerkreis.
Wir kommen zu unseren Betrachtungen zurück. Dank Satz 3.6 müssen wir nur testen, ob ein
gegebener Graph zusammenhängend ist und jeder Knoten geraden Grad hat, um einzusehen,
dass G eulersch ist. Da dies offensichtlich in polynomieller Zeit geschehen kann, folgt unmittelbar:
1
Abdruck der historischen Stadtansicht von Königsberg mit freundlicher Genehmigung von GeoGREIF-Geographische Sammlung, ein Projekt der Universität Greifswald.
36
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
Lemma 3.7. EulerKreis ∈ P.
Aber nicht nur das Entscheidungsproblem ist aus P, wir können sogar in polynomieller Zeit
einen Eulerkreis konstruieren, wenn dieser existiert.
Algorithmus EulerKreis
Eingabe: G = (V = {1, . . . , n}, E)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if G unzusammenhängend oder deg(v) ungerade für ein v ∈ V then
return falsch
else
K := ∅
G0 := G
while K 6= E do
u := min V (G0 )
v := u
repeat
w := min Γ(v)
Füge Kante {v, w} zum Kreis K hinzu.
G0 := G − {v, w}
v := w
until v = u
od
return K
fi
Satz 3.8. Der Algorithmus ist korrekt und hat Laufzeit O(|V | + |E|).
Beispiel 3.9. Wir wollen die Arbeitsweise des obigen Algorithmus am Beispiel des Graphen aus
Abbildung 3.5 erläutern.
2
3
e2
e1
e3
e7
e9
e8
1
4
e12
e11
e6
e4
e10
e5
5
6
Abbildung 3.5: Beispiel für die Arbeitsweise des Algorithmus Eulerkreis.
1. Zunächst konstruiert der Algorithmus, beginnend bei Knoten 1, den folgenden Kreis:
1
e1
2
e2
3
e7
1
e8
4
e3
3
e9
6
e4
4
e10
6
e5
5
e6
1
2. Nachdem nun alle Kanten durch den Knoten 1 bereits durchlaufen sind, beginnt der Algorithmus bei Knoten 2, die restlichen Kanten zu durchlaufen.
2
e11
5
e12
2
37
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
1
2
Abbildung 3.6: Beispiel eines erzeugenden Baumes.
3. Insgesamt erhalten wir damit den folgenden Eulerkreis:
2
e2
3
e7
1
e8
4
e3
3
e9
6
e4
4
e10
6
e5
5
e6
1
e1
2
e11
5
e12
2
Wir kommen nun zur letzten Definition, bevor wir unseren Algorithmus formulieren können.
Definition 3.10. Sei G = (V, E) ein Graph.
(i) Ein erzeugender (spannender) Baum von G ist ein Teilgraph T = (V, E 0 ) von G, der
zusätzlich ein Baum ist.
(ii) Bei gegebener Gewichtsfunktion w auf den Kanten von G heißt
X
w(T ) =
w(i, j)
(i,j)∈E 0
das Gewicht von T .
(iii) Ein erzeugender Baum T von G heißt minimal erzeugender Baum (MST), wenn w(T ) ≤
w(T 0 ) für alle erzeugenden Bäume T 0 von G gilt.
Siehe Abbildung 3.6 für ein Beispiel.
Bei dem Problem Min Spanning Tree geht es also darum, zu einem gegebenen Graphen mit
Kantengewichten einen minimal erzeugenden Baum zu finden.
Optimierungsproblem 3.11 (Min Spanning Tree).
Eingabe:
Ausgabe:
Ein Graph G = (V, E) und eine Gewichtsfunktion w : E −→ N.
Ein minimal erzeugender Baum von G.
Dieses Problem kann in polynomieller Zeit mit Hilfe des Algorithmus von Kruskal gelöst werden,
siehe auch Abbildung 3.7 für ein Beispiel.
Algorithmus Kruskal
Eingabe: G = (V, E = {e1 , . . . , em }), w : E −→ N
1
2
3
4
5
6
7
8
9
10
11
12
13
for v ∈ V do
Sv := {v}
od
T := ∅
Sortiere E = {e1 , . . . , em } nach steigendem Gewicht.
for i = 1 to m do
Seien u, v ∈ V so, dass ei = {u, v}.
if u und v liegen in verschiedenen Mengen Su und Sv then
Ersetze Sv und Su durch Sv ∪ Su .
T := T ∪ {ei }
fi
od
return T
38
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
6
3
2
1
5
4
6
Abbildung 3.7: Die Zahlen symbolisieren die jeweiligen Kantengewichte.
Als Beispiel für die Arbeitsweise des Algorithmus Kruskal betrachten wir den Graphen aus
Abbildung 3.7.
Der Algorithmus Kruskal konstruiert in vier Schritten einen minimal spannenden Baum zum
Graphen aus Abbildung 3.7, siehe Abbildung 3.8.
2
1
1
2
4
1
2
5
4
1
Abbildung 3.8: Beispiel für die Arbeitsweise des Algorithmus Kruskal.
Den folgenden Satz beweisen wir in den Übungen.
Satz 3.12. Der obige Algorithmus findet für jeden kantengewichteten Graphen G = (V, E) einen
minimal spannenden Baum in O(|E| · log(|V |)) Schritten.
Wir kommen nun zur Angabe des ersten Algorithmus für das Problem des Handlungsreisenden. Beide der in diesem Abschnitt vorgestellten Algorithmen wurden von Christofides in [4]
veröffentlicht, ebenso geht die Analyse auf diesen Artikel zurück.
Wir bezeichnen im Folgenden für ein Tupel von Knoten (v1 , v2 , . . . ) in einem Graphen mit
(v1 , v2 , . . . ) − v das Tupel, das aus (v1 , v2 , . . . ) durch Löschen des Knotens v entsteht.
Algorithmus Min ∆TSP-1
Eingabe: Kn = (V, E), w : E −→ N
1
2
3
4
5
6
7
8
T := Kruskal(Kn , w)
Konstruiere einen Multigraphen K aus T durch Verdoppeln aller Kanten in T .
(v1 , v2 , . . . ) := EulerKreis(K)
for k = 1 to n do
v̄k := vk
(v1 , v2 , . . . ) := (v1 , v2 , . . . ) − v̄k
od
return R = v̄1 , v̄2 , . . . , v̄n
39
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
v1
v5
v2
v3
v8
v6
v4
v7
Abbildung 3.9: Schritt 1 des Algorithmus Min ∆TSP-1: Ein minimal spannender Baum wird
erzeugt.
v1
v5
v2
v3
v8
v6
v4
v7
Abbildung 3.10: Schritt 2 des Algorithmus Min ∆TSP-1, die Kanten werden verdoppelt.
In der for-Schleife wird also eine Rundreise R durch Abkürzungen (short cuts) konstruiert, d. h.,
wir beginnen beim ersten Knoten des Eulerkreises und gehen dann entlang des Kreises. Wenn
ein Knoten wiederholt besucht wird, so springen wir direkt zum nächsten unbesuchten, siehe
auch das folgende Beispiel.
Beispiel 3.13. Wir betrachten als Beispiel für die Arbeitsweise des obigen Algorithmus den
vollständigen Graphen auf acht Punkten mit Kantengewichten 1.
1. Im ersten Schritt bestimmt der Algorithmus Min ∆TSP-1 einen minimal spannenden
Baum, siehe Abbildung 3.9.
2. Im zweiten Schritt werden die Kanten verdoppelt, um zu garantieren, dass der so erhaltene
Graph eulersch ist, siehe Abbildung 3.10.
3. Im dritten Schritt wird der Eulerkreis
v1 , v5 , v2 , v3 , v2 , v4 , v2 , v6 , v7 , v6 , v8 , v6 , v2 , v5 , v1
erzeugt.
4. Schließlich
dung 3.11.
sehen
wir
die
durch
short-cuts
konstruierte
Rundreise
in
Abbil-
Satz 3.14. Der Algorithmus Min ∆TSP-1 hat die multiplikative Güte 2.
Beweis. Das Verdoppeln der Kanten im Algorithmus sorgt dafür, dass der so konstruierte Graph
v1
v5
v2
v3
v8
v6
v4
v7
Abbildung 3.11: Die gefundene Rundreise v1 , v5 , v2 , v3 , v4 , v6 , v7 , v8 , v1 .
40
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
Abbildung 3.12: Beispiel für ein perfektes Matching (fettgezeichnet).
tatsächlich eulersch ist, ein Eulerkreis also mittels des Algorithmus EulerKreis in polynomieller
Zeit gefunden wird. In der for-Schleife wird also tatsächlich eine Rundreise definiert.
Sei nun T der vom Algorithmus konstruierte Baum, K der aus T durch Verdoppelung der
Kanten entstandene Multigraph und R die gefundene Rundreise zur Eingabe I. Dann gilt w(T ) ≤
OPT(I), da eine Rundreise durch Weglassen einer Kante einen erzeugenden Baum ergibt. Weiter
gilt offensichtlich w(K) = 2w(T ) und da wegen der Dreiecksungleichung w(R) ≤ w(K), erhalten
wir insgesamt
w(R) ≤ w(K) ≤ 2w(T ) ≤ 2 OPT(I).
Schaut man sich die Analyse des obigen Algorithmus genauer an, so sieht man, dass das Verdoppeln der Kanten für die Güte 2 verantwortlich ist. Dieses sollte aber nur sicherstellen, dass
tatsächlich ein Eulerkreis existiert (durch Verdoppeln der Kanten hat dann jeder Knoten geraden Grad). Nun gibt es aber sicherlich in T schon Knoten, die geraden Grad haben, d. h., wir
müssen nur noch die Knoten mit ungeradem Grad betrachten. Wichtig dafür ist das folgende
Lemma.
Lemma 3.15. Sei G ein Graph. Dann ist die Anzahl der Knoten ungeraden Grades gerade.
Beweis. Es gilt
X
deg(v) = 2|E|.
v∈V
Also ist die Summe der Knotengrade gerade. Da die Summe der geraden Knotengerade offensichtlich gerade ist, gilt dies damit auch für die Summe der ungeraden Knotengrade. Also folgt
die Behauptung.
Da es nun geradzahlig viele Knoten ungeraden Grades in T gibt, können wir durch geschicktes
Hinzufügen von Kanten erreichen, dass jeder Knoten geraden Grad hat, es somit in diesem
erweiterten Graphen einen Eulerkreis gibt. Ziel dabei ist es natürlich, so eine Menge von Kanten
zu finden, dass die Summe der Gewichte möglichst klein ist.
Definition 3.16. Sei G = (V, E) ein Graph und M ⊆ E.
(i) M heißt perfektes Matching, falls V von M überdeckt wird, es also für jeden Knoten v ∈ V
eine Kante e ∈ M so gibt, dass v ∈ e.
P
(ii) Ein perfektes Matching M heißt minimal, wenn e∈M w(e) minimal ist.
Abbildung 3.12 zeigt ein Beispiel.
Perfekte Matchings existieren natürlich nicht immer, eine notwendige Bedingung ist zum Beispiel, dass die Knotenanzahl gerade ist. Allerdings ist diese Eigenschaft nicht hinreichend. Solch
eine liefert uns der Satz von Tutte, siehe zum Beispiel [7], Theorem 2.2.1.
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
v1
v5
v2
v3
41
v8
v6
v4
v7
Abbildung 3.13: Schritt 1 des Algorithmus Min ∆TSP-2.
Satz 3.17 (Tutte 1947). Ein Graph G = (V, E) hat genau dann ein perfektes Matching, wenn
für jede Teilmenge S ⊆ V gilt
q(G − S) ≤ |S|,
wobei q(G − S) die Anzahl der Zusammenhangskomponenten von G − S sei, die eine ungerade
Mächtigkeit haben.
In unserem speziellen Fall, d. h. in gewichteten vollständigen Graphen mit einer geraden Anzahl
von Knoten, existieren also immer perfekte Matchings (dies lässt sich natürlich auch sofort ohne
den Satz von Tutte einsehen). Weiter lassen sich perfekte Matchings mit minimalem Gewicht in
Graphen, die ein perfektes Matching garantieren, in Zeit O(|V |3 ) berechnen, siehe [29].
Wir können nun einen zweiten Algorithmus angeben, der eine sehr viel bessere Güte als der erste
garantiert.
Algorithmus Min ∆TSP-2
Eingabe: Kn , w (Christofides 1976)
1
2
3
4
5
6
7
T = (V (T ), E(T )) := Kruskal(Kn , w)
X := {v ∈ V (T ); deg(v) ungerade}
H := (X, {{u, v}; u, v ∈ X und u 6= v})
Bestimme ein perfektes Matching K mit minimalem Gewicht in H bezüglich der
Distanzen w(i, j), i, j ∈ X.
G := (V (T ), E(T ) ∪ K)
C := EulerKreis(G)
Bestimme eine Rundreise R mittels C wie im Algorithmus Min ∆TSP-1.
Wie schon beim Algorithmus Min ∆TSP-1 garantieren wir hier, dass in dem neuen Graphen
jeder Knoten geraden Grad hat, ein Eulerkreis also konstruiert werden kann. Der Rest des
Algorithmus läuft dann genauso wie Min ∆TSP-1, siehe auch das folgende Beispiel.
Beispiel 3.18. Wie schon für den Algorithmus Min ∆TSP-1 betrachten wir als Beispiel für die
Arbeitsweise den vollständigen Graphen auf acht Punkten mit Kantengewichten 1.
1. Im ersten Schritt bestimmt der Algorithmus Min ∆TSP-2 einen minimal spannenden
Baum, siehe Abbildung 3.13.
2. Im zweiten Schritt wird ein minimales perfektes Matching hinzugefügt, um zu garantieren,
dass der so erhaltene Graph eulersch ist, siehe Abbildung 3.14.
3. In Schritt 6 wird der Eulerkreis
v1 , v5 , v2 , v6 , v8 , v7 , v6 , v4 , v2 , , v3 , v1
konstruiert.
42
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
v1
v5
v2
v3
v8
v6
v4
v7
Abbildung 3.14: Schritt 2 des Algorithmus Min ∆TSP-2: Ein minimales perfektes Matching
wird hinzugefügt.
v1
v5
v2
v3
v8
v6
v4
v7
Abbildung 3.15: Die gefundene Rundreise v1 , v5 , v2 , v6 , v8 , v7 , v4 , v3 , v1 .
4. Schließlich
dung 3.15.
sehen
wir
die
durch
short-cuts
konstruierte
Rundreise
in
Abbil-
Satz 3.19. Der Algorithmus Min ∆TSP-2 hat die multiplikative Güte 3/2.
Beweis. Sei K das vom Algorithmus konstruierte Matching, T der Baum, C der konstruierte
Eulerkreis und R die gefundene Rundreise zur Eingabe I. Wie schon im Beweis von Satz 3.12
gilt w(T ) ≤ OPT(I).
Damit erhalten wir
w(R) ≤ w(C) = w(T ) + w(K) ≤ OPT(I) + w(K).
Wir zeigen nun w(K) ≤ 21 OPT(I), woraus die Behauptung folgt. Sei dazu das Tupel (i1 , . . . , i2m )
mit |X| = 2m die Reihenfolge, in der die Knoten von X in einer optimalen Rundreise δ von I
durchlaufen werden. Betrachte die Matchings
M1 = {{vi1 , vi2 }, {vi3 , vi4 }, . . . , {vi2m−1 , vi2m }}
M2 = {{vi2 , vi3 }, {vi4 , vi5 }, . . . , {vi2m , vi1 }}.
Wegen der Dreiecksungleichung gilt nun
OPT(I) = w(δ)
≥ w(vi1 , vi2 ) + w(vi2 , vi3 ) + · · · + w(vi2m−1 , vi2m ) + w(vi2m , vi1 )
= w(M1 ) + w(M2 )
≥ 2w(K).
Zum Abschluss dieses Abschnittes wollen wir noch zeigen, dass die Analyse des Algorithmus
bestmöglich war, d. h., es existieren Instanzen, die die bewiesene Güte auch annehmen.
Beispiel 3.20. Es gibt eine Instanz I von Min ∆TSP mit OPT(I) = n, für die der Algorithmus Min ∆TSP-2 eine Rundreise der Länge (n − 1) + b n2 c liefert, siehe Abbildung 3.16.
Wir haben zwar in der Einleitung das Problem Min ∆TSP damit motiviert, dass in der Realität
die Entfernungen zwischen Städten durch die euklidische Norm berechnet werden, bei dem Design unserer Algorithmen aber nur ausgenutzt, dass dann die Dreiecksungleichung gilt. Schränkt
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
43
Abbildung 3.16: Beispiel für den worst-case-Fall: Oben der Graph G (mit Kantengewichten 1);
in der Mitte das Optimum; unten die Lösung des Algorithmus.
man die Menge der Instanzen noch mehr ein und betrachtet tatsächlich Punkte im R2 und definiert das Gewicht einer Kante als euklidischen Abstand zwischen den Punkten, so kann man
dieses Problem, auch euklidisches Min Traveling Salesman genannt, beliebig gut approximieren. d. h., für alle ε > 0 finden wir einen polynomiellen Approximationsalgorithmus für
dieses Problem mit Güte 1 + ε. Solch eine Menge von Algorithmen werden wir in Kapitel 4 als
Approximationsschemata bezeichnen. Allerdings gibt es, wie in [8] gezeigt, kein vollständiges
Approximationsschema für das euklidische Min Traveling Salesman.
Für das oben behandelte, etwas allgemeinere Problem Min ∆TSP gibt es dagegen schon kein
Approximationsschema. Das bedeutet insbesondere, dass ein c > 1 so existiert, dass es keinen
polynomiellen Approximationsalgorithmus für Min ∆TSP mit Güte c gibt (jedenfalls unter der
Voraussetzung P 6= NP). Wir wollen diese Aussage aber an dieser Stelle nicht beweisen und
verweisen auf die Arbeit von Arora, Lund, Motwani, Sudan und Szegedy, siehe [2].
Noch schwieriger, jedenfalls im approximativen Sinne, verhält sich das zu Beginn dieses Abschnitts vorgestellte allgemeine Problem des Handlungsreisenden. Wie wir im nächsten Abschnitt
sehen werden, gibt es für dieses Problem kein Approximationsalgorithmus mit konstanter multiplikativer Güte.
3.3 Nichtapproximierbarkeit: Min Traveling Salesman
Unser erstes Nichtapproximierbarkeitsresultat für die multiplikative Güte eines Optimierungsproblems lernen wir nun kennen. Genauer werden wir zeigen: Gibt es einen Approximationsalgorithmus für Min Traveling Salesman mit konstanter (multiplikativer) Güte c, so kann man
das NP-vollständige Problem Hamilton Circuit in polynomieller Zeit entscheiden.
Das Problem Hamilton Circuit ist eng verknüpft mit dem Problem des Handlungsreisenden.
Hier wird gefragt, ob ein beliebiger Graph hamiltonsch ist, d. h., ob eine Rundreise in diesem
Graphen existiert.
Entscheidungsproblem 3.21 (Hamilton Circuit).
Eingabe:
Frage:
Ein Graph G = (V, E).
Ist G hamiltonsch?
Dieses Entscheidungsproblem ist, wie wir in Satz 3.23 zeigen werden, NP-vollständig. Der Beweis
des nächsten Satzes zeigt aber, dass es einen polynomiellen Algorithmus für Hamilton Circuit
gibt, wenn sich das allgemeine Min Traveling Salesman Problem approximieren lässt.
44
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
Satz 3.22 (Sahni und Gonzales [38]). Sei c > 1. Unter der Voraussetzung P 6= NP gibt es für
Min Traveling Salesman keinen polynomiellen Algorithmus mit Güte c.
Beweis. Angenommen, es existiert ein polynomieller Approximationsalgorithmus A für Min
Traveling Salesman mit Güte c > 1. Wir zeigen, dass es dann einen polynomiellen Algorithmus gibt, der das Problem Hamilton Circuit in polynomieller Zeit löst. Da dieses Problem
aber NP-vollständig ist, folgt P = NP, ein Widerspruch.
Der folgende Algorithmus erwartet die Eingabe eines Graphen G = ({1, . . . , n}, E) und löst das
Hamiltonproblem.
Algorithmus HC
Eingabe: G = ({1, . . . , n}, E)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for i = 1 to n − 1 do
for j = 2 to n do
if {i, j} ∈ E then
w({i, j}) = 1
else
w({i, j}) = cn
fi
od
od
Berechne mit A eine Rundreise R für den oben definierten Graphen.
if w(R) ≤ cn then
return wahr
(Es existiert ein Hamiltonkreis)
else
return falsch
(Es existiert kein Hamiltonkreis)
fi
Was genau tut der Algorithmus? Zunächst wird aus dem Graphen G der vollständige Graph auf
n Knoten konstruiert, wobei die Kanten, die vorher nicht enthalten waren, eine Länge von cn
zugewiesen bekommen, alle anderen Kanten eine Länge von 1.
Ist der Ursprungsgraph G hamiltonsch, so hat eine optimale Min Traveling Salesman-Tour
eine Länge von n. Unser Approximationsalgorithmus mit Güte c für das Min Traveling Salesman Problem findet dann eine Rundreise der Länge höchstens cn. Der obige Algorithmus
entscheidet dann korrekt, dass G hamiltonsch ist.
Entscheidet sich umgekehrt der obige Algorithmus HC dafür, dass G hamiltonsch ist, so findet A
eine Min Traveling Salesman Tour der Länge höchstens cn. Diese Tour enthält dann keine
Kante mit Gewicht cn und damit nur Kanten mit Gewicht 1. Dies sind aber nur Kanten aus dem
Ursprungsgraphen G, in G selbst gibt es also schon eine Rundreise. Damit ist G also tatsächlich
hamiltonsch.
Mit einer ganz analogen Methode kann man sogar zeigen, dass es für jede in polynomieller Zeit
berechenbare Funktion α keinen Approximationsalgorithmus A mit Güte δA = α für das Problem
Min Traveling Salesman gibt.
Es bleibt nur noch zu zeigen, dass das Problem Hamilton Circuit tatsächlich NP-vollständig
ist.
Satz 3.23 (Karp [27]). Das Problem Hamilton Circuit ist NP-vollständig.
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
1
11
2
12
3
13
4
14
5
15
6
16
45
Abbildung 3.17: Überdeckungstester für eine Kante e = {u, v}.
Beweis. Da von einer gegebenen Permutation π : {1, . . . , n} −→ {1, . . . , n} für die Knoten eines
Graphen G = ({1, . . . , n}, E) in polynomieller Zeit entschieden werden kann, ob π eine Rundreise
definiert, folgt Hamilton Circuit ∈ NP.
Wir zeigen den Rest der Behauptung, indem wir Min Vertex Cover auf Hamilton Circuit
reduzieren.
Sei also G = (V, E) ein Graph und K ∈ N eine natürliche Zahl. Wir konstruieren aus der Instanz
(G, K) für Vertex Cover nun eine Instanz von Hamilton Circuit, also einen Graphen
G0 = (V 0 , E 0 ) wie folgt:
G0 hat K Knoten a1 , . . . , aK , die genutzt werden, um K Knoten aus G für das Vertex Cover
auszuwählen. Weiter enthält G0 für jede Kante e = {u, v} ∈ E eine Komponente, den sogenannten Überdeckungstester“, der garantieren soll, dass mindestens ein Endpunkt von e im Vertex
”
Cover liegt. Genauer ist
Ve0 := {(u, e, i); 1 ≤ i ≤ 6} ∪ {(v, e, i); 1 ≤ i ≤ 6},
Ee0 := {{(u, e, i), (u, e, i + 1)}; 1 ≤ i ≤ 5} ∪
{{(v, e, i), (v, e, i + 1)}; 1 ≤ i ≤ 5} ∪
{{(u, e, i + 2), (v, e, i)}; i ∈ {1, 4}} ∪
{{(v, e, i + 2), (u, e, i)}; i ∈ {1, 4}},
siehe Abbildung 3.17.
Wir werden G0 so konstruieren, dass die einzigen Knoten solch einer Komponente, die zu weiteren
Knoten verbunden sind, die Knoten (u, e, 1), (u, e, 6), (v, e, 1) und (v, e, 6) sein werden. Daraus
folgt, wie man leicht sieht, dass ein Hamiltonkreis in G0 jede so definierte Komponente in genau
einem der unter Abbildung 3.18 dargestellten Fälle durchlaufen muss.
Wir setzen nun die einzelnen Komponenten wie folgt zusammen: Für jeden Knoten v ∈ V seien
deg(v)
e1v , e2v , . . . , ev
die Kanten aus E, die durch v gehen. Alle Komponenten, die aus diesen Kanten
46
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
1
11
1
11
1
11
6
16
6
16
6
16
(a)
(b)
(c)
Abbildung 3.18: Die drei Möglichkeiten, wie ein Hamiltonkreis die Komponenten durchlaufen
kann (fett gezeichnet).
1
2
4
3
Abbildung 3.19: Zusammensetzen aller Komponenten zu Kanten, die alle einen gemeinsamen
Endknoten habe.
wie oben konstruiert wurden, werden nun mittels der Kanten
Ev0 := {(v, eiv , 6), (v, ei+1
v , 1)}; 1 ≤ i < deg(v)
miteinander verbunden, siehe Abbildung 3.19.
Schließlich verbinden wir noch den ersten und letzten Knoten der Pfade aus Abbildung 3.19 mit
allen der Knoten a1 , . . . , aK , d. h., wir fügen noch die Kanten
E 00 := {ai , (v, e1v , 1)}; 1 ≤ i ≤ K ∪ {ai , (v, edeg(v)
, 6)}; 1 ≤ i ≤ K
v
zu G0 hinzu. Insgesamt ist G0 = (V 0 , E 0 ) also von der Form
!
V 0 := {a1 , . . . , aK } ∪
[
Ve0
,
[
Ev0
e∈E
!
E
0
00
:= E ∪
[
e∈E
Ee0
!
∪
.
v∈V
Wir zeigen nun, dass G0 genau dann hamiltonsch ist, wenn G ein Vertex Cover der Größe
höchstens K hat.
47
Kapitel 3: Algorithmen mit multiplikativer Güte: Prozessoptimierung
=⇒“ Sei also G0 hamiltonsch. Seien weiter die Knoten von V 0 = {v10 , . . . , vn0 } so durchnumme”
0 } ∈ E für alle 1 ≤ i < n, das n-Tupel (v , . . . , v ) also einen
riert, dass {vn0 , v10 } ∈ E und {vi0 , vi+1
1
n
Hamiltonkreis in G0 bildet.
Wir betrachten nun die K Teilpfade C1 , . . . , CK , die jeweils einen Anfangs- und Endknoten
in {a1 , . . . , aK } haben und zwischendurch keinen dieser Knoten mehr besucht (da die Knoten
aus {a1 , . . . , aK } untereinander nicht verbunden sind, kann der Kreis C tatsächlich so zerlegt
werden).
Für jeden Teilpfad Ci gibt es nun dank der Konstruktion von G0 genau einen Knoten vi ∈ V
so, dass Ci genau die Komponenten durchläuft, die zu Kanten mit Endknoten vi assoziiert sind,
siehe die drei Fälle in Abbildung 3.17. Die Knoten {v1 , . . . , vK } bilden nun, da ja der Kreis C
alle konstruierten Komponenten durchlaufen muss, ein Vertex Cover.
⇐=“ Sei umgekehrt V ∗ = {v1 , . . . , vK } ein Vertex Cover von G. Der Hamiltonkreis in G0
”
durchläuft nun die folgenden Kanten aus E 0 : Für jede Kante e = {u, v} ∈ E wähle die Kanten
aus der zu e assoziierten Komponente, die in der Abbildung 3.17 (a), (b) bzw. (c) fett gezeichnet
sind, abhängig davon, ob V ∗ ∩ {u, v} aus den Knoten {u}, {u, v} bzw. {v} besteht (genau einer
dieser drei Fälle gilt, da V ∗ ein Vertex Cover ist). Weiter wählen wir
1. für alle 1 ≤ i ≤ K die Kanten aus Ev0 i ,
2. für alle 1 ≤ i ≤ K die Kante {ai , (vi , e1vi , 1)},
deg(vi )
3. für alle 1 ≤ i < K die Kante {ai+1 , (vi , evi
4. die Kante
In
den
bildet.
, 6)}, und schließlich
deg(v )
{a1 , (vK , evK K , 6)}.
Übungen
zeigen
wir,
dass
dies
tatsächlich
einen
Hamiltonkreis
4 Approximationsschemata
Wir wissen bereits, dass sich NP-schwere Probleme nicht in polynomieller Zeit lösen lassen
(jedenfalls unter der Voraussetzung P 6= NP). Wie wir in Satz 3.22 gesehen haben, gibt es sogar
Probleme, für die sich zu jeder vorgegebenen Güte kein Approximationsalgorithmus angeben
lässt. Wir wollen uns aber in diesem Kapitel mit den etwas leichteren“ NP-schweren Problemen
”
beschäftigen. Genauer behandeln wir nun Probleme, die sich beliebig gut approximieren lassen.
Formal heißt dies:
Definition 4.1. Ein Approximationsschema für ein Optimierungsproblem Π ist eine Familie
(Aε )ε>0 von polynomiellen Approximationsalgorithmen für Π so, dass für alle ε > 0 der Algorithmus Aε eine Approximationsgüte von
1 − ε bei Maximierungsproblemen
bzw.
1 + ε bei Minimierungsproblemen
hat (englisch: Polynomial Time Approximation Scheme (PTAS)).
Probleme, für die es ein Approximationsschema gibt, lassen sich also beliebig gut approximieren.
Das Problem ist nur, dass sich die Laufzeiten der Algorithmen meistens erhöhen, je näher man
dem Optimum kommen möchte. Beispielsweise könnte es durchaus ein Approximationsschema
(Aε )ε>0 für ein Problem so geben, dass für alle ε > 0 der Algorithmus Aε eine Laufzeit von
−1
O(|I|ε ) für jede Eingabe I des Problems hat. Dies ist natürlich weiterhin polynomiell in der
Eingabelänge |I|, da ε und damit auch 1ε eine Konstante sind, aber für sehr kleine ε bei weitem
nicht mehr effizient. Es gibt daher auch den Begriff der sogenannten vollständigen Approximationsschemata, für die die Laufzeiten auch in 1/ε polynomiell beschränkt sind.
Zunächst aber wollen wir einige Approximationsschemata, drei einfache und ein schwieriges,
für uns schon bekannte Probleme konstruieren und analysieren. Die Idee für die ersten beiden
Schemata ist einfach erklärt. Man löst zunächst eine in Abhängigkeit von ε gewählte Teilinstanz
optimal und wendet auf den Rest einen Approximationsalgorithmus an.
Weitere interessante Approximationsschemata finden sich in [21] (für das Problem Min Job
Shop Scheduling) und [19] (für Max Bisection in planaren Graphen und Kreisgraphen).
4.1 Min Job Scheduling mit konstanter Maschinenanzahl
Wir betrachten wieder das übliche Problem, allerdings setzen wir voraus, dass die Anzahl der
Maschinen konstant, d. h. nicht Teil der Eingabe ist. In Abschnitt 4.3 lernen wir dann auch ein
Approximationsschema für den nichtkonstanten Fall kennen.
Sei also im Folgenden m ∈ N die Anzahl der Maschinen.
Optimierungsproblem 4.2 (Min m-Machine Job Scheduling).
Eingabe:
Ausgabe:
48
n ≥ m Jobs J1 , . . . , Jn mit Laufzeiten p1 ≥ · · · ≥ pn .
Ein Schedule auf m Maschinen mit minimalen Makespan.
49
Kapitel 4: Approximationsschemata
Das Problem Min 1-Maschine Job Scheduling ist offensichtlich trivial. Dagegen liegt schon
im Fall m = 2 ein NP-schweres Problem vor.
Die Idee für die Konstruktion eines Approximationsschemas für dieses Problem ist sehr einfach.
Wir erzeugen zunächst ein optimales Schedule für die ersten k Jobs und fügen die übrigen Jobs
mit dem Algorithmus LPT (siehe Satz 1.3) hinzu. Dabei wählen wir später k so in Abhängigkeit
von ε, dass der Algorithmus Ak eine Approximationsgüte von 1 + ε hat.
Algorithmus Ak
Eingabe: J1 , . . . , Jn ; p1 , . . . , pn
1
2
Finde einen optimalen Schedule für die ersten k Jobs J1 , . . . , Jk .
Wende den Algorithmus LPT auf die restlichen Jobs Jk+1 , . . . , Jn an.
Zunächst überlegen wir uns, was für eine Laufzeit der Algorithmus Ak , k ∈ N, hat.
Satz 4.3. Die Laufzeit von Ak ist O(mk + n log n) und damit polynomiell in der Eingabelänge.
Beweis. Um einen optimalen Schedule für die ersten k Jobs zu finden, benötigen wir im schlimmsten Fall O(mk ) Schritte (wir probieren alle Möglichkeiten aus). Weiter benötigt der Algorithmus LPT höchstens n log n Schritte.
Satz 4.4. Der Algorithmus Ak hat eine Approximationsgüte von 1 +
m−1
k .
Beweis. Sei Jj der Job, der als letzter fertig wird, C der erzeugte Makespan und OPT der
Makespan eines optimalen Schedules. Wir unterscheiden die folgenden beiden Fälle:
Fall 1: l ≤ k, d. h., Jl ist unter den optimal verteilten Jobs. Dann gilt C = OPT.
Fall 2: Im Beweis von Satz 1.3 haben wir
OPT ≥
n
n
1 X
1 X
1
pi und C ≤
pi + 1 −
pl
m
m
m
i=1
i=1
gezeigt. Es folgt also
C ≤ OPT +
m−1
pl .
m
Andererseits gilt
OPT ≥
und damit pl ≤
m
k
n
k
i=1
i=1
1 X
1 X
k
pi ≥
pl = pl
m
m
m
OPT. Insgesamt erhalten wir
C ≤ OPT +
m−1
m−1m
pl = OPT +
OPT =
m
m k
m−1
1+
OPT .
k
Wir definieren nun das Approximationsschema. Für jedes ε > 0 sei
lm − 1m
kε :=
ε
und Aε := Akε . Dann hat der Approximationsalgorithmus Aε eine Güte von
1+
m−1
m−1
m−1
=1+
≤1+
= 1 + ε.
−1
kε
d(m − 1)ε e
(m − 1)ε−1
Also ist (Aε )ε>0 ein Approximationsschema für das Problem Min Job Scheduling mit konstanter Anzahl von Maschinen.
Wir formulieren dieses Ergebnis im folgenden Satz.
50
Kapitel 4: Approximationsschemata
Satz 4.5. Für jede konstante Anzahl von Maschinen m existiert ein polynomielles Approximationsschema für Min m-Machine Job Scheduling.
Offensichtlich ist dies kein praktischer Algorithmus, da die Laufzeit exponentiell in ε−1 und m
ist. Zum Beispiel für m = 10 und ε = 0.1 wäre k ≥ 90, Schritt 1 benötigt somit O(1090 ) Schritte.
Weitere Algorithmen für das hier behandelte Problem mit konstanter Maschinenanzahl finden
sich bei Graham [12] und Sahni [37].
4.2 Max Knapsack
Das Rucksackproblem haben wir schon im zweiten Kapitel behandelt und gezeigt, dass es NPschwer ist. Wir stellen das Problem noch einmal kurz vor.
Optimierungsproblem 4.6 (Max Knapsack).
Eingabe:
Ausgabe:
Zahlen s1 , . . . , sn , p1 , . . . , pn ∈ N und B P
∈ N.
P
Eine Teilmenge I ⊆ {1, . . . , n} so, dass i∈I si ≤ B und i∈I pi maximal ist.
Im Folgenden wollen wir ein Approximationsschema für dieses Problem angeben, das auf einer
ähnlichen Idee beruht wie schon das Approximationsschema für das Problem Min Job Scheduling. Die Idee dazu stammt von Sahni, siehe [36]. Dabei wählen wir zu einem festen k ∈ N
eine Teilmenge I ⊆ {1, . . . , n} der Größe k aus, deren Inhalt dann schon in den Rucksack gelegt
wird, und packen die restlichen Gegenstände mit Hilfe eines Approximationsalgorithmus. Damit
erhalten wir also einen ganzen Satz von Packungen (für jede k-elementige Teilmenge eine) und
entscheiden uns zum Schluss für die mit dem höchsten Profit.
Zunächst aber die Angabe eines Approximationsalgorithmus für das Rucksackproblem:
Algorithmus GA
Eingabe: s1 , . . . , sn ; p1 , . . . , pn ; B
1
Sortiere die Elemente so, dass
2
I 0 := ∅
for i =
P1 to n do
if
j∈I 0 sj + si ≤ B then
0
I := I 0 ∪ {i}
fi
od
3
4
5
6
7
p1
pn
≥ ··· ≥
.
s1
sn
Der Algorithmus GA hat zwar, wie man sofort sieht, eine Laufzeit von O(n log n) (das Sortieren
von
n
Zahlen
benötigt
O(n log n)
Schritte,
die
for-Schleife
O(n)
Schritte), ist also polynomiell, die Approximationsgüte ist allerdings beliebig
schlecht, wie das nächste Beispiel zeigt.
Beispiel 4.7. Sei B ∈ N eine natürliche Zahl, s1 = 1, s2 = B, p1 = 1 und p2 = B. Dann liefert
der Algorithmus die Packung I 0 = {1} und damit den Profit 1, optimal ist aber die Packung 2
mit Profit B.
Wir benötigen daher eine modifizierte Version des obigen Algorithmus.
51
Kapitel 4: Approximationsschemata
Algorithmus MGA
Eingabe: s1 , . . . , sn ; p1 , . . . , pn ; B
1
2
3
Berechne Lösung I10 nach Algorithmus GA.
Berechne Lösung I20 = {j} mit pj = maxi∈{1,...,n} pi .
Wähle Lösung I 0 ∈ {I10 , I20 } mit maximalem Gewinn.
Satz 4.8. Der Algorithmus MGA hat eine Approximationsgüte von 12 .
Beweis. Übungsaufgabe.
Wir geben nun unser Approximationsschema an. Für alle k ∈ N sei
Algorithmus Ak
Eingabe: s1 , . . . , sn ; p1 , . . . , pn ; B
1
2
3
Wähle eine Teilmenge S mit höchstens k Elementen, die am Anfang im Rucksack
liegen.
Wende GA auf die übrigen Elemente an.
Bestimme aus den so erhaltenen Teilmengen eine Menge mit maximalem Profit.
Satz 4.9. Für alle k ∈ N hat Ak eine Güte von 1 −
1
k
und läuft in O(nk+1 ) Schritten.
Beweis. Der Algorithmus GA hat eine Laufzeit von O(n log n). Wir müssen uns also nur noch
überlegen, wie viele Teilmengen von {1, . . . , n} der Größe höchstens k existieren. Offensichtlich
ist die Anzahl der Teilmengen der Größe i ≤ n einer Menge mit n Elementen gerade ni ≤
(n − i + 1) · (n − i + 2) · . . . · n ≤ ni . Wir erhalten also für unsere gesuchte Anzahl
k k
X
X
n
n!
=
≤ O(nk ).
i
(n − i)!i!
i=1
i=1
Die Laufzeit von Ak ist also beschränkt durch O(nk · n log n) = O(nk+1 ).
Mit X ⊆ {1, . . . , n} bezeichnen wir eine optimale Lösung des Rucksackproblems. Ist |X| ≤ k, so
findet Ak die optimale Lösung.
Sei also im Folgenden x = |X| > k. Sei weiter Y = {v1 , . . . , vk } ⊆ X die Menge der Elemente
mit größtem Gewinn in X und Z = X \ Y = {vk+1 , . . . , vx }. O.B.d.A. gelte
pvk+1
pv
≥ ··· ≥ x.
(4.1)
svk+1
svx
Der Algorithmus Ak wählt irgendwann Y als k-elementige Menge aus und fügt dann mit Hilfe
des Algorithmus GA weitere Elemente hinzu. Sei G ⊆ {1, . . . , n} die Menge der vom Algorithmus GA gewählten Elemente (ohne die Elemente aus Y ) und m der kleinste Index eines Elements aus Z, das durch GA nicht in den Rucksack gelegt wird. Dann sind also vk+1 , . . . , vm−1
im Rucksack.
P Das Element
P vm wurde nicht gepackt, weil die restliche Kapazität des Rucksacks
E := B −
i∈Y si +
i∈G si < svm war.
Es gilt somit
∆ :=
X
i∈G
X
si −
si =
i∈X∩G
=B−E−
m−1
X
i=1
svi .
X
i∈G
si −
m−1
X
i=k+1
s vi =
X
i∈G
si +
X
i∈Y
si −
m−1
X
i=1
svi
52
Kapitel 4: Approximationsschemata
Die Elemente in G \ X haben alle eine Gewinndichte von mindestens pvm /svm , da sie vor vm
durch GA gewählt worden sind. Da auch die Elemente von G ∩ X eine Gewinndichte von
mindestens psvvm haben, folgt
m
X
profit(G) :=
pi
i∈G
X
pi
pi
−
si ·
si
si
i∈G∩X
i∈G
i∈G∩X
!
X
X
X
pvm
≥
pi +
si −
si
svm
X
=
pi +
i∈G∩X
m−1
X
=
m−1
X
si ·
i∈G
pvi + ∆
i=k+1
und damit
X
p vm
,
svm
pvi ≤ profit(G) − ∆
i=k+1
Für alle m ≤ i ≤ x gilt
pvi
svi
≤
pvm
svm .
x
X
i∈G∩X
pvm
.
svm
(4.2)
Wir erhalten also
x
x
X
pvi
pv X
svi ≤ m
svi .
svi
svm
p vi =
i=m
i=m
Da
B≥
x
X
svi =
i=1
i=m
m−1
X
svi +
i=1
x
X
svi ,
i=m
folgt
x
X
i=m
x
pv
pv X
svi ≤ m
pvi ≤ m
svm
svm
B−
m−1
X
i=m
!
svi
.
(4.3)
i=1
Insgesamt erhalten wir mit (4.2) und (4.3)
profit(X) =
k
X
i=1
pvi +
m−1
X
i=k+1
p vi +
x
X
pvi
i=m
pvm
≤ profit(Y ) + profit(G) − ∆
+
svm
pv
≤ profit(Y ∪ G) + E m
svm
< profit(Y ∪ G) + pvm ,
B−
m−1
X
i=1
!
svi
pvm
svm
wobei bei der letzten Ungleichung E < svm ausgenutzt wird.
Da die Lösung, die Ak für Y generiert, die Menge Y ∪G enthält, folgt aus der letzten Ungleichung
OPT(I) < Ak (I) + pvm .
Es gibt mindestens k Elemente in X, die höhere Gewinne als pvm haben (die Elemente aus Y ).
Also folgt
profit(X)
OPT(I)
pvm ≤
=
.
k
k
53
Kapitel 4: Approximationsschemata
Insgesamt erhalten wir
OPT(I) < Ak (I) + pvm ≤ Ak (I) +
und damit
OPT(I)
Ak (I) ≥ OPT(I) −
=
k
OPT(I)
,
k
1
OPT(I).
1−
k
Um ein PTAS zu bekommen, setze man Aε als den Algorithmus Ak mit k = d 1ε e. Dann gilt
1−
1
1
1
= 1 − −1 ≥ 1 − −1 = 1 − ε,
k
dε e
ε
also hat der Algorithmus Aε eine Güte von 1 − ε. Wir haben also:
Satz 4.10. Es existiert ein Approximationsschema (Aε )ε>0 für das Problem Max Knapsack,
−1
wobei Aε in Zeit nO(ε ) läuft.
4.3 Min Job Scheduling
Wir kommen nun, wie versprochen, zur Konstruktion eines Approximationsschemas für das
Problem Min Job Scheduling, wobei wir diesmal nicht wie in Abschnitt 4.1 voraussetzen, dass
die Anzahl der Maschinen konstant ist. Die Ergebnisse dieses Abschnittes gehen auf Hochbaum
und Shmoys, siehe [18], zurück.
Optimierungsproblem 4.11 (Min Job Scheduling).
Eingabe:
Ausgabe:
m Maschinen M1 , . . . , Mm und n Jobs J1 , . . . , Jn mit Laufzeiten p1 , . . . , pn ∈ N.
Ein Schedule mit minimalen Makespan.
Gesucht ist also für alle ε > 0 ein Approximationsalgorithmus Aε , der eine Güte von (1 + ε)
garantiert. Um diesen zu finden, geben wir zunächst für alle T ∈ N einen Algorithmus AT,ε an,
der zu jeder Eingabe J = (m, p1 , . . . , pn ) des Problems Min Job Scheduling ein Scheduling
mit Makespan höchstens (1 + ε) · T findet, wenn T ≥ OPT(J), wobei OPT(J) den Makespan
eines optimalen Schedules für J bezeichne. Ist umgekehrt T < OPT(J), so wird der Algorithmus
AT,ε im Allgemeinen keinen Schedule finden, sondern error ausgeben.
Wie konstruiert man nun daraus den gesuchten Algorithmus Aε ? Wenn wir den optimalen Makespan T der Instanz J kennen würden, so könnten wir einfach Aε := AT,ε setzen. Allerdings ist
dasP
Finden dieses Makespans ebenfalls schwer, es gibt aber eine andere Lösung: Offensichtlich
ist ni=1 pi eine obere Schranke für den optimalen Makespan. Damit können wir mittels binärer
Suche in polynomieller Zeit das Finden eines optimalen Makespans simulieren. Genauer hat Aε
die folgende Gestalt:
Algorithmus Aε
Eingabe: J = (m, p1 , . . . , pn )
P
1
O = ni=1 pi
2
U =0
3
T = dO/2e
P
4
k = dlog ( ni=1 pi )e
5
for i = 1 to k do
6
if AT,ε (J) = error then
7
U =T
54
8
9
10
11
12
13
14
Kapitel 4: Approximationsschemata
T = d(O − U )/2e
else
O=T
T = d(O − U )/2e
fi
od
return AT,ε (J)
P
Der Algorithmus Aε ruft also dlog ( ni=1 pi )e-mal einen Algorithmus der Form AT,ε auf und hat
damit polynomielle Laufzeit, wenn dies für die Algorithmen AT,ε gilt.
Wir müssen uns jetzt nur noch um AT,ε kümmern. Dazu unterteilen wir die Jobs einer Eingabe
J = (m, p1 , . . . , p2 ) in große und kleine Jobs. Seien also
J1 := {i ≤ n; pi > ε · T }
und
J2 := {i ≤ n; pi ≤ ε · T }.
Die Jobs aus J1 werden nun geeignet skaliert, d. h., wir setzen für alle i ∈ J1
l p m
i
p0i = 2
.
ε T
Sollte es für die Jobs aus J1 einen Schedule mit Makespan höchstens T geben, so hat der Schedule
für die Jobs mit Laufzeiten εp2iT , i ∈ J1 , einen Makespan von höchstens ε2TT = ε12 . Durch das
Runden nach oben kann sich der Makespan höchstens um einen Faktor von (1+ε) erhöhen. (Man
beachte hierbei, dass wir nur große Jobs betrachten, der relative Rundungsfehler (p0i − εp2iT )/ εp2iT
wegen pi > εT also höchstens ε ist.) Da wir weiter annehmen, dass alle betrachteten Zahlen
natürlich sind, kann dieser Makespan also höchstens den Wert
1
0
T := (1 + ε) 2
ε
annehmen.
Wie können wir aber solch einen Schedule in polynomieller Zeit finden? Zunächst erkennt man,
dass die skalierten Jobs, da die Laufzeiten dieser durch
l p m 1
i
≤ 2
ε2 T
ε
beschränkt sind, zusammen mit der Anzahl m der Maschinen und dem Wert
1
b = (1 + ε) 2
ε
eine Eingabe der folgenden Variante des Problems Min Bin Packing bilden:
Optimierungsproblem 4.12 (Min Bin Packing mit eingeschränkten Gewichten).
Eingabe:
Ausgabe:
Eine Menge von n Objekten mit Gewichten w1 , . . . , wn ≤ k, sowie zwei natürliche
Zahlen m und b.
Eine Verteilung der Objekte auf m Bins, die jeweils eine Kapazität von b haben,
wenn eine solche Verteilung existiert, error, wenn keine solche Verteilung existiert.
Dieses Problem ist tatsächlich (für konstantes b) in polynomieller Zeit optimal zu lösen, wie das
nächste Lemma zeigt.
Lemma 4.13. Es gibt einen optimalen Algorithmus mit Laufzeit O((bn)k ) für das Problem Min
Bin Packing mit eingeschränkten Gewichten.
55
Kapitel 4: Approximationsschemata
Beweis. Für den Beweis konstruieren wir einen Algorithmus, der auf der Idee der dynamischen
Programmierung beruht, d. h., wir unterteilen eine Eingabe in Teilprobleme, die einfach zu lösen
sind, und setzen diese Lösungen zu einer Gesamtlösung der Eingabe zusammen (Divide-andConquer).
Sei dazu für alle n1 , . . . , nk ∈ {0, . . . , n}
f (n1 , . . . , nk )
die minimale Anzahl von Kisten mit Kapazität b, die benötigt wird, um eine Menge
{p11 , . . . , pn1 1 , . . . , p1k , . . . , pnk k } von Objekten mit Gewichten w(pji ) = i packen zu können.
Wir müssen also, um das Problem zu lösen, für jedes k-Tupel (n1 , . . . , nk ) ∈ {0, . . . , n}k den
Wert f (n1 , . . . , nk ) berechnen und erhalten so eine Tabelle der Größe (n + 1)k . Aus den Tabelleneinträgen kann dann leicht ermittelt werden, ob eine Lösung existiert, d. h. weniger als m
Kisten reichen, wobei die Verteilung der Objekte leicht aus der Tabelle rekonstruiert werden
kann.
Wir beobachten weiter, dass mit
Q := {(q1 , . . . , qk ) ∈ {0, . . . , n}k ; f (q1 , . . . , qk ) = 1}
gilt:
f (n1 , . . . , nk ) = 1 + min f (n1 − q1 , . . . , nk − qk ).
q∈Q
Da die Kisten eine Kapazität von b haben, ist jede Komponente qi eines k-Tupels (q1 , . . . , qk ) ∈ Q
beschränkt
durch
b,
d. h.
qi
∈
{0, . . . , b}.
Wir
erhalten
also
k
k
|Q| ≤ (b + 1) . Damit kann also jeder Tabelleneintrag in O(b ) Schritten berechnet werden. Da insgesamt (n + 1)k Tabelleneinträge erzeugt werden, folgt die behauptete Laufzeit.
Nachdem wir nun gesehen haben, wie die großen Jobs verteilt werden, müssen wir nur noch die
kleinen Jobs hinzufügen. Dies geschieht einfach mit dem in Abschnitt 1.1 vorgestellten Algorithmus List Schedule, d. h., sobald eine Maschine frei wird, wird irgendeiner der noch nicht
verteilten Jobs auf diese platziert.
Unser gesuchter Algorithmus ist also von der folgenden Form:
Algorithmus AT,ε
Eingabe: J = (m, p1 , . . . , pn )
1
2
3
4
5
6
7
8
9
J1 = {i ≤ n; pi > ε · T }
J2 = {i ≤ n; pi ≤ ε · T }
for i ∈ J1 do
p0i = εp2iT
od T 0 = (1 + ε) ε12
Konstruiere einen Schedule für m und (p0i )i∈J1 mit Makespan höchstens T 0 mit Hilfe
des Algorithmus aus Lemma 4.13, wenn solch ein Schedule existiert, ansonsten gib
error aus und stoppe.
Verteile die Jobs aus J2 mittels des Algorithmus List Schedule.
Gib den so gefundenen Schedule aus.
Satz 4.14.
2
(i) Der Algorithmus AT,ε hat eine Laufzeit von O nd1/ε e .
56
Kapitel 4: Approximationsschemata
(ii) Sei J = (m, p1 , . . . , pn ) eine Eingabe von Min Job Scheduling und T der Makespan eines
optimalen Schedules von J. Dann konstruiert AT,ε einen Schedule, für dessen Makespan
AT,ε (J) gilt:
AT,ε (J) ≤ (1 + ε) · T.
Beweis. (i) Der dominierende Teil ist das Lösen der Instanz des Problems Min Bin Packing
mit eingeschränkten Gewichten. In Lemma 4.13 haben wir gesehen, dass die Laufzeit
durch O((bn)k ) beschränkt ist. Dabei ist n die Anzahl der Objekte (hier die Anzahl der großen
Jobs), b die
Kapazität
der Bins bzw. Kisten (hier der angenommene Makespan der skalierten
Jobs T 0 = (1 + ε) ε12 ) und schließlich k eine obere Schranke fürdie Gewichte
der Objekte (hier
2
eine obere Schranke für die Laufzeiten der skalierten Jobs, also 1/ε ). Damit ergibt sich dann
die behauptete Laufzeit.
(ii) Dank der Herleitung auf Seite 54 wissen wir bereits, dass der Algorithmus nicht error
ausgibt, sondern tatsächlich einen Schedule konstruiert.
Wir betrachten zunächst nur die großen Jobs. Sei also j ≤ m und seien j1 , . . . , jP
t diejenigen Jobs
aus J1 , die vom Algorithmus auf die j-te Maschine verteilt wurden. Dann gilt ti=1 p0ji ≤ T 0 :=
(1 + ε) ε12 . Wir erhalten damit
t
X
pji
≤ ε2 T ·
i=1
2
t
X
p0ji
i=1
0
≤ ε T ·T
1
= ε2 T · (1 + ε) 2
ε
≤ (1 + ε)T,
für die großen Jobs gilt die Behauptung also.
Nach dem Verteilen der kleinen Jobs können zwei Fälle auftreten.
Fall 1: Der Makespan wird nicht erhöht. Dann folgt die Behauptung sofort.
Fall 2: Der Makespan wird erhöht. In diesem Fall wissen wir, dass der Lastunterschied zwischen
der Maschine, die am längsten läuft, und der, die die kürzeste Laufzeit hat, höchstens so groß
ist wie Laufzeit des größten Jobs in J2 , also höchstens ε · T beträgt. Bezeichnen wir mit Tmin die
kürzeste Laufzeit aller Maschinen und mit Tmax die längste Laufzeit, so gilt also Tmax − Tmin ≤
ε · T. Da weiter Tmin ≤ T , folgt damit die Behauptung.
Insgesamt haben wir also gezeigt:
Satz 4.15. Für das Problem Min
Scheduling gibt es ein polynomielles Approximations Job
1/ε2 e
d
schema (Aε )ε>0 mit Laufzeit O n
.
Es gibt noch eine Verbesserung des obigen Approximationsschemas über den Algorithmus von
Lenstra aus [30] zur Lösung ganzzahliger linearer Programme mit einer konstanten Anzahl von
Variablen, siehe [16]. Dieses Approximationsschema hat eine Laufzeit von n + C(1/ε), wobei
C(1/ε) eine Konstante anhängig von ε ist.
5 Vollständige Approximationsschemata
Wie wir bereits am Anfang des letzten Kapitels angedeutet haben, werden wir uns hier mit
Approximationsschemata beschäftigen, die eine bei weitem bessere Laufzeit liefern. Zunächst
wollen wir den Begriff bessere Laufzeit“ präzisieren.
”
Definition 5.1. Ein vollständiges Approximationsschema (englisch: Fully Polynomial Time Approximation Schema (FPTAS, FPAS)) für ein Problem Π ist ein Approximationsschema (Aε )ε>0
so, dass die Laufzeit polynomiell beschränkt in 1ε und der Eingabelänge ist. Genauer, es gibt ein
Polynom p : R × R → R so, dass für alle ε > 0 und alle n ∈ N die Laufzeit von Aε bei Eingabe
einer Instanz von Π der Länge höchstens n durch p( 1ε , n) beschränkt ist.
Wir werden im ersten Abschnitt dieses Kapitels noch einmal das Rucksackproblem behandeln.
Die Idee bei der Konstruktion eines vollständigen Approximationsschemas für dieses Problem
sieht wie folgt aus: Wir betrachten zunächst einen exakten (aber nichtpolynomiellen) Algorithmus für Max Knapsack. Dieser Algorithmus löst dann eine (in Abhängigkeit von ε > 0)
skalierte Eingabe des Problems.
Interessanterweise lässt sich dieses Konzept auf viele weitere Probleme anwenden (und auch
theoretisch untermauern). Allerdings muss der benutzte exakte Algorithmus bestimmte Voraussetzungen, insbesondere an die Laufzeit, erfüllen. Wir werden deshalb im zweiten Abschnitt
den Begriff der pseudopolynomiellen Laufzeit kennen lernen und sehen, dass die Existenz eines
pseudopolynomiellen Algorithmus zumindest notwendig dafür ist, dass ein vollständiges polynomielles Approximationsschema existiert.
5.1 Max Knapsack
Die in diesem Abschnitt behandelten Ideen zur Konstruktion eines vollständigen Approximationsschemas gehen zurück auf Ibarra und Kim, siehe [?].
Wie schon oben angekündigt, benötigen wir einen exakten Algorithmus zur Konstruktion eines
vollständigen Approximationsschemas für das Problem Max Knapsack.
Bevor wir allerdings den Algorithmus formulieren, benötigen wir noch einige Notationen und
Lemmata.
Sei eine Instanz des Rucksackproblems gegeben, d. h. Gewichte s1 , . . . , sn ∈ N, Gewinne
p1 , . . . , pn ∈ N und die Kapazität des Rucksacks B ∈ N. Für alle j ∈ {0, 1, . . . , n} und i ∈ Z sei
(
)
X
X
Fj (i) := min
sk ; I ⊆ {1, . . . , j} mit
pk ≥ i
k∈I
k∈I
das minimale Gewicht einer Teilmenge der ersten j Gegenstände mit Gesamtgewinn mindestens
i (wir setzen min ∅ := ∞). Fn (i) gibt also an, wie schwer der Rucksack mindestens sein muss,
damit der Gewinn den Wert i erreicht.
Zunächst gilt das folgende, einfach zu beweisende Lemma.
Lemma 5.2. Sei OPT der Wert einer optimalen Lösung des Rucksackproblems bezüglich der
obigen Instanz. Dann gilt
OPT = max{i; Fn (i) ≤ B}.
57
58
Kapitel 5: Vollständige Approximationsschemata
Die Idee bei der Formulierung des exakten Algorithmus für das Problem ist dynamische Programmierung, d. h., zum Berechnen des Optimums werten wir so lange Funktionswerte von F
aus, bis wir das kleinste i mit Fn (i) > b gefunden haben. Der Wert i − 1 ist dann das gesuchte
Optimum. Mit Hilfe des folgenden Lemmas kann diese Auswertung so geschehen, dass man zur
Berechnung nur auf bereits berechnete Funktionswerte zurückgreifen muss.
Lemma 5.3. Es gilt
(i) Fj (i) = 0 für alle i ≤ 0 und j ∈ {0, . . . , n},
(ii) F0 (i) = ∞ für alle i > 0,
(iii) Fj (i) = min(Fj−1 (i), sj + Fj−1 (i − pj )) für alle i > 0, j ∈ {1, . . . , n}.
Die dritte Gleichung ist auch als Bellmannsche Optimalitätsgleichung bekannt.
Beweis. (i) Wenn der Wert des Rucksackinhalts nicht positiv sein muss, dann ist die Menge
mit minimalem Gewicht, die das tut, die leere Menge und diese hat Gewicht 0.
(ii) Wenn der Wert des Inhalts positiv sein soll, die Auswahl der Gegenstände aber aus der
leeren Menge kommt, so gibt es keine Lösung, d. h. F0 (i) = ∞.
(iii) Um eine gewichtsminimale Teilmenge der ersten j Gegenstände mit Wert mindestens i zu
finden, gehen wir wie folgt vor: Wir suchen zunächst eine gewichtsminimale Menge S1 der ersten
j − 1 Gegenstände und dann eine gewichtsminimale Menge S2 der ersten j Gegenstände, die
den j-ten Gegenstand enthält. Dann wählt man das mit dem kleinsten Gewicht. S1 hat Gewicht
Fj−1 (i) und S2 ein Gewicht von sj + Fj−1 (i − pj ). Daraus folgt sofort die Formel.
Wir sind nun in der Lage, unseren Algorithmus zu formulieren. Dabei können wir dank des
obigen Lemmas annehmen, dass die Werte Fj (i) für alle i ≤ 0 und j ∈ {0, . . . , n}, sowie F0 (i)
für alle i > 0 bereits bekannt sind, siehe auch Abbildung 5.1.
Algorithmus ExactKnapsack
Eingabe: s1 , . . . , sn , p1 , . . . , pn , B
1
2
3
4
5
6
7
8
i := 0
repeat
i := i + 1
for j = 1 to n do
Fj (i) = min(Fj−1 (i), sj + Fj−1 (i − pj ))
od
until Fn (i) > B
return i − 1
Satz 5.4. Der Algorithmus ExactKnapsack berechnet zu jeder Instanz
I = (s1 , . . . , sn , p1 , . . . , pn , B) ∈ N2n+1
des Problems Max Knapsack eine optimale Packung in O(n · OPT(I)) Schritten.
Beweis. Zur Laufzeit: In der for-Schleife werden O(n) Schritte benötigt. Die
repeat-Schleife wird OPT(I) + 1-mal durchlaufen. Insgesamt ergibt sich die behauptete
Laufzeit.
Zur Korrektheit: Wir haben bereits weiter oben gesehen, dass
OPT(I) = max{k; Fn (k) ≤ B}.
59
Kapitel 5: Vollständige Approximationsschemata
Erlaubte Gegenstande
Zu
er−
ziel−
ende
Ge−
winne
−pmax
0
1
i−pj
OPT+1
1
n
0
0
0
0
0
0
t
t
i
OPT
0
t
Fn(i)
t
t
Abbildung 5.1: Arbeitsweise des Algorithmus
ExactKnapsack. Dabei ist pmax :=
max{p1 , . . . , pn } der maximale Gewinn eines Gegenstandes der Eingabe. Die
Werte in der Tabelle werden von oben nach unten und von links nach rechts
berechnet. Bereits berechnete Werte sind schraffiert.
60
Kapitel 5: Vollständige Approximationsschemata
Weiter gilt wegen
n
o n
o
X
X
J ⊆ {1, . . . , n};
pk ≥ i + 1 ⊆ J ⊆ {1, . . . , n};
pk ≥ i
k∈J
k∈J
auch Fn (i + 1) ≥ Fn (i) für alle i ∈ N, weshalb nach der Abbruchbedingung
until Fn (i) > B kein Wert Fn (j) für j ≥ i wieder kleiner als B werden kann. Es gilt
dann also OPT(I) = i − 1.
Offensichtlich hat dieser Algorithmus keine polynomielle Laufzeit, obwohl das auf den ersten
Blick so scheinen mag. Für Instanzen der Form s1 = 1, p1 = C und B = 1 ist das Optimum C,
die Eingabelänge aber
ln 1 + 1 + ln C + 1 + ln 1 + 1 = 3 + ln C.
Also ist die Laufzeit O(C) exponentiell in der Eingabelänge 3 + ln C.
Zunächst überlegen wir uns, wie man den obigen Algorithmus so modifizieren kann, dass er nicht
nur den Wert einer optimalen Lösung erzeugt, sondern auch die Packung: Zusammen mit jedem
Wert Fj (i), i, j > 0 speichern wir die Information, ob
Fj (i) = Fj−1 (i)
oder
Fj (i) = sj + Fj−1 (i − pj )
gilt. Eine der beiden Gleichungen stimmt nach Lemma 5.3 (iii) auf jeden Fall (falls beide Gleichungen zutreffen, entscheiden wir uns für eine beliebige).
Gilt die erste Gleichung, so existiert eine gewichtsminimale Teilmenge der Menge {1, . . . , j} mit
Wert mindestens i, die j nicht enthält, im zweiten Fall gibt es eine, die j enthält. Um eine
Teilmenge Sj (i) ⊆ {1, . . . , j} zu erhalten, die den Wert Fj (i) realisiert, können wir also die
Formel
(
Sj−1 (i),
falls Fj (i) = Fj−1 (i),
Sj (i) =
Sj−1 (i − pj ) ∪ {j}, falls Fj (i) = sj + Fj−1 (i − pj )
verwenden, wobei offensichtlich Sj (i) = ∅ für alle i ≤ 0 und j ∈ {1, . . . , n}. Dies verwenden wir
zur Berechnung einer optimalen Menge S = Sn (OPT).
Die Idee des folgenden Algorithmus ist es, zum ursprünglichen Problem ein skaliertes Problem zu konstruieren, dessen Optimum polynomiell in der Eingabelänge des ursprünglichen
Problems ist, und dann den Algorithmus ExactKnapsack zu benutzen. Genauer, der Algorithmus ExactKnapsack hat eine Laufzeit von O(n OPT), und damit, da OPT ≤ npmax mit
pmax := max{p1 , . . . , pn }, eine Laufzeit von höchstens O(n2 pmax ). Betrachten wir jetzt eine (in
Abhängigkeit von ε > 0) skalierte Instanz mit Gewinnen
pi n
pi (ε) =
,
(5.1)
pmax ε
gleichbleibenden Gewichten si und gleicher Kapazität B, so hat der oben definierte Algorithmus
bezüglich dieser Instanz eine Laufzeit von höchstens O(n3 ε−1 ), was polynomiell in der Eingabelänge der ursprünglichen Instanz und ε−1 ist.
Sei also ε > 0.
Algorithmus Aε
Eingabe: s1 , . . . , sn , p1 , . . . , pn , B
1
2
3
k := max(1, bε pmax
n c)
for j = 1 to n do
p
pj (k) = b kj c
Kapitel 5: Vollständige Approximationsschemata
4
5
od
Berechne OPT(k) und S(k), die optimale Lösung und optimale Teilmenge des
Rucksackproblems mit Gewinnen
Ppj (k), Gewichten sj und Kapazität B mit Hilfe
von ExactKnapsack und gib j∈S(k) pj aus.
61
62
Kapitel 5: Vollständige Approximationsschemata
Offensichtlich ist die von dem obigen Algorithmus erzeugte Lösung wieder zulässig, da sich die
Gewichte und die Kapazität nicht geändert haben.
Es gilt nun
Satz 5.5. Für alle ε > 0 hat der Algorithmus Aε eine Laufzeit von O(n3 1ε ).
Beweis. Der dominierende Term in der Laufzeit ist der Aufruf von ExactKnapsack für das
skalierte Problem. Die weiteren Anweisungen verursachen nur Kosten O(n).
Sei nun OPT(k) der Gewinn einer optimalen Packung für das bezüglich k skalierte Problem.
Dann gilt
jp
k
max
OPT(k) ≤ n max pi (k) = n
.
k
i∈{1,...,n}
Da ExactKnapsack bei Aufruf der skalierten Instanz eine Laufzeit von O(n · OPT(k)) hat
31
(siehe Satz 5.5), ist somit die Laufzeit von Aε durch O(n2 pmax
k )=O(n ε ) beschränkt.
Wir unterscheiden die folgenden beiden Fälle:
Fall 1: Es gelte k = 1. Dann folgt
εpmax
n
≤ 1, also
pmax
n
= pmax ≤ .
k
ε
Fall 2: Es gelte nun k = bε pmax
n c. Dann erhalten wir
pmax ε
≤ k + 1,
n
n
(k + 1),
ε
also pmax ≤
und es folgt
pmax
n k+1
2n
≤
≤
.
k
ε k
ε
Wir sehen schon an dem obigen Satz, dass das hier vorgestellte Approximationsschema eine bei
weitem bessere Laufzeit als die im letzten Kapitel beschriebenen hat. Weiter gilt:
Satz 5.6. Für alle ε > 0 hat Aε eine Approximationsgüte von 1 − ε.
Beweis. Sei ε > 0 und k wie im Algorithmus definiert. Sei weiter S eine optimale Packung
des ursprünglichen Problems, S(k) die vom Algorithmus Aε gefundene Packung und OPT bzw.
OPT∗ (k) der Wert von S bzw. S(k). Dann gilt
OPT∗ (k) =
X
pj
j∈S(k)
=k
≥k
X pj
k
j∈S(k)
X jp k
j
k
j
k
X p
j∈S(k)
≥k
j
j∈S
k
,
Kapitel 5: Vollständige Approximationsschemata
63
wobei man sich für die letzte Ungleichung überlegen muss, dass die Packung S(k) optimal für
das skalierte Problem ist (insbesondere also besser als S). Weiter gilt
X pj
OPT∗ (k) ≥ k
b c
k
j∈S
X pj
≥k
( − 1)
k
j∈S
X
=
(pj − k)
j∈S
= OPT −k|S|
k|S|
= OPT 1 −
OPT
kn
,
≥ OPT 1 −
pmax
denn |S| ≤ n und OPT ≥ pmax .
Also bleibt zu zeigen, dass
kn
pmax
≤ ε. Dazu unterscheiden wir wieder die beiden folgenden Fälle:
Fall 1: Es gelte k = 1. Also wurde das ursprüngliche Problem gar nicht skaliert und es gilt sogar
OPT = OPT∗ (k).
Fall 2: Es gelte also nun k = bε pmax
n c. Dann folgt sofort die Behauptung.
Schnellere vollständige Approximationsschemata wurden beispielsweise von Lawler in [?] und
Magazine und Oguz in [?] entwickelt. Für weitere Algorithmen und eine Einführung in das
Problem Max Knapsack siehe auch [?].
5.2 Pseudopolynomielle Algorithmen und streng NP-schwere
Probleme
Wir haben im vorherigen Abschnitt am Beispiel des Rucksackproblems gesehen, wie man aus
einem exakten Algorithmus ein vollständiges Approximationsschema gewinnt. Dieses Verfahren
lässt sich natürlich nicht auf alle Optimierungsprobleme anwenden, es gibt durchaus Probleme,
für die es kein vollständiges Approximationsschema gibt. Allerdings kann man diese Probleme
daran erkennen, dass sie keinen exakten Algorithmus mit einer Laufzeit ähnlich wie die von
ExactKnapsack haben. Um diese Aussage zu präzisieren, gehen wir wie folgt vor: Ähnlich wie
bei der Untersuchung von NP-schweren Optimierungsproblemen wollen wir in diesem Abschnitt
eine Unterklasse dieser Klasse angeben (die sogenannten strengen NP-schweren Probleme), für
die es kein vollständiges Approximationsschema gibt, es sei denn P = NP. Der Begriff streng
NP-schwer wurde zuerst von Garey und Johnson in [?] eingeführt.
Wir beginnen mit einigen Definitionen.
Definition 5.7. Sei Π ein Optimierungsproblem. Dann ist Max(I) der Wert der größten Zahl
in der Instanz I von Π.
Ist zum Beispiel I = (s1 , . . . , sn , p1 , . . . , pn , B) ∈ N2n+1 eine Instanz des Rucksackproblems, so
ist
Max(I) = max{s1 , . . . , sn , p1 , . . . , pn , B},
wohingegen für die Länge der Instanz gilt
n
n
X
X
|I| =
(log2 (si ) + 1) +
(log2 (pi ) + 1) + log2 (B) + 1.
i=1
i=1
64
Kapitel 5: Vollständige Approximationsschemata
Definition 5.8. Ein pseudopolynomieller Algorithmus A für ein Problem Π ist ein Algorithmus,
dessen Laufzeit durch ein Polynom in den beiden Variablen |I| und Max(I) für jede Instanz I
von Π beschränkt ist.
In Sinne der obigen Definition ist also insbesondere jeder polynomielle Algorithmus auch pseudopolynomiell. Weiter haben wir bereits einen echten, d. h. nichtpolynomiellen pseudopolynomiellen
Algorithmus
kennen
gelernt,
den
Algorithmus
ExactKnapsack,
denn
dessen
Laufzeit
beträgt
O(n2 pmax ),
wobei
pmax := maxi∈{1,...,n} pi für eine Instanz I = (s1 , . . . , sn , p1 , . . . , pn , B). Offensichtlich gilt
pmax ≤ Max(I). Also ist der Algorithmus pseudopolynomiell.
Wir kommen nun zur Definition des Begriffs streng NP-schwer.
Definition 5.9. (i) Sei Π ein Problem und p ein Polynom. Dann bezeichnen wir mit Πp das
Unterproblem von Π, welches nur aus Instanzen I mit Max(I) ≤ p(|I|) besteht.
(ii) Sei Π ein Entscheidungsproblem. Dann heißt Π streng NP-vollständig (oder NPvollständig im strengen Sinne), wenn Π ∈ NP und es ein Polynom p so gibt, dass Πp
NP-vollständig ist.
(iii) Ein Optimierungsproblem heißt streng NP-schwer (oder NP-schwer im strengen Sinne),
wenn das zugehörige Entscheidungsproblem streng NP-vollständig ist.
Es gilt nun:
Satz 5.10. Ist Π ein streng NP-schweres Optimierungsproblem, so gibt es keinen pseudopolynomiellen Algorithmus für Π, außer P = NP.
Beweis. Sei Π0 das zugehörige Entscheidungsproblem. Dann gibt es also ein Polynom p so, dass
Π0p NP-vollständig ist. Ein pseudopolynomieller Algorithmus A für Π läuft in Zeit q(|I|, Max(I))
für jede Instanz I von Π, wobei q ein geeignetes Polynom ist. Für jede Instanz I von Π0p gilt dann
Max(I) ≤ p(|I|), also benötigt A q(|I|, Max(I)) ≤ q(|I|, p(|I|) Schritte für Eingaben von Π0p (wir
nehmen o.B.d.A. an, dass q monoton wachsend auf N ist), hat also insgesamt eine polynomielle
Laufzeit in |I|.
Wir kommen nun zu unserem angekündigten Satz, der den Zusammenhang zwischen strengen
NP-schweren Problemen und Problemen, für die es ein vollständiges Approximationsschema
gibt, herstellt.
Satz 5.11 (Garey und Johnson [?]). Sei Π ein Optimierungsproblem so, dass für alle Instanzen
I von Π gilt: OPT(I) ist polynomiell beschränkt in |I| und Max(I). Existiert ein vollständiges
Approximationsschema für Π, dann gibt es auch einen pseudopolynomiellen Algorithmus für Π.
Beweis. Wir führen den Beweis nur für Maximierungsprobleme, für Minimierungsprobleme folgt
der Satz analog. Wir setzen weiter voraus, dass alle Zahlen in den Eingaben natürliche Zahlen
sind.
Sei also (Aε )ε>0 ein vollständiges Approximationsschema für Π. Sei weiter p ein Polynom so,
dass OPT(I) < p(|I|, Max(I)) für alle Instanzen I von Π. Wir nehmen o.B.d.A. an, dass alle
Zahlen aus N sind, und betrachten den folgenden Algorithmus:
Algorithmus A
Eingabe: I
1
Bestimme ε = (p(|I|, Max(I)))−1 .
65
Kapitel 5: Vollständige Approximationsschemata
2
Wende den Algorithmus Aε auf I an.
Da (Aε )ε>0 ein vollständiges Approximationsschema ist, existiert ein Polynom q so, dass für alle
ε > 0 die Laufzeit von Aε durch q(|I|, ε−1 ) beschränkt ist. Also ist für alle Instanzen I von Π
die Laufzeit von A beschränkt durch q(|I|, p(|I|, Max(I)), und damit pseudopolynomiell.
Weiter gilt für alle Instanzen I und ε = (p(|I|, Max(I)))−1
A(I) ≥ (1 − ε) OPT(I),
und damit
OPT(I) − A(I) ≤ ε OPT(I) < ε p(|I|, Max(I)) ≤
p(|I|, Max(I))
= 1.
p(|I|, Max(I))
Da wir vorausgesetzt haben, dass alle Zahlen in der Instanz I natürliche Zahlen sind, sind auch
OPT(I) und A(I) natürliche Zahlen. Weiter gilt, da Π ein Maximierungsproblem ist, offensichtlich OPT(I) ≥ A(I), und damit OPT(I) = A(I).
6 Randomisierte Algorithmen
Randomisierte Algorithmen sind Algorithmen, die einen Zufallsgenerator verwenden. Es stellt
sich heraus, dass solche Algorithmen oft sehr einfach sind und gute Ergebnisse liefern. Wir werden
in diesem Kapitel zwei randomisierte Algorithmen kennen lernen und eine allgemeine Technik anwenden, um aus randomisierten Algorithmen den Zufallsgenerator wieder herauszubekommen.
Dieses Konzept, auch Derandomisierung oder Methode der bedingten Wahrscheinlichkeit genannt, lässt sich leider nicht auf alle randomisierten Algorithmen anwenden, stellt aber dennoch
ein wichtiges Hilfsmittel für die Konstruktion von Approximationsalgorithmen dar.
Wir werden dieses Konzept zunächst am Beispiel des Problems MaxSat einführen, bevor wir
randomisierte Algorithmen definieren. Interessanterweise lässt sich mit diesen Definitionen eine
alternative Definition der Klasse NP angeben. Insbesondere wird sich zeigen, dass man nichtdeterministische Algorithmen bzw. Turingmaschinen schon als randomisierte Algorithmen bzw.
probabilistische Turingmaschinen ansehen kann.
6.1 MaxSat
Wir wollen zunächst einen einfachen randomisierten Algorithmus kennen lernen und danach alle
für dieses Kapitel benötigten Begriffe definieren.
Das Erfüllbarkeitsproblem Sat haben wir bereits behandelt, in diesem Abschnitt betrachten wir
eine spezielle Form dieses Problems.
Optimierungsproblem 6.1 (Max≥kSat).
Eingabe:
Eine boolesche Formel φ = C1 ∧ · · · ∧ Cm über den booleschen Variablen x1 , . . . , xn
so, dass jede Klausel
Ci = (li,1 ∨ · · · ∨ li,ki ); i ∈ {1, . . . , m}
Ausgabe:
eine Disjunktion von mindestens k Literalen li,j ist, d. h. ki ≥ k.
Eine Belegung µ : {x1 , . . . , xn } → {wahr, falsch} so, dass die Anzahl der erfüllenden Klauseln maximiert wird.
Wir nehmen in diesem Abschnitt weiter an, dass keine Klausel zwei Literale enthält, die von
der gleichen Variable kommen. (Taucht eine Variable mit gleichem Vorzeichen in einer Klausel
auf, so können wir eine dieser Variablen einfach löschen, ohne die Anzahl der erfüllten Klauseln zu verändern. Ist andererseits eine Variable mit verschiedenen Vorzeichen in einer Klausel
vorhanden, so ist diese unter jeder Belegung wahr, dieser Fall ist damit ebenfalls uninteressant.)
Ziel dieses Abschnittes ist es, anhand des folgenden Algorithmus randomisierte Algorithmen
einzuführen. Die Ideen zu diesem Algorithmus finden sich implizit in Johnson [24].
Algorithmus RandomSat
Eingabe: C1 ∧ · · · ∧ Cm
1
2
66
for i := 1 to n do
Wähle ein Zufallsbit z ∈ {0, 1}.
67
Kapitel 6: Randomisierte Algorithmen
3
4
5
6
7
8
9
if z = 0 then
µ(xi ) := falsch
else
µ(xi ) := wahr
fi
od
return φ
Dieser Algorithmus sieht sich die Klauseln gar nicht an, sondern wirft für jede Variable xi eine
Münze.
Bevor wir den Algorithmus analysieren, benötigen wir einige wahrscheinlichkeitstheoretische
Grundlagen.
6.2 Wahrscheinlichkeitstheorie
Wir behandeln in diesem Abschnitt nur einige grundlegende Techniken, die wir für dieses Kapitel
benötigen, insbesondere betrachten wir nur endliche Wahrscheinlichkeitsräume.
Sei W eine endliche Menge. Die Abbildung
Pr : P(W ) → [0, 1]; A 7→
|A|
|W |
ist ein Wahrscheinlichkeitsmaß auf W im Sinne der Definition 6.2. Jede Teilmenge A ∈ P(W ) von
W heißt Ereignis, besteht A nur aus einem Element, so nennen wir A auch Elementarereignis.
Die Abbildung Pr hat dann folgende Eigenschaften:
(i) Pr [∅] = 0 und Pr [W ] = 1,
(ii) Pr [A ∪ B] = Pr [A] + Pr [B] − Pr [A ∩ B] für alle A, B ⊆ W .
Definition 6.2. Sei W eine endliche Menge. Eine Abbildung
Pr : P(W ) → [0, 1]
heißt Wahrscheinlichkeitsmaß auf W , wenn
(i) Pr [∅] = 0 und Pr [W ] = 1,
(ii) Pr [A ∪ B] = Pr [A] + Pr [B] − Pr [A ∩ B] für alle A, B ⊆ W .
Wir werden im nächsten Abschnitt noch weitere Wahrscheinlichkeitsmaße kennen lernen, hier soll
uns zunächst einmal die oben definierte Abbildung genügen, die die sogenannte Gleichverteilung
auf W definiert (alle Elementarereignisse sind gleichwahrscheinlich).
Wir betrachten als Beispiel das im obigen Algorithmus benutzte Experiment des Münzwurfs.
Hier ist W = {Kopf, Zahl} = {0, 1} und Pr [0] = Pr [1] = 21 .
Im oben vorgestellten Algorithmus wiederholen wir dieses Experiment n-mal, der Wahrscheinlichkeitsraum ist dann W n = {0, 1}n und die Wahrscheinlichkeit, dass ein bestimmtes
Elementarereignis eintritt, somit |W1n | = 21n . Interessiert man sich nun für die Frage, wie
groß die Wahrscheinlichkeit dafür ist, dass beim n-maligen Werfen einer Münze genau
k-mal, k ∈ {0, . . . , n}, die Eins gefallen ist, so muss man die Mächtigkeit der Menge
{(x1 , . . . , xn ) ∈ {0, 1}n ; k(x1 , . . . , xn )k1 = k} bestimmen, wobei
k(x1 , . . . , xn )k1 :=
n
X
i=1
xi .
68
Kapitel 6: Randomisierte Algorithmen
Die Frage ist also, wie viele Möglichkeiten man hat, auf n Plätzen k Einsen zu verteilen, oder,
anders ausgedrückt, wie viele k-elementige Teilmengen einer n-elementigen Menge es gibt. Dies
sind aber gerade nk , und wir erhalten
Pr [{(x1 , . . . , xn ) ∈ {0, 1}n ; k(x1 , . . . , xn )k1 = k}] =
n 1
.
k 2n
Der Begriff der Zufallsvariable spielt in den folgenden Betrachtungen eine große Rolle.
Definition 6.3. Eine (reelle) Zufallsvariable ist eine Abbildung X : W → R.
Ist X : W → R eine Zufallsvariable, so definiert die Abbildung
PrX : P(X(W )) → [0, 1]; A 7→ Pr [X = A] := Pr X −1 (A)
ein Wahrscheinlichkeitsmaß auf dem Bild von X. Das Wahrscheinlichkeitsmaß Pr auf W wird
also mit Hilfe der Zufallsvariable X auf das Bild von X übertragen. Der Beweis, dass PrX
tatsächlich ein Wahrscheinlichkeitsmaß ist, ist sehr einfach und als Übungsaufgabe formuliert.
Der Erwartungswert einer Zufallsvariable X ist
X
X
Exp [X] :=
i Pr [X = i] =
X(w) · Pr [w] ,
i∈X(W )
w∈W
wobei Pr [X = i] := Pr X −1 (i) . (Man beachte, dass der Wahrscheinlichkeitsraum W , und damit
auch X(W ), endliche Mengen sind, wir können also in diesem Spezialfall die Summe anstelle des
Integrals benutzen.)
Wir betrachten als Motivation für den Erwartungswert wieder den n-maligen
Münzwurf. Angenommen, wir bekommen für jede gefallene Eins einen Euro. Dann interessieren wir uns dafür, wie viel Geld wir durchschnittlich gewinnen können. Definiere
X : W = {0, 1}n → R; (x1 , . . . , xn ) 7→ kx1 , . . . , xn k1 .
Dann ist der Erwartungswert
Exp [X] =
=
n
X
i=0
n
X
i=1
i Pr [X = i]
n X
n i
i Pr [{(x1 , . . . , xn ); k(x1 , . . . , xn )k1 = i}] =
i 2n
i=1
der durchschnittlichen Gewinn, den wir beim obigen Spiel erhalten.
gleich noch sehen, dass Exp [X] = n2 .
Wir werden
Meist ist es relativ kompliziert, den Erwartungswert einer Zufallsvariable X auszurechnen. Der
Trick besteht darin, X als Summe einfacher Zufallsvariablen darzustellen und dann die Erwartungswerte der einfachen Zufallsvariablen auszurechnen. Genauer, seien Xi : W → R Zufallsvariablen für alle i ∈ {1, . . . , n}. Dann heißt
X :=
n
X
Xi : W → R; x 7→
i=1
n
X
i=1
die Summe der Zufallsvariablen X1 , . . . , Xn .
Weiter gilt die sogenannte Linearität des Erwartungswertes.
Xi (x)
69
Kapitel 6: Randomisierte Algorithmen
Satz 6.4
Dann gilt
(Linearität des Erwartungswertes). Seien X1 , . . . , Xn
Exp [X] =
n
X
und X
wie oben.
Exp [Xi ] .
i=1
Beweis. Es gilt
n
X
Exp [Xj ] =
j=1
n X
X
Xi (w) · Pr [w]
j=1 w∈W
X
=
Pr [w] ·
X
Xi (w)
j=1
w∈W
=
n
X
Pr [w] · X(w)
w∈W
= Exp [X] .
Wir kehren zu unserem obigen Beispiel zurück. Für alle i ∈ {1, . . . , n} sei
(
1,
Xi : W = {0, 1} → {0, 1}; (x1 , . . . , xn ) 7→
0,
n
falls xi = 1,
sonst,
d. h., Xi gibt an, ob im i-ten Wurf eine Eins gefallen ist. Dann gilt offensichtlich für
X : W = {0, 1}n → R; (x1 , . . . , xn ) 7→ k(x1 , . . . , xn )k1 ,
dass
X=
n
X
Xi .
i=1
Für den Erwartungswert von X erhält man, da offensichtlich Exp [Xi ] = 1/2 für alle i ≤ n gilt,
"
Exp [X] = Exp
n
X
i=1
#
Xi =
n
X
Exp [Xi ] =
i=1
n
X
1
i=1
2
=
n
,
2
also eine wesentlich einfachere Rechnung als oben.
6.3 MaxSat (Fortsetzung)
Wir haben nun alles zur Hand, um unseren Approximationsalgorithmus zu analysieren.
Satz 6.5 (Johnson [24]). Die erwartete Anzahl erfüllter Klauseln unter der Belegung, die von
RandomSat berechnet wird, beträgt mindestens
1
1 − k m.
2
Der Satz sagt nicht aus, dass immer mindestens (1− 21k )m Klauseln erfüllt werden, der Mittelwert
hat aber mindestens diese Größe. (Wir werden später noch auf diese Begriffe eingehen.)
70
Kapitel 6: Randomisierte Algorithmen
Beweis. Sei also eine Formel C1 ∧ · · · ∧ Cm über X = {x1 , . . . , xn } mit
Ci = (li,1 ∨ · · · ∨ li,ki )
und ki ≥ k gegeben. Der Algorithmus RandomSat wählt zunächst n Zufallsbits z1 , . . . , zn ∈
{0, 1} und bestimmt anhand der Werte der zi s die Belegung µz1 ,...,zn für die Variablen aus X.
Für alle i ∈ {1, . . . , m} sei die 0/1-Zufallsvariable wie folgt definiert:
(
1, falls µz1 ,...,zn (Ci ) = wahr,
Xi : {0, 1}n → {0, 1}; (z1 , . . . , zn ) 7→
0, sonst.
Das heißt, wir setzen die Zufallsvariable Xi auf eins, wenn, in Abhängigkeit vom Ausgang der
Zufallsentscheidungen, die Klausel Ci erfüllt ist. Offensichtlich gibt dann die Zufallsvariable
X :=
m
X
Xi
i=1
die Gesamtanzahl der erfüllten Klauseln an. Um den Satz zu beweisen, müssen wir jetzt nur
noch den Erwartungswert von X ausrechnen.
Wegen der Linearität des Erwartungswertes gilt jetzt
Exp [X] =
m
X
Exp [Xi ] =
i=1
Da Pr [Xi = 0] =
1
,
2ki
m X
1
X
j Pr [Xi = j] =
i=1 j=0
m
X
Pr [Xi = 1] .
i=1
folgt
Pr [Xi = 1] = 1 − Pr [Xi = 0] = 1 −
1
1
≥ 1− k,
k
i
2
2
(6.1)
denn ki ≥ k. Insgesamt erhalten wir also
Exp [X] ≥
m
X
1−
i=1
1
1
= (1 − k )m.
2k
2
Wir werden im Abschnitt 7.1 einen weiteren Algorithmus für dieses Problem kennen lernen, der
eine bessere Güte garantiert.
6.4 Randomisierte Algorithmen
Nachdem wir eine Vorstellung davon erhalten haben, was ein randomisierter Algorithmus ist, wollen wir in diesem Abschnitt eine formale Definition geben und diese anhand des in Abschnitt 6.1
vorgestellten Algorithmus für das Problem MaxSat erläutern. Obwohl wir uns zunächst nur
für Optimierungsprobleme interessieren, können wir auch für Wortprobleme bzw. Sprachen und
allgemeiner auch für Entscheidungsprobleme randomisierte Algorithmen definieren. Mit Hilfe
dieser Definition sind wir dann auch in der Lage, eine alternative Beschreibung für die Komplexitätsklasse NP anzugeben.
Definition 6.6 (Randomisierter Algorithmus). Sei Π ein Wort-, Entscheidungs- oder Optimierungsproblem mit Instanzenmenge I. Weiter sei
s : I −→ N
eine Funktion und für alle n ∈ Bild(s) ein Wahrscheinlichkeitsmaß Prn auf Wn = {0, 1}n
gegeben. Ein Algorithmus A heißt dann randomisierter Algorithmus für Π, wenn A Eingaben
der Form (I, w) mit I ∈ I und w ∈ Ws(I) akzeptiert und das Ergebnis A(I, w) eine zulässige
Lösung für I ist.
71
Kapitel 6: Randomisierte Algorithmen
Ein
Ein
Wahle
Zufalls
CC
B
A
AA
BB
Abbildung 6.1: Schematische Vorgehensweise eines randomisierten Algorithmus (links) verglichen mit einem deterministischen Algorithmus (rechts).
Bei
randomisierten
Algorithmen
unterscheidet
man
zwischen
deterministischen
Eingaben (hier die Instanzen des Optimierungsproblems) und nichtdeterministischen oder
auch randomisierten Eingaben (hier die Ausgänge des Zufallsexperiments).
Wir wollen die obige Definition anhand des Algorithmus RandomSat noch einmal erläutern.
Dieser im letzten Abschnitt eingeführte Algorithmus belegt jede boolesche Variable x1 , . . . , xn
einer Formel C1 ∧ · · · ∧ Cm zufällig mit wahr bzw. falsch. In diesem Fall bildet die in der
obigen Definition benutzte Funktion s jede Formel auf die Anzahl der in der Formel benutzten
booleschen Variablen ab.
Der Algorithmus lässt sich damit auch wie folgt beschreiben:
Algorithmus RandomSat
Eingabe: C1 ∧ · · · ∧ Cm , z ∈ {0, 1}n
1
2
3
4
5
6
7
8
for i := 1 to n do
if zi = 0 then
µ(xi ) := falsch
else
µ(xi ) := wahr
fi
od
return φ
Man kann randomisierte Algorithmen aber auch wie folgt auffassen: Der Algorithmus A berechnet
für jede Eingabe I des Optimierungsproblems Π = (I, F, w) nicht wie bisher einen Wert, sondern
eine Zufallsvariable
A(I, ·) : Ws(I) −→ F (I); w 7→ A(I, w).
Über diese Zufallsvariable können dann wahrscheinlichkeitstheoretische Aussagen gemacht werden, wie zum Beispiel darüber, wie groß die erwartete Güte ist, d. h., was Exp [A(I, ·)] (bei
Optimierungsproblemen) ist, oder wie groß die Wahrscheinlichkeit dafür ist, dass der Algorithmus die richtige Antwort liefert (bei Entscheidungsproblemen). Wir werden am Ende dieses
Abschnittes noch einmal genauer darauf eingehen.
72
Kapitel 6: Randomisierte Algorithmen
Wir bezeichnen mit W (A, I) den Wahrscheinlichkeitsraum, den der Algorithmus A zu einer
gegebenen Instanz I des Problems benutzt, und mit
X(A, I) : W (A, I) → R; w 7→ A(I, w)
die Zufallsvariable, die zu einem gegebenen Elementarereignis w ∈ W (A, I) den Wert der vom
Algorithmus A bezüglich w erzeugten Lösung angibt.
Im oben betrachteten Beispiel RandomSat gilt also für eine Instanz I = C1 ∧ · · · ∧ Cm des
Problems Max≥kSat über den booleschen Variablen x1 , . . . , xn :
W (RandomSat, I) = {0, 1}n
(hier bildet also die Funktion s aus Definition 6.6 jede Instanz I auf die Anzahl der in I benutzten
Variablen ab) und
X(RandomSat, I)(w1 , . . . , wn )
= Anzahl der erfüllten Klauseln bezüglich (w1 , . . . , wn ).
Definition 6.7 (Polynomieller Randomisierter Algorithmus). Ein randomisierter Algorithmus
A für ein Optimierungsproblem Π = (I, F, w) heißt polynomiell, wenn es ein Polynom p so gibt,
dass die Laufzeit von A für jede deterministische Eingabe I ∈ I durch p(|I|) beschränkt ist.
Man beachte, dass die Laufzeit immer polynomiell sein muss, unabhängig von den Ausgängen
der Zufallsexperimente. Dies bedeutet unter anderem, dass der Algorithmus für jede Eingabe
I ∈ I auch nur Elemente aus dem Wahrscheinlichkeitsraum W = {0, 1}s(I) einlesen kann, die
eine polynomielle Länge haben, die Funktion s ist somit ebenfalls durch ein Polynom beschränkt.
Wir kommen nun zur Definition der erwarteten Approximationsgüte.
Definition 6.8. Sei Π ein Optimierungsproblem und I die Menge der Instanzen von Π. Die
erwartete Approximationsgüte eines randomisierten Algorithmus A bei Eingabe einer Instanz I
von Π ist definiert als
Exp [X(A, I)]
δA (I) :=
.
OPT(I)
Sei δ : I → R+ eine Funktion. A hat erwartete Güte δ, falls für alle Instanzen I ∈ I gilt:
δA (I) ≤ δ(I)
(bei Minimierungsproblemen)
δA (I) ≥ δ(I)
(bei Maximierungsproblemen).
bzw.
Offensichtlich kann man auch die bisher betrachteten deterministischen Algorithmen als randomisierte Algorithmen wie folgt auffassen: Wir fügen an irgendeiner Stelle ein Zufallsexperiment
ein (sagen wir das Werfen einer Münze) und lassen unseren Algorithmus weiterlaufen wie bisher, d. h., die weiteren Schritte des Algorithmus hängen gar nicht davon ab, ob Kopf oder Zahl
gefallen ist. In diesem Fall hängt also auch die Zufallsvariable X(A, I) nicht von dem Ausgang
des Experimentes ab, d. h., X(A, I) ist eine konstante Funktion, die den Wert A(I) der vom
Algorithmus gefundenen Lösung angibt. Damit gilt dann
X
Exp [X(A, I)] =
i · Pr [X(A, I) = i]
i∈X(A,I)(W (A,I))
= A(I) · Pr [X(A, I) = A(I)]
= A(I),
Kapitel 6: Randomisierte Algorithmen
73
also stimmt in diesem Fall die oben definierte Güte mit der uns bereits bekannten Güte überein.
Eine zweite Beobachtung ist, dass die für randomisierte Algorithmen definierte Güte eine durchschnittliche Güte ist (durchschnittlich vom Ausgang des Zufallsexperimentes). Bei Max≥kSat
kann der betrachtete Algorithmus durchaus eine Belegung liefern, die keine Klausel erfüllt, allerdings mit geringer Wahrscheinlichkeit. Die Güte sagt also nichts darüber aus, ob alle so
gefundenen Lösungen nahe am Optimum sind (im Gegensatz zu unserer bisher betrachteten
Güte).
Zum Abschluss dieses Abschnittes wollen wir noch, wie eingangs versprochen, eine alternative
Definition der Komplexitätsklasse NP einführen, die zeigt, dass wir bereits randomisierte Algorithmen kennen gelernt haben, ohne diese allerdings so zu nennen. Wir erinnern uns, dass NP
mit Hilfe sogenannter nichtdeterministischer Turingmaschinen beschrieben wurde. Determinismus (von lateinisch: determinare abgrenzen, bestimmen) bedeutet, dass alle Ereignisse nach einer
festen Gesetzmäßigkeit ablaufen. Das Wort nichtdeterministisch lässt sich also als unbestimmt
bzw. zufällig übersetzen.
Unter anderem hatten wir die folgende Definition der Klasse NP angegeben: Eine Sprache L ⊆ Σ∗
ist aus NP, wenn es einen polynomiellen Algorithmus A und ein Polynom p so gibt, dass gilt:
• Für alle x ∈ L existiert y ∈ Σ∗ mit |y| ≤ p(|x|) so, dass A(x, y) = wahr,
• Für alle x 6∈ L ist A(x, y) = falsch für alle y ∈ Σ∗ mit |y| ≤ p(|x|).
A ist somit ein polynomieller randomisierter Algorithmus für L im Sinne von Definition 6.6
(wir können y ja als nichtdeterministische Eingabe interpretieren). Wir haben also folgende
Charakterisierung der Klasse NP.
Satz 6.9. Sei L ⊆ Σ∗ eine Sprache über einem beliebigen Alphabet Σ. Dann gilt L ∈ NP genau
dann, wenn es einen randomisierten polynomiellen Algorithmus A für L gibt, der nichtdeterministische Eingaben aus {0, 1}s(x) für jedes Wort x ∈ Σ∗ akzeptiert, so dass für alle n ∈ N und
x ∈ Σ∗ gilt:
aus x ∈ L folgt Pr [A(x, Y ) = wahr] > 0,
aus x 6∈ L folgt Pr [A(x, Y ) = wahr] = 0.
für jede gleichverteilte Zufallsvariable Y in {0, 1}s(x) .
6.5 Derandomisierung: Die Methode der bedingten
Wahrscheinlichkeit
Grundsätzlich ist es natürlich immer möglich, einen randomisierten Algorithmus deterministisch
zu machen, indem man alle möglichen Belegungen der Zufallsbits simuliert. Benutzt der Algorithmus c Zufallsbits, so führt dies zu einer erhöhten Laufzeit um einen Faktor von 2c . Der
im letzten Abschnitt behandelte Algorithmus RandomSat benötigt n Zufallsbits, wobei n die
Anzahl der Variablen einer Klausel ist. Eine Derandomisierung wie oben beschrieben würde also
eine Laufzeit von 2n · O(n) nach sich ziehen und wäre damit nicht mehr polynomiell. Es gibt
aber, wie wir gleich sehen werden, eine bessere Methode. Zum weiteren Lesen seien Motwani
und Raghavan [32], Raghavan [34] und Spencer [1] empfohlen.
Zunächst aber noch einige Definitionen: Seien A, B zwei Ereignisse über einem Wahrscheinlichkeitsraum
W.
Dann
ist
die
bedingte
Wahrscheinlichkeit
Pr [A | B]
(d. h. die Wahrscheinlichkeit, dass A eintritt, unter der Voraussetzung, dass B eintritt)
definiert durch
Pr [A ∩ B]
Pr [A | B] =
,
Pr [B]
74
Kapitel 6: Randomisierte Algorithmen
falls Pr [B] 6= 0.
Beispielsweise gilt beim zweimaligem Münzwurf für die Ereignisse
A = {(1, 1), (0, 1)}
(beim zweiten Wurf fällt eine Eins) und
B = {(1, 1), (1, 0)}
(beim ersten Wurf fällt eine Eins)
Pr [A] = Pr [B] =
1
2
und Pr [A | B] = 12 .
Ähnlich ist der bedingte Erwartungswert definiert. Sei X : W → R eine Zufallsvariable. Der
bedingte Erwartungswert bezüglich eines Ereignisses B ⊆ W ist dann
X
i Pr [X = i | B] .
Exp [X | B] =
i∈X(W )
Wir kommen nun zur Formulierung unseres deterministischen Algorithmus. Sei dazu X wie
im Beweis von Satz 6.5, d. h. für eine Formel C1 ∧ · · · ∧ Cm über den Variablen x1 , . . . , xn sei
X : {0, 1}n → N mit
X(y1 , . . . , yn ) = |{i ∈ {1, . . . , m}; Ci = wahr unter ∀j ∈ {1, . . . , n} : xj = yj }|.
Also gibt X die Gesamtanzahl der erfüllten Klauseln an.
Algorithmus DetSat
Eingabe: C1 ∧ · · · ∧ Cm
1
2
3
4
5
6
7
8
9
10
for i = 1 to n do
Berechne E0 = E(X|xj = bj , j = 1, . . . , i − 1, xi = 0).
Berechne E1 = E(X|xj = bj , j = 1, . . . , i − 1, xi = 1).
if E0 ≥ E1 then
µ(xi ) = falsch
else
µ(xi ) = wahr
fi
od
return µ
Auf den ersten Blick ist nicht klar, dass der obige Algorithmus tatsächlich polynomielle Laufzeit
hat. Die Frage ist, wie man den bedingten Erwartungswert in polynomieller Zeit ausrechnen
kann. Wir werden dies später behandeln, zunächst überlegen wir uns aber, wie viele Klauseln
bei einer von DetSat gefundenen Belegung mindestens erfüllt sind.
Satz 6.10. Der Algorithmus DetSat liefert eine Belegung, die mindestens
Exp [X] ≥ (1 −
1
)m
2k
Klauseln erfüllt, wobei m die Anzahl der Klauseln ist, hat also eine Güte von (1 −
1
).
2k
Bevor wir den Satz beweisen können, benötigen wir noch den sogenannten Partitionssatz .
Satz 6.11. Sei X eine Zufallsvariable, B ein Ereignis und B1 , . . . , Bn eine Partition von B.
Dann gilt
n
X
Exp [X | B] =
Exp [X | Bi ] Pr [Bi | B] .
i=1
75
Kapitel 6: Randomisierte Algorithmen
Beweis. Der Beweis
Man muss nur ausnutzen, dass für disjunkte Ereignisse
S ist sehr einfach.
P
A1 , . . . , An gilt Pr [ ni=1 Ai ] = ni=1 Pr [Ai ].
Wir erhalten also
Exp [X | B] =
X
X
j Pr [X = j | B] =
j∈X(W )
j∈X(W )
Pr X −1 (j) ∩ B
j
Pr [B]
S
Pr X −1 (j) ∩ ( ni=1 Bi )
=
j
Pr [B]
j∈X(W )
Sn
X
Pr i=1 (X −1 (j) ∩ Bi )
j
=
Pr [B]
j∈X(W )
n
X
X
Pr X −1 (j) ∩ Bi
j
=
Pr [B]
X
=
=
j∈X(W )
i=1
X
n
X
j
j∈X(W )
i=1
X
n
X
j
=
n
X
X
Pr X −1 (j) | Bi Pr [Bi | B]
i=1
j∈X(W )
=
Pr [Bi ]
Pr X −1 (j) | Bi
Pr [B]
j Pr X −1 (j) | Bi Pr [Bi | B]
j∈X(W ) i=1
n
X
Exp [X | Bi ] Pr [Bi | B] .
i=1
Beweis (von Satz 6.10). Sei also b1 , . . . , bn die Belegung, die der obige Algorithmus liefert, j0
die Anzahl der erfüllten Klauseln für die Belegung und
E i = Exp [X | xj = bj ; j ∈ {1, . . . , i}]
für alle i ∈ {1, . . . , n}. Dann gilt E 0 = Exp [X] und
E n = Exp [X | xj = bj ; j ∈ {1, . . . , n}]
= Exp [X | {b1 , . . . , bn }]
X
=
j Pr X −1 (j) | {b1 , . . . , bn }
j∈X(W )
=
X
j∈X(W )
Pr X −1 (j) ∩ {b1 , . . . , bn }
j
Pr [{b1 , . . . , bn }]
= j0 ,
da X −1 (j) ∩ {b1 , . . . , bn } = ∅ für alle j 6= j0 .
Wir müssen also nur noch E i−1 ≤ E i für alle i ∈ {1, . . . , n} zeigen, woraus die Behauptung folgt.
76
Kapitel 6: Randomisierte Algorithmen
Es gilt
E i−1 = Exp [X | xj = bj ; j ∈ {1, . . . , i − 1}]
1
=
Exp [X | xj = bj ; j ∈ {1, . . . , i − 1}, xi = 0]
2
1
+ Exp [X | xj = bj ; j ∈ {1, . . . , i − 1}, xi = 1]
2
≤ max( Exp [X | xj = bj ; j ∈ {1, . . . , i − 1}, xi = 0] ,
Exp [X | xj = bj ; j ∈ {1, . . . , i − 1}, xi = 1])
= Exp [X | xj = bj ; j ∈ {1, . . . , i}]
= Ei.
Warum ist nun der Algorithmus DetSat polynomiell? Die Frage ist also, wie man die bedingten
Erwartungswerte ausrechnen kann. Dazu überlegt man sich zunächst, dass auch der bedingte
Erwartungswert linear ist. Also gilt für alle Ereignisse B
Exp [X | B] =
l
X
Exp [Xl | B] ,
i=1
wobei, wie schon im Beweis von Satz 6.5, Xl : {0, 1}n → {0, 1} angibt, ob die l-te Klausel erfüllt
ist.
Was ist die Wahrscheinlichkeit dafür, dass die Klausel Cl erfüllt ist, unter der Voraussetzung
B = {(x1 , . . . , xn ) ∈ {0, 1}n ; xj = bj für alle j ∈ {1, . . . , i}} ?
Dazu müssen wir Cl anschauen. Enthält Cl ein bereits mit 1 belegtes Literal, so folgt
Exp [Xl | B] = 1. Ist dies nicht der Fall, so schauen wir uns die noch freien, also nicht belegten
Literale an. Sind dies c ∈ N Stück, so folgt wie im Beweis von Satz 6.5
1
Exp [Xl | B] = 1 − .
c
Offensichtlich können wir für alle Klauseln in polynomieller Zeit testen, ob sie ein mit 1 belegtes
Literal enthalten, und die Anzahl der noch freien Literale zählen. Wir erhalten also
Satz 6.12. Der Algorithmus DetSat hat eine polynomielle Laufzeit.
6.6 MaxCut
Wir betrachten in diesem Abschnitt die oben vorgestellten Verfahren noch einmal am Beispiel
des Problems MaxCut, das wir zum ersten Mal in Abschnitt 1.1 behandelt haben.
Optimierungsproblem 6.13 (MaxCut).
Eingabe:
Ausgabe:
Ein Graph G.
Ein maximaler Schnitt.
Wie schon beim randomisierten Algorithmus für das Problem Max≥kSat schaut sich der folgende Algorithmus die Struktur der Eingabe nicht an, sondern entscheidet zufällig, welcher Knoten
im Schnitt liegt.
Algorithmus RandomCut
Eingabe: G = (V = {v1 , . . . , vn }, G)
1
n := |V |
77
Kapitel 6: Randomisierte Algorithmen
2
3
4
5
6
7
8
9
S := ∅
for i = 1 to n do
Wähle ein Zufallsbit z ∈ {0, 1}.
if z = 1 then
S := S ∪ {vi }
fi
od
return S
Satz 6.14. Der Algorithmus RandomCut hat eine erwartete Güte von 12 .
Beweis. Sei G = (V, E) ein Graph mit V = {v1 , . . . , vn } und E = {e1 , . . . , em } und OPT(G) die
Größe eines optimalen Schnittes. Für alle x = (x1 , . . . , xn ) ∈ {0, 1}n sei Sx := {vi ∈ V ; xi = 1}
und
X : {0, 1}n → N; x 7→ |{e ∈ E; e ist Schnittkante bezüglich Sx }|.
Dann gibt X also die Anzahl der Schnittkanten der vom Algorithmus erzeugten Lösung (in
Abhängigkeit des Ausgangs des Zufallsexperimentes) an. Wir müssen also den Erwartungswert
von X ermitteln. Dazu definieren wir, wie schon im letzten Abschnitt, Zufallsvariablen
(
1, falls ei eine Schnittkante bezüglich Sx ist,
Xi : {0, 1} → N; x 7→
0, sonst
n
für alle i ∈ {1, . . . , m}. Dann gilt offensichtlich
X(x) =
m
X
Xi (x)
i=1
für alle x ∈ {0, 1}n und damit nach Satz 6.4
Exp [X] =
m
X
Exp [Xi ] .
i=1
Weiter erhalten wir
Exp [Xi ] =
1
X
j Pr [Xi = j] = Pr [Xi = 1]
j=0
für alle i ∈ {1, . . . , m}. Sei ei = {vi1 , vi2 }. Was ist nun die Wahrscheinlichkeit, dass ei eine
Schnittkante bezüglich Sx ist? Es gilt
Xi−1 (1) = {(x1 , . . . , xn ) ∈ {0, 1}n ;(xi1 = 0 und xi2 = 1)
oder (xi1 = 1 und xi2 = 0)}
und damit |Xi−1 (1)| = 2 2n−2 . Da |{0, 1}n | = 2n , erhalten wir insgesamt
Pr [Xi = 1] =
also Exp [X] = 12 m ≥
1
2
1
2 2n−2
= ,
2n
2
OPT(G). Da m ≥ OPT(G) gilt, folgt hieraus die Behauptung.
78
Kapitel 6: Randomisierte Algorithmen
Wie schon für das Problem Max≥kSat wollen wir den obigen Algorithmus derandomisieren,
um einen deterministischen Algorithmus zu erhalten, der eine Güte von 21 garantiert. Dabei ist
die Idee sehr ähnlich.
Sei zunächst X : {0, 1}n → N wie im obigen Beweis und definiere für alle i ∈ {1, . . . , n} und
T ⊆ V die Menge
B(i, T ) := {x ∈ {0, 1}n ; Sx ∩ {v1 , . . . , vi } = T }.
Wir kommen nun zur Formulierung des deterministischen Algorithmus.
Algorithmus DetCut
Eingabe: G
1
2
3
4
5
6
7
8
9
T := ∅
for i = 1 to n do
Berechne E0 = E(X|B(i, T )).
Berechne E1 = E(X|B(i, T ∪ {vi })).
if E1 ≥ E0 then
T := T ∪ {vi }
fi
od
return T
Satz 6.15. Der Algorithmus DetCut hat eine Approximationsgüte von 12 .
Beweis. Es sei Ti die Menge, die der Algorithmus nach der i-ten Iteration gefunden hat, und
T = Tn . Dann gilt offensichtlich T0 = ∅ und damit B(0, T0 ) = {0, 1}n . Wir erhalten also
X
Exp [X | B(0, T0 )] =
i Pr [X = i | {0, 1}n ]
i∈X({0,1}n )
X
=
i
i∈X({0,1}n )
X
=
Pr [X = i]
Pr [{0, 1}n ]
i Pr [X = i]
i∈X({0,1}n )
= Exp [X] .
Weiter ist B(n, Tn ) = (x1 , . . . , xn ) mit xi = 1 genau dann, wenn vi ∈ T . Sei nun i0 die Größe
des Schnittes bezüglich T . Damit gilt
X
Exp [X | B(n, Tn )] =
i Pr [X = i | {(x1 , . . . , xn )}]
i∈X({0,1}n )
X
=
i∈X({0,1}n )
Pr X −1 (i) ∩ (x1 , . . . , xn )
i
Pr [{(x1 , . . . , xn )}]
Pr [{(x1 , . . . , xn )}]
Pr [{(x1 , . . . , xn )}]
= i0 .
= i0
Wir müssen also nur noch
Exp [X | B(i, Ti )] ≥ Exp [X | B(i − 1, Ti−1 )]
für alle i ∈ {1, . . . , n} zeigen, dann folgt die Behauptung aus Satz 6.14.
Kapitel 6: Randomisierte Algorithmen
79
Für den Beweis benutzen wir wieder den Partitionssatz (Satz 6.11). Sei also i ∈ {1, . . . , n} und
E0 und E1 die bedingten Erwartungswerte, die in der i-ten Iteration berechnet werden. Dann
gilt
1
1
Exp [X | B(i, Ti−1 )] + Exp [X | B(i, Ti−1 ∪ {vi })]
2
2
1
1
= E0 + E1
2
2
≤ max(E0 , E1 )
Exp [X | B(i − 1, Ti−1 )] =
= Exp [X | B(i, Ti )] .
Die Frage ist nun wieder, ob der Algorithmus auch polynomielle Laufzeit hat, d. h., ob die
im Algorithmus benutzten bedingten Erwartungswerte in polynomieller Zeit berechnet werden
können. Dies formulieren wir als Übungsaufgabe und erhalten damit
Satz 6.16. Der Algorithmus DetCut ist polynomiell.
7 Lineare Programmierung:
Deterministisches und randomisiertes
Runden
Wir werden in diesem Kapitel eine häufig sehr erfolgreiche Technik für Approximationsalgorithmen kennen lernen. Die Idee dabei ist, ein Problem in ein ganzzahliges lineares Programm
(englisch: Integer Linear Programm (ILP)) zu transformieren. Leider ist aber auch das Lösen
von ganzzahligen linearen Programmen schwer. Wir werden also zunächst für das Finden einer
Lösung auf die Ganzzahligkeit verzichten (d. h., wir relaxieren das Programm). Dieses Problem
ist dann, wie wir noch sehen werden, tatsächlich in polynomieller Zeit optimal lösbar.
Die so erhaltene Lösung versuchen wir dann so geschickt zu runden, dass wieder eine zulässige
Lösung entsteht, die nahe am Optimum liegt. Häufig wird dies mit dem sogenannten randomisierten Runden realisiert, um randomisierte Approximationsalgorithmen zu erhalten, siehe auch
den Artikel von Raghavan und Thompson [35], in dem diese Technik eingeführt wurde.
Viele Optimierungsprobleme lassen sich also auf folgende Fragestellung reduzieren: Gegeben sei
eine n × m-Matrix
A = (aij ) i∈{1,...,n}
j∈{1,...,m}
und ein Spaltenvektor b = (b1 , . . . , bn ), jeweils mit ganzzahligen Koeffizienten. Gesucht ist ein
Vektor x = (x1 , . . . , xm ) so, dass Ax ≥ b, d. h.
m
X
aij xj ≥ bi für alle i ∈ {1, . . . , n}.
j=1
Stellt man keine Forderungen an x, so lässt sich eine Lösung des Problems in polynomieller Zeit
finden, sogar die Optimierungsvariante ist polynomiell, siehe Kapitel ??. Verlangt man aber,
dass die Koeffizienten von x ganzzahlig sind (oder sogar nur 0 oder 1), so ist das Problem NPvollständig. Wir werden uns hier auf den Fall beschränken, dass alle Koeffizienten der gesuchten
Lösung 0 oder 1 sind.
Entscheidungsproblem 7.1 ({0, 1} Linear Programming).
Eingabe:
Frage:
Ein ganzzahliges lineares Ungleichungssystem Ax ≥ b.
Gibt es einen Lösungsvektor x = (x1 , . . . , xm ) mit xi ∈ {0, 1} für alle i ∈ {1, . . . , m}?
Satz 7.2 (Karp [27]). Das Problem {0, 1} Linear Programming ist NP-vollständig.
Beweis. Wieder ist offensichtlich, dass das Problem aus NP ist, und wir zeigen
3Sat ≤ {0, 1} Linear Programming. Sei also
α = (a11 ∨ a12 ∨ a13 ) ∧ · · · ∧ (ak1 ∨ a12 ∨ ak3 )
eine Formel in 3-konjunktiver Normalform über der Variablenmenge
X = {x1 , . . . , xn }.
Wir können o.B.d.A. annehmen, dass keine Klausel sowohl xi als auch ¬xi für ein i ∈ {1, . . . , n}
enthält (ansonsten ist diese Klausel immer wahr, und wir können sie löschen).
80
Kapitel 7: Lineare Programmierung: Deterministisches und randomisiertes Runden
81
Wir konstruieren aus α das folgende lineare Ungleichungssystem mit 2n + k Ungleichungen und
2n Variablen x1 , . . . , xn , x̄1 , . . . , x̄n , wobei x̄i für ¬xi steht:
x1 + x̄1 ≥ 1
−x1 − x̄1 ≥ −1
..
.
xn + x̄n ≥ 1
−xn − x̄n ≥ −1
a11 + a12 + a13 ≥ 1
..
.
ak1 + ak2 + ak3 ≥ 1.
Offensichtlich hat nun α genau dann eine erfüllende Belegung, wenn es eine 0/1-Lösung für das
obige Gleichungssystem gibt.
7.1 MaxSat
Wir haben im letzten Kapitel bereits das Problem Max≥kSat behandelt und einen randomisierten Algorithmus angegeben, der eine Güte von 1 − 2−k garantiert. Das Problem MaxSat ist
einfach das bereits bekannte Problem Max≥kSat für k = 1.
Optimierungsproblem 7.3 (MaxSat).
Eingabe:
Ausgabe:
Eine boolesche Formel C1 ∧ · · · ∧ Cm über den booleschen Variablen x1 , . . . , xn .
Eine Belegung µ : {x1 , . . . , xn } → {wahr, falsch} so, dass die Anzahl der erfüllenden Klauseln maximiert wird.
Wir haben also für das Problem schon einen randomisierten Algorithmus mit Güte 21 und werden
in diesem Abschnitt einen randomisierten Algorithmus mit Güte 34 kennen lernen.
Zunächst aber einige Definitionen: Sei
φ = C1 ∧ · · · ∧ Cm
eine boolesche Formel in konjunktiver Normalform über den booleschen Variablen x1 , . . . , xn mit
Klauseln C1 , . . . , Cm . Für jede Klausel Ci sei
Vi+ := die Menge der unnegierten Variablen in Ci ,
Vi− := die Menge der negierten Variablen in Ci .
Dann können wir eine Belegung der Variablen x1 , . . . , xn , die die Anzahl der Klauseln maximiert,
wie folgt finden. Wir betrachten das folgende {0, 1} Linear Programming:
max
m
X
zj
j=1
s.t.
X
x∈Vj+
x+
X
x∈Vj−
(1 − x) ≥ zj ,
j ∈ {1, . . . , m}
zj ∈ {0, 1},
j ∈ {1, . . . , m}
xi ∈ {0, 1},
i ∈ {1, . . . , n}.
(ILP(MaxSat))
Aus einer Lösung (x1 , . . . , xn ) des obigen linearen Programms erhalten wir eine Belegung der
Variablen wie folgt: Wir setzen µ(xi ) = wahr, wenn xi = 1, und µ(xi ) = falsch, wenn xi = 0.
82
Kapitel 7: Lineare Programmierung: Deterministisches und randomisiertes Runden
Offensichtlich ist das obige Problem damit äquivalent zum Problem MaxSat. Einerseits besteht
die Forderung, dass die Variablen x1 , . . . , xn nur Werte 0 oder 1 annehmen dürfen, d. h., eine
Lösung des linearen Programms definiert eine Belegung der Variablen. Andererseits werden nur
die zj s mit 1 belegt, wenn in der
Klausel Cj mindestens ein Literal erfüllt
P zu zj assoziierten
P
ist (dank der Nebenbedingung x∈V + x + x∈V − (1 − x) ≥ zj ). Die lineare Zielfunktion des
j
j
linearen Programms zählt also die Anzahl der erfüllten Klauseln.
Wie wir aber bereits beschrieben haben, bringt die obige Umformulierung noch nichts, da auch
dieses Problem NP-schwer ist. Wir betrachten aber nun die sogenannte LP-Relaxierung:
max
m
X
zj
j=1
s.t.
X
x∈Vj+
x+
X
x∈Vj−
(1 − x) ≥ zj ,
j ∈ {1, . . . , m}
zj ∈ [0, 1],
j ∈ {1, . . . , m}
xi ∈ [0, 1],
i ∈ {1, . . . , n}.
(LP(MaxSat))
Die Lösungen der LP-Relaxierung heißen auch fraktionale Lösungen.
Auf den ersten Blick scheint dies dasselbe Problem zu sein. Wir verlangen hier aber nicht mehr
die Ganzzahligkeit der Variablen, sondern nur, dass die Werte zwischen 0 und 1 liegen (und
erhalten so eine Lösung, die zunächst keine Belegung der booleschen Variablen definiert).
Der Grund dafür ist der folgende Satz.
Satz 7.4 (Khachiyan 1979). Es gibt einen optimalen Algorithmus, der jedes lineare Programm
max ct · x
s.t. A · x ≤ b
(LP)
n
x∈Q
polynomiell in hLPi) löst, wobei hLPi = hAi + hbi + hci die Eingabelänge des linearen Programms
ist.
Bis zu diesem Satz von Khachiyan wusste niemand, ob lineare Programme in polynomieller Zeit
lösbar sind. Allerdings ist die von Khachiyan benutzte sogenannte Ellipsoidmethode, obwohl
polynomiell, so doch nicht praktisch einsetzbar und kann insbesondere mit der von Danzig entwickelten Simplexmethode nicht mithalten. Der Simplexalgorithmus dagegen ist zwar für die
meisten Eingaben sehr effizient, es gibt aber Instanzen, für die dieses Verfahren eine nichtpolynomielle Laufzeit hat. Mit dem Artikel von Karmarkar [26] Mitte der 1980er Jahre begann die
Entwicklung Innerer-Punkte-Methoden zum Lösen linearer Programme, die dann als polynomielle Verfahren auch praktikabel wurden und mit dem Simplexalgorithmus konkurrieren können.
Für weiterführende Literatur zu diesem Thema sei auf die Übersichtsarbeit von Wright and
Potra [40] verwiesen.
Damit hat der folgende randomisierte Algorithmus für das Problem MaxSat also polynomielle
Laufzeit:
Algorithmus Randomized Rounding MaxSat
Eingabe: C1 ∧ · · · ∧ Cm
1
2
Finde eine optimale Lösung (y1 , . . . , yn ), (z1 , . . . , zn ) des relaxierten Problems LP(MaxSat).
for i = 1 to n do
83
Kapitel 7: Lineare Programmierung: Deterministisches und randomisiertes Runden
3
4
5
6
7
8
9
10
Wähle ai ∈ {0, 1} so, dass
(
1,
ai =
0,
mit Wahrscheinlichkeit yi ,
mit Wahrscheinlichkeit 1 − yi .
if ai = 1 then
µ(xi ) = wahr
else
µ(xi ) = falsch
fi
od
return x1 , . . . , xn
Der Algorithmus interpretiert die Lösung (y1 , . . . , yn ) des relaxierten Problems also als Wahrscheinlichmaß und rundet die Variablen auf 1 bzw. 0 gemäß ihrer Wahrscheinlichkeiten. Diese
Technik wird auch als randomisiertes Runden bezeichnet.
Satz 7.5. Der obige randomisierte Algorithmus hat eine erwartete Güte von 1 − e−1 .
Beweis. Sei φ = C1 ∧ · · · ∧ Cm eine boolesche Formel über den Variablen {x1 , . . . , xn } und
X : {0, 1}n → N die Zufallsvariable, die die Anzahl der erfüllten Klauseln zählt. Weiter definieren
wir für alle i ∈ {1, . . . , m} die Zufallsvariable
(
1, falls (a1 , . . . , an ) Ci erfüllt,
Xi : {0, 1}n → {0, 1}; (a1 , . . . , an ) 7→
0, sonst.
P
Offensichtlich gilt dann X = m
i=1 Xi . Aus der Linearität des Erwartungswertes folgt
Exp [X] =
m
X
Exp [Xi ] .
i=1
Weiter erhalten wir für alle i ∈ {1, . . . , m}
Exp [Xi ] =
1
X
j Pr [Xi = j] = Pr [Xi = 1] .
j=0
Um Pr [Xi = 1] zu berechnen, nutzen wir aus, dass
Pr [Xi = 1] = 1 − Pr [Xi = 0] .
Es gilt nun
Pr [Xi = 0] =
Y
(1 − yi )
gilt
i=1 ti ≥ t
für
alle
t1 , . . . , t k
∈
yi .
i:xi ∈Vj−
i:xi ∈Vj+
Es
Pk
Y
R≥0
und
t
∈
R≥0
k
Y
t k
(1 − ti ) ≤ 1 −
.
k
i=1
Da (y1 , . . . , yn ), (z1 , . . . , zn ) eine Lösung des relaxierten Problems ist, folgt insbesondere
X
X
yi +
(1 − yi ) ≥ zj
i:xi ∈Vj+
i:xi ∈Vj−
mit
(7.1)
84
Kapitel 7: Lineare Programmierung: Deterministisches und randomisiertes Runden
für alle j ∈ {1, . . . , m} und damit aus (7.1)
zj kj
Pr [Xj = 0] ≤ 1 −
,
kj
wobei kj wieder die Anzahl der Literale in Cj sei. Wir erhalten also
Pr [Xj = 1] ≥ 1 − (1 −
zj k j
) .
kj
Es gilt für alle k ∈ N und t ∈ [0, 1]
k
t
1− 1−
k
≥
!
1 k
1− 1−
t.
k
Wenden wir diese Aussage an, so ergibt sich
zj kj
Pr [Xj = 1] ≥ 1 − Pr [Xj = 0] = 1 − 1 −
≥
kj
und damit
Exp [X] ≥
m
X
j=1
!
1 kj
1− 1−
zj ,
kj
!
1 kj
zj .
1− 1−
kj
(7.2)
Da weiter der optimale
so groß ist wie das Optimum
P Wert des relaxierten Problems 1mindestens
kj ≥ (1 − e−1 ), folgt insgesamt
z
≥
OPT(φ),
und
1
−
(1
−
von MaxSat, d. h. m
)
j
j=1
kj
Exp [X] ≥
m
m
X
X
(1 − e−1 )zj = (1 − e−1 )
zj ≥ (1 − e−1 ) OPT(φ),
j=1
j=1
und damit die Behauptung.
Wir kommen nun zu dem am Anfang versprochenen randomisierten Approximationsalgorithmus
mit Güte 34 . Die Idee dazu stammt von Goemans und Williamson [11].
Satz 7.6. Wendet man die Algorithmen Randomized Rounding MaxSat und
RandomSat auf eine Formel φ an und nimmt dann diejenige Lösung, die mehr Klauseln
erfüllt, so erhalten wir einen randomisierten Algorithmus mit erwarteter Güte 43 .
Beweis. Sei also n1 bzw. n2 die erwartete Anzahl von Klauseln, die von der durch
RandomSat bzw. Randomized Rounding MaxSat gefundenen Belegung erfüllt werden.
Im Beweis von Satz 7.5 (Formel (7.2)) haben wir gesehen, dass
!
m
X
1 kj
n2 ≥
1− 1−
zj .
kj
j=1
Weiter gilt nach Gleichung (6.1) im Beweis von Satz 6.5
n1 =
m
X
j=1
(1 − 2−kj )
Kapitel 7: Lineare Programmierung: Deterministisches und randomisiertes Runden
85
und, da zj ≤ 1 für alle j ∈ {1, . . . , m}, somit
n1 ≥
m
X
(1 − 2−kj )zj .
j=1
Damit erhalten wir
m
max(n1 , n2 ) ≥
i
n1 + n2
1 Xh
≥
(1 − 2−kj ) + (1 − (1 − kj−1 )kj ) zj .
2
2
j=1
Da für alle k ∈ N
3
(1 − 2−k ) + 1 − (1 − k −1 )k ≥
P 2
und, wie wir schon im letzten Beweis ausgenutzt haben, m
j=1 zj ≥ OPT(φ), folgt
m
max(n1 , n2 ) ≥
3X
3
zj ≥ OPT(φ).
4
4
j=1
Unabhängig von Goemans und Williamson veröffentlichte Yannakakis in demselben Jahr in [41]
ebenfalls einen Approximationsalgorithmus für MaxSat, der eine Güte von 3/4 garantiert.
7.2 Min Set Cover
Die zweite Idee, die einem in den Sinn kommt, aus einer Lösung (x1 , . . . , xn ) des relaxierten
linearen Programms eine ganzzahlige Lösung zu gewinnen, ist, die fraktionale Lösung deterministisch zu runden. Genauer geben wir uns eine Schranke α ∈ (0, 1) vor und runden jeden Wert
xi ≥ α auf 1 und jeden Wert xi < α auf 0. Wir erhalten so einen Approximationsalgorithmus
mit Güte 1/α (für ein Minimierungsproblem) bzw. einen mit Güte α (für ein Maximierungsproblem), wenn die so gewonnenen Lösungen immer noch zulässig sind (siehe den Beweis von Satz
7.8). Die Untersuchungen in diesem Abschnitt gehen auf Hochbaum zurück, siehe [15].
Der Trick besteht dann darin, die Schranke α so zu wählen, dass alle durch das Runden gewonnenen Lösungen tatsächlich zulässige Lösungen des ganzzahligen linearen Programms sind. Wir
wollen dies am Beispiel des Problems Min Set Cover erläutern, das wir bereits in Abschnitt ??
behandelt haben. Zunächst zur Erinnerung die Formulierung des Problems:
Optimierungsproblem 7.7 (Min Set Cover).
S
Eingabe: Eine Menge S = {1, . . . , n}, F = {S1 , . . . , Sm } mit Si ⊆ S und Si ∈F Si = S.
S
Ausgabe: Eine Teilmenge F 0 ⊆ F mit Si ∈F 0 Si = S so, dass |F 0 | minimal ist.
Die Formulierung von Min Set Cover in ein ganzzahliges lineares Programm lautet somit:
min
m
X
xi
i=1
s.t.
X
xi ≥ 1,
für alle sj ∈ S
(ILP(Min Set Cover))
i:sj ∈Si
xi ∈ {0, 1},
für alle i ≤ m.
Das relaxierte Problem ist damit wie üblich
m
X
min
xi
i=1
s.t.
X
xi ≥ 1,
für alle sj ∈ S
i:sj ∈Si
xi ∈ [0, 1],
für alle i ≤ m.
(LP(Min Set Cover))
86
Kapitel 7: Lineare Programmierung: Deterministisches und randomisiertes Runden
Sei nun (S, F ) eine Instanz des Problems Min Set Cover. Offensichtlich bildet dann H :=
(S, F ) einen Hypergraphen. Wir bezeichnen mit
∆S := max |{Si ∈ F ; s ∈ Si }|
s∈S
den Maximalgrad von H. Der Wert 1/∆S wird dann genau unserer gesuchten Schranke für das
deterministische Runden entsprechen.
Algorithmus LPSC
Eingabe: S, F
1
2
3
4
5
6
7
8
Finde eine optimale Lösung x1 , . . . , xm des relaxierten Programms LP(Min Set
Cover).
C=∅
for i = 1 to m do
if xi > 1/∆S then
C = C ∪ {Si }
fi
od
return C
Satz 7.8. Der Algorithmus LPSC hat eine Approximationsgüte von ∆S .
Beweis. Wir müssen zunächst einsehen, dass der obige Algorithmus tatsächlich immer eine zulässige Lösung ausgibt, d. h., dass jedes Element aus S überdeckt wird.
Sei dazu s ∈ S und x = (x1 , . . . , xm ) eine optimale Lösung des relaxierten Programms. Da s in
höchstens ∆S Mengen S1 , . . . , Sm enthalten ist und die Ungleichung
X
xi ≥ 1
i:s∈Si
von x erfüllt wird, gibt es mindestens ein j ≤ m so, dass xj ≥ 1/∆S . Also wird mindestens
eine Menge, in der s enthalten ist, in die Überdeckung C aufgenommen, woraus die Behauptung
folgt.
Der zweite Teil des Satzes ist nun schnell gezeigt. Sei
OPT(LP(Set Cover)) bzw. OPT(ILP(Set Cover))
der Wert einer optimalen Lösung des relaxierten Problems bzw. der Wert einer optimalen Lösung
des ganzzahligen linearen Programms. Dann gilt, da x eine optimale Lösung ist,
m
X
xi = OPT(LP(Set Cover)).
i=1
Weiter ist
OPT(LP(Set Cover)) ≤ OPT(ILP(Set Cover))
und
|C| =
X
i:Si ∈C
woraus die Behauptung folgt.
1≤
m
X
i=1
∆S xi = ∆S
m
X
i=1
xi ,
Literaturverzeichnis
[1] Alon, N. und J. Spencer: Ten lectures on the Probabilistic Method. SIAM, 1987.
[2] Arora, S., C. Lund, R. Motwani, M. Sudan und M. Szegedy: Proof Verification and
Hardness of Approximation Problems. In: FOCS, Seiten 14–23, 1992.
[3] Berger, B. und J. Rompel: A better performance guarantee for approximate graph coloring. Algorithmica, 5(4):459–466, 1990.
[4] Christofides, N.: Worst-case analysis of a new heuristic for the traveling salesman problem. In: Traub, J. F. (Herausgeber): Symposium on New Directions and Recent Results
in Algorithms and Complexity. Academic Press, Orlando, Fla., 1976.
[5] Cook, S. A.: The complexitiy of theorem-proving procedures. In: STOC, Seiten 151–158,
1971.
[6] Cormen, Th. T., Ch. E. Leiserson und R. L. Rivest: Introduction to algorithms. MIT
Press, Cambridge, MA, USA, 1990.
[7] Diestel, R.: Graph Theory (Graduate Texts in Mathematics). Springer, August 2005.
[8] Garey, M. R., R. L. Graham und D. S. Johnson: Some NP-Complete Geometric
Problems. In: Conference Record of the Eighth Annual ACM Symposium on Theory of
Computing, 3-5 May 1976, Hershey, Pennsylvania, USA, Seiten 10–22. ACM, 1976.
[9] Garey, M. R. und D. S. Johnson: Computers and Intractability: A Guide to the Theory
of NP-Completeness. W. H. Freeman, 1979.
[10] Gavril, F. private communication, 1974.
[11] Goemans, M. X. und D. P. Williamson: New 3/4 approximation algorithm for MAXSAT. SIAM J. of Discrete Mathematics, 7:656–666, 1994.
[12] Graham, R.: Bounds for certain multiprocessor timing anomalies. SIAM J. Appl. Math.,
17:416–426, 1969.
[13] Halldórsson, M. M.: A Still Better Performance Guarantee for Approximate Graph
Colorings. Information Processing Letters, 1993.
[14] Halldórsson, M. M. und J. Radhakrishnan: Greed is good: Approximating independent
sets in sparse and bounded-degree graphs. Algorithmica, 18:145–163, 1997.
[15] Hochbaum, D. S.: Approximation Algorithms for the Set Covering and Vertex Cover Problems. SIAM J. Comput., 11(3):555–556, 1982.
[16] Hochbaum, D. S.: Approximation covering and packing problems. In: Hochbaum, D. S.
(Herausgeber): Approximation Algorithms for NP-Hard Problems. PWS Publishing Company, 1997.
[17] Hochbaum, D. S. und A. Pathria: Analysis of the greedy approach in covering problems.
unpublished manuscript, 1994.
[18] Hochbaum, D. S. und D. B. Shmoys: Using dual approximation algorithms for scheduling
problems theoretical and practical results. J. ACM, 34(1):144–162, 1987.
[19] Jansen, K., M. Karpinski, A. Lingas und E. Seidel: Polynomial time approximation
schemes for max-bisection on planar nd geometric graphs. SIAM Journal of Computing,
35:110–119, 2005.
87
88
Literaturverzeichnis
[20] Jansen, K. und R. Solis-Oba: A polynomial time approximation scheme for the square
packing problem. erscheint in: Integer Programming and Combinatorial Optimization, IPCO
2008.
[21] Jansen, K., R. Solis-Oba und M. Sviridenko: Makespan minimization in job shop: a
linear time approximation scheme. SIAM Journal on Discrete Mathematics, 16:288–300,
2003.
[22] Jansen, K. und G. Zhang: On rectangle packing: maximizing benefits. Algorithmica,
47:323–342, 2007.
[23] Jensen, T.R. und B. Toft: Graph Coloring Problems. Wiley-Interscience Series in Discrete Mathematics and Optimization, Wiley, New York, 1995.
[24] Johnson, D. S.: Approximation Algorithms for Combinatorial Problems. J. Comput. Syst.
Sci., 9(3):256–278, 1974.
[25] Johnson, D. S.: Worst case behaviour of graphs coloring algorithms. In: Proc. 5th Southeastern Conf. on Combinatorics, Graph Theory, and Computing. Congressus Numerantium X,
1974.
[26] Karloff, H.: Linear programming. Birkhauser Boston Inc., Cambridge, MA, USA, 1991.
[27] Karp, R. M.: Reducibility among combinatorial problems. In: Miller, R. E. und J. W.
Thatcher (Herausgeber): Complexity of Computer Computations, Plenum Press, Seiten
85–103. 1972.
[28] Kucera, L.: The complexity of clique finding algorithms. 1976.
[29] Lawler, E. L.: Combinatorial Optimization: Networks and Matroids. Holt, Reinhart and
Winston, New York, 1976.
[30] Lenstra, H. W.: Integer programming with a fixed number of variables. Mathematics of
Operations Research, (8):538–548, 1983.
[31] Levin, L. A.: Universal sorting problems. Problems of Information Transmission, 9:265–
266, 1973.
[32] Motwani, R. und P. Raghavan: Randomized Algorithms. Cambridge University Press,
New York, 1995.
[33] Nigmatullin, R. G.: Complexity of the approximate solution of combinatorial problems.
Soviet Math. Dokl., (16):1199–1203, 1975.
[34] Raghavan, P.: Probabilistic construction of deterministic algorithms: approximating
packing integer programs. J. Comput. Syst. Sci., 37(2):130–143, 1988.
[35] Raghavan, P. und C. D. Thompson: Randomized Rounding: A technique for provably
good algorithms and algorithmic proofs. Combinatorica, 7(4):365–373, 1987.
[36] Sahni, S.: Approximate Algorithms for the =/1 Knapsack Problem. J. ACM, 22(1):115–124,
1975.
[37] Sahni, S.: Algorithms for Scheduling Independent Tasks. J. ACM, 23(1):116–127, 1976.
[38] Sahni, S. und T. F. Gonzalez: P-Complete Approximation Problems. J. ACM, 23(3):555–
565, 1976.
[39] Widgerson, A.: Improving the performance guarantee for approximate graph coloring. J.
ACM, 30(4):729–735, 1983.
[40] Wright, S. und F. Potra: Interior point methods. J. Comput. Appl. Math., 124:281–302,
2000.
[41] Yannakakis, M.: On the Approximation of Maximum Satisfiability.
17(3):475–502, 1994.
J. Algorithms,
Symbolindex
Algorithmisches
|I|Σ
Länge einer Instanz, kodiert über Σ, Seite 10
A
Algorithmus, Seite 11
A(I)
Wert der vom Algorithmus A gefundenen Lösung zur Instanz I, Seite 12
δ(I)
Approximationsgüte zur Instanz I, Seite 13
I
Instanzenmenge, Seite 9
hAi
Eingabelänge einer Matrix, Seite 11
hbi
Eingabelänge eines Vektors, Seite 11
hni
Eingabelänge einer natürlichen Zahl, Seite 11
hqi
Eingabelänge einer rationalen Zahl, Seite 11
OPT(I)
Wert einer optimalen Lösung zur Instanz I, Seite 12
Π
Optimierungs- bzw. Entscheidungsproblem, Seite 9
Σ
endliches Alphabet, häufig Σ = {0, 1}, Seite 10
Σ∗
Menge der Wörter über Σ, Seite 10
F
Menge der zulässigen Lösungen, Seite 9
TA (I)
Laufzeit des Algorithmus A für die Eingabe I, Seite 12
YI
Menge der JA-Instanzen, Seite 10
Graphen
χ(G)
chromatische Zahl, Seite 20
Γ(v)
Menge der Nachbarn eines Knotens, Seite 23
G2
Produktgraph G × G, Seite 39
Gc
Komplementgraph von G, Seite 33
G1 × G2
Produkt der beiden Graphen G1 und G2 , Seite 39
89
90
m·G
Literaturverzeichnis
m-te Summe von G, Seite 25
Komplexitätstheorie
O
Menge von Funktionen, Seite 12
Ω
Menge von Funktionen, Seite 12
Θ
Menge von Funktionen, Seite 12
e
O(g)
Menge von Funktionen, Seite 12
o(g)
Menge von Funktionen, Seite 12
TA
Laufzeit des Algorithmus A, Seite 12
Sonstiges
bin(n)
Binärdarstellung einer naturlichen Zahl n, Seite 11
Exp [X]
Erwartungswert einer Zufallsvariablen X, Seite 73
¬
Verneinung, Seite 15
Pr
Wahrscheinlichkeitsmaß, Seite 72
∆
symmetrische Differenz zweier Mengen, Seite 9
∨
logisches ODER, Seite 15
∧
logisches UND, Seite 15
H
harmonische Zahl, Seite 28
W (A, I)
Wahrscheinlichkeitsraum, den ein randomisierter Algorithmus A zur Eingabe I benutzt, Seite 77
Index
0-9
3Sat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
A
Algorithmus
randomisierter ∼ . . . . . . . . . . . . . . . . . . . . 75
Approximationsfaktor . . . . . . . . . . . . . . . . . . . 13
Approximationsgüte . . . . . . . . . . . . . . . . . . . . . 13
additive ∼ . . . . . . . . . . . . . . . . . . . . . . . . . . 20
erwartete ∼ . . . . . . . . . . . . . . . . . . . . . . . . . 77
multiplikative ∼. . . . . . . . . . . . . . . . . . . . .13
Approximationsschema . . . . . . . . . . . . . . . . . . 62
aussagenlogische Formel . . . . . . . . . . . . . . . . . 15
B
Baum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
erzeugender ∼ . . . . . . . . . . . . . . . . . . . . . . 51
minimal spannender ∼ . . . . . . . . . . . . . . 51
Belegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Ereignis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Elementar∼ . . . . . . . . . . . . . . . . . . . . . . . . . 72
Erfüllbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Erwartungswert . . . . . . . . . . . . . . . . . . . . . . . . . 73
Linearität des ∼ . . . . . . . . . . . . . . . . . . . . 73
Euler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
EulerKreis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Eulerkreis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
F
Färbung
Knoten∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Formel
aussagenlogische ∼ . . . . . . . . . . . . . . . . . . 15
fraktionale Lösung . . . . . . . . . . . . . . . . . . . . . . 86
G
Gleichverteilung . . . . . . . . . . . . . . . . . . . . . . . . . 72
Graph
Eulerscher ∼ . . . . . . . . . . . . . . . . . . . . . . . . 48
Komplement ∼ . . . . . . . . . . . . . . . . . . . . . 33
Produkt ∼ . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Summe ∼ . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
C
Cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Cauchy–Schwarzsche Ungleichung . . . . . . . 37
chromatische Zahl . . . . . . . . . . . . . . . . . . . . . . . 20
Clique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
D
Differenz
symmetrische ∼ . . . . . . . . . . . . . . . . . . . . . . 9
H
Hamilton Circuit . . . . . . . . . . . . . . . . . . . . . 57
harmonische Zahl . . . . . . . . . . . . . . . . . . . . . . . 28
J
Job Scheduling . . . . . . . . . . . . . . . . . . . . . . . 10
K
E
Königsberger Brückenproblem . . . . . . . . . . . 49
91
92
Index
Knotenfärbung . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Kodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Komplementgraph . . . . . . . . . . . . . . . . . . . . . . 33
konjunktive Normalform . . . . . . . . . . . . . . . . 15
Kreis
Eulerscher ∼ . . . . . . . . . . . . . . . . . . . . . . . . 48
Kruskal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
L
Laufzeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
polynomielle ∼ . . . . . . . . . . . . . . . . . . . . . . 12
Linearität des Erwartungswertes. . . . . . . . .73
Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
LP-Relaxierung . . . . . . . . . . . . . . . . . . . . . . . . . 86
M
m-Summe eines Graphen . . . . . . . . . . . . . . . . 25
Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34, 54
perfektes ∼ . . . . . . . . . . . . . . . . . . . . . . . . . 54
Max Clique . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Max Coverage . . . . . . . . . . . . . . . . . . . . . . . . 29
Max Independent Set . . . . . . . . . . . . . . . . 35
Max Knapsack . . . . . . . . . . . . . . . . . . . . 24, 64
MaxSat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
MaxCut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8, 81
Maximierungsproblem . . . . . . . . . . . . . . . . . . . . 9
Max≥kSat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Min Bin Packing
mit eingeschränkten Gewichten . . . . . . 68
Min ∆TSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Min Job Scheduling . . . . . . . . . . . . 5, 44, 67
Min m-Machine Job Scheduling . . . . 62
Min Node Coloring . . . . . . . . . . . . . . 20, 41
Min Set Cover . . . . . . . . . . . . . . . . . . . . 27, 89
Min Spanning Tree . . . . . . . . . . . . . . . . . . . 51
Min Traveling Salesman . . . . . . . . . . . . 47
Min Vertex Cover . . . . . . . . . . . . . . . . . . . 33
Minimierungsproblem . . . . . . . . . . . . . . . . . . . . 9
O
Optimierungsproblem . . . . . . . . . . . . . . . . . . . . 9
P
Partitionssatz . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Probleme
3Sat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Clique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
EulerKreis. . . . . . . . . . . . . . . . . . . . . . . .48
Hamilton Circuit . . . . . . . . . . . . . . . . 57
Job Scheduling . . . . . . . . . . . . . . . . . . . 10
Max Clique . . . . . . . . . . . . . . . . . . . . . . . 25
Max Coverage. . . . . . . . . . . . . . . . . . . .29
Max Independent Set . . . . . . . . . . . . 35
Max Knapsack . . . . . . . . . . . . . . . . 24, 64
MaxSat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
MaxCut . . . . . . . . . . . . . . . . . . . . . . . . . 8, 81
Max≥kSat . . . . . . . . . . . . . . . . . . . . . . . . . 71
Min Bin Packing
mit eingeschränkten Gewichten. . . .68
Min ∆TSP . . . . . . . . . . . . . . . . . . . . . . . . . 48
Min Job Scheduling. . . . . . . .5, 44, 67
Min m-Machine Job Scheduling 62
Min Node Coloring . . . . . . . . . . 20, 41
Min Set Cover . . . . . . . . . . . . . . . . 27, 89
Min Spanning Tree . . . . . . . . . . . . . . . 51
Min Traveling Salesman . . . . . . . . 47
Min Vertex Cover . . . . . . . . . . . . . . . 33
Node 3-Coloring . . . . . . . . . . . . . . . . . 21
Sat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
PTAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
R
randomisierter Algorithmus . . . . . . . . . . . . . 75
Runden
randomisiertes ∼ . . . . . . . . . . . . . . . . . . . . 87
Rundreise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
S
N
Nachbarn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Node 3-Coloring . . . . . . . . . . . . . . . . . . . . . 21
Normalform
konjunktive ∼. . . . . . . . . . . . . . . . . . . . . . .15
Sat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Schwarz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
T
Index
Turingmaschine . . . . . . . . . . . . . . . . . . . . . . . . . 12
W
Wahrscheinlichkeitsmaß . . . . . . . . . . . . . . . . . 72
Z
Zeitkomplexität . . . . . . . . . . . . . . . . . . . . . . . . . 12
Zufallsvariable . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Summe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
93
Herunterladen