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