Randomisierte Algorithmen & Probabilistische Analyse
Sven O. Krumke Entwurf vom 5. April 2004
Technische Universität Berlin
ii
Dieses Skript basiert auf der Vorlesung »Randomisierte Algorithmen & Probabilistische Analyse« (Sommersemester 2003) an der Technischen Universität Berlin. Über Kritik, Verbesserungsvorschläge oder gefundene Tippfehler würden ich mich sehr freuen!
Sven O. Krumke
[email protected]
Inhaltsverzeichnis 1 Einleitung 1.1 Zielgruppe und Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Danksagung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 1
2 Einführung 2.1 Das Sekretärinnen-Problem . . . . . 2.1.1 Worst-Case-Analyse . . . . 2.1.2 Probabilistische Analyse . . 2.1.3 Randomisierte Algorithmen 2.2 Zweimal Quicksort . . . . . . . . . 2.2.1 Probabilistische Analyse . . 2.2.2 Randomisierte Algorithmen
. . . . . . .
3 3 4 4 7 7 7 9
. . . . .
13 13 17 19 22 27
4 Momente und Abweichungen 4.1 Die Markov-Ungleichung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Die Chebyshev-Ungleichung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Chernoff-Schranken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33 33 35 36
5 Graphenalgorithmen 5.1 Minimale Schnitte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Minimale aufspannende Bäume . . . . . . . . . . . . . . . . . . . . . 5.2.1 Der Algorithmus von Boruvka . . . . . . . . . . . . . . . . . . 5.2.2 Schwere Kanten . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.3 Zufällige Stichproben für die MST-Berechnung . . . . . . . . . 5.2.4 Anhang: Der MST-Verifikationsalgorithmus mit Linearzeit . . . 5.2.5 Anhang: Der Kruskal-Algorithmus zur Bestimmung eines MST
43 43 46 46 48 48 54 55
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
3 Grundlegende Techniken 3.1 Bedingte Wahrscheinlichkeiten, Unabhängigkeit und einfache Erfolgssteigerung 3.2 Das Prinzip der verzögerten Entscheidungen . . . . . . . . . . . . . . . . . . . 3.3 Das Coupon-Sammler-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Erzeugende Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Untere Schranken durch das Prinzip von Yao . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . .
iv 6 Approximationsalgorithmen 6.1 Randomisiertes Runden: Ein einfacher Algorithmus für M IN S ET C OVER 6.2 Randomisiertes Runden für M AX S AT . . . . . . . . . . . . . . . . . . 6.3 Semidefinite Programmierung und M AX C UT . . . . . . . . . . . . . . 6.3.1 Ein einfacher Algorithmus für M AX C UT . . . . . . . . . . . . 6.3.2 Der Algorithmus von Goemans und Williamson . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
57 57 59 62 63 63
7 Algebra (huuhh!) und Zufall 7.1 Die Technik von Freivalds . . . . . . . . . . . . . . . . 7.2 Schnelle Beweise für NP: Probabilistische Beweisprüfer 7.2.1 Codierung des Beweises . . . . . . . . . . . . . 7.2.2 Falsche Beweise und die Verifikation . . . . . . 7.3 Primzahltests . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Ein Pseudoprimzahltest . . . . . . . . . . . . . . 7.3.2 Der Miller-Rabin Primzahltest . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
65 65 66 69 70 73 73 75
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
A Abkürzungen und Symbole
79
B Komplexität von Algorithmen B.1 Größenordnung von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Berechnungsmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.3 Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81 81 81 82
C Mathematische Hilfsmittel
83
D Diskrete Wahrscheinlichkeit D.1 Wahrscheinlichkeitsräume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.2 Zufallsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85 85 86
Literaturverzeichnis
87
Einleitung Dieses Skript beschäftigt sich mit zwei wichtigen Themenfeldern, in denen der Zufall in der Algorithmik zum Tragen kommt. Der erste Themenblock bietet anhand von ausgewählten Themen einen Einblick in den Entwurf und die Analyse von randomisierten Algorithmen. Ein Algorithmus heißt randomisiert, wenn sein Ablauf bei fester Eingabe von Zufallsgrößen beeinflusst wird. Bildlich sagt man: Der Algorithmus wirft Münzen. Randomisierte Algorithmen entschärfen viele Worst-Case-Szenarien. Oft kann man einen randomisierten Algorithmus finden, der viel einfacher und zudem (im Erwartungswert oder mit hoher Wahrscheinlichkeit) schneller ist als der bestmögliche deterministische Algorithmus. Der zweite Themenschwerpunkt des Skripts ist die probabilistische Analyse von (deterministischen) Algorithmen, d.h., die Analyse von Algorithmen bei zufälliger Eingabe. Hier geht es darum, das Verhalten bei »typischen« Eingaben zu analysieren und dabei bessere Aussagen zu erhalten als bei einer klassischen Worst-Case-Analyse.
1.1 Zielgruppe und Voraussetzungen Das Skript und die zugrundeliegende Vorlesung richten sich an Studenten der Mathematik und Informatik im Grund- und Hauptstudium. Grundkenntnisse der Kombinatorischen Optimierung (Graphen, Netzwerke) sowie sind hilfreich, aber nicht zwingend erforderlich. Wir setzen lediglich sehr grundlegende Kenntnisse der Wahrscheinlichkeitstheorie und Stochastik voraus. Alle benötigten Werkzeuge aus diesem Zweig der Mathematik werden an der Stelle, wo wir sie benötigen nochmals kurz wiederholt bzw. erarbeitet. Im Anhang dieses Skripts sind ein paar Grundlagen aus der Wahrscheinlichkeitstheorie sowie aus der Komplexitätstheorie (O-Notation, Berechnungsmodell, etc.) erklärt. Hervorragende Einführungen bieten hier die Bücher [3] (Wahrscheinlichkeitstheorie), [2] (Algorithmen), [4] (Komplexität).
1.2 Danksagung Ich möchte mich bei allen Teilnehmern der Vorlesung für Ihre Kommentare und Fragen zum Stoff bedanken.
1.3 Literatur Bücher zum Thema sind:
2
Einführung Wir definieren zunächst die grundlegendsten Begriffe und Notationen aus dem Bereich der Wahrscheinlichkeitsrechnung. Für das Material im Skript genügt es, diskrete Wahrscheinlichkeitsräume zu betrachten. Das Skript ist so aufgebaut, daß immer nur die Begriffe eingeführt werden, die wir bis zu diesem Zeitpunkt benötigen. Die Idee war, daß damit ermüdende Definitionsreihen vermieden werden. Eine Zusammenfassung der Begriffe findest sich in Anhang D. Definition 2.1 (Wahrscheinlichkeitsraum) Ein (diskreter) Wahrscheinlichkeitsraum ist ein Paar (Ω, Pr), wobei Ω eine nichtleere abzählbare Menge und Pr: : Ω → R≥0 ein Wahrscheinlichkeitsmaß, d.h. eine Funktion mit X Pr [ω] = 1 ω∈Ω
ist. Die Elemente in Ω heißen Elementarereignisse, eine Menge E ⊂ Ω ein Ereignis. Man setzt Pr auf die Ereignisse per X Pr [E] := Pr [ω] ω∈E
fort. 1 Ist Ω endlich und Pr [ω] = |Ω| für alle ω ∈ Ω, so nennen wir Pr die Gleichverteilung + auf Ω. Mit Ω bezeichnen wir die Menge aller Elementarereignisse mit strikt positiver Wahrscheinlichkeit: Ω+ := { ω ∈ Ω : Pr [ω] > 0 }.
Eigenschaft 2.2 Aus Definition 2.1 folgt, daß ein Wahrscheinlichkeitsmaß folgende Bedingungen erfüllt:
(i) Für jedes Ereignis E ⊆ Ω gilt: 0 ≤ Pr [E] ≤ 1. (ii) Füreine P Menge { Ei : i ∈ I } von paarweise disjunkten Ereignissen gilt: S abzählbare Pr i∈I Ei = i∈I Pr [Ei ].
2.1 Das Sekretärinnen-Problem Unser erstes Beispiel für die Themen dieses Skripts ist eine Variante des SekretärinnenProblems. Professor K muß eine neue Sekretärin einstellen. Im öffentlichen Dienst herrschen wie üblich seltsame Regeln. Es haben sich n Kandidatinnen beworben. Professor K
4
Einführung kann sich die Bewerberinnen einzeln anschauen und muß dann unmittelbar entscheiden, ob er eine Bewerberin einstellt oder nicht. K verfolgt die persönliche Vorgabe, immer die bestmögliche Sekretärin zu haben. Sollte er daher bereits eine Sekretärin eingestellt haben und danach eine bessere befragen, so wird er die alte Sekretärin sofort entlassen und die neue einstellen. Allerdings kostet K das Entlassen einer Sekretärin bEUR. Die Einstell-Strategie von K ist in Algorithmus K-S EKRETÄRIN (Algorithmus 2.1) dargestellt. Algorithmus 2.1 Professor Ks Algorithmus für die Auswahl einer Sekretärin. K-S EKRETÄRIN(n) Input: Eine Anzahl n von Bewerberinnen {s1 , . . . , sn } Output: Die beste Kandidatin aus {s1 , . . . , sn } 1 best ← 0 { Die Dummy-Kandidatin 0 ist schlechter als alle anderen Bewerberinnen. } 2 for i ← 1, . . . , n do 3 Führe ein Gespräch mit Kandidatin si 4 if si ist besser als die Kandidatin best then 5 best ← si 6 Stelle si ein. 7 end if 8 end for In den folgenden drei Abschnitten beschäftigen wir uns mit der Analyse des Algorithmus K-S EKRETÄRIN und illustrieren dabei die Worst-Case-Analyse, die probabilistische Analyse und die Analyse von randomisierten Algorithmen. Wir beschränken uns dabei auf die Kosten, die K-S EKRETÄRIN zum Entlassen von Sekretärinnen benötigt. Wir nehmen im Folgenden an, daß die Bewerberinnen vollständig geordnet sind und keine zwei Bewerberinnen die gleiche Güte besitzen. Unter diesen Voraussetzungen können wir ohne Beschränkung der Allgemeinheit annehmen, daß die Güten der n Bewerberinnen Werte aus [n] := {1, . . . , n} sind. Um unnötige Notation zu vermeiden, benutzen wir s i gleichzeitig für die Bewerberin i und ihre Güte. Unsere Voraussetzung heißt also, daß die s i eine Permutation von [n] sind.
2.1.1 Worst-Case-Analyse Offenbar ist (n − 1)b eine obere Schranke für die Kosten von K-S EKRETÄRIN: jede der n Kandidatinnen bis auf die beste kann höchstens einmal entlassen werden. Diese Schranke ist allerdings auch scharf: Falls die Bewerberinnen in aufsteigender Qualität präsentiert werden, so wird tatsächlich jede Kandidatin bis auf die letzte entlassen. Satz 2.3 Im schlechtesten Fall erzeugt K-S EKRETÄRIN Kosten (n − 1)b.
2
Normalerweise wird man annehmen, daß der schlechteste Fall, auf den sich der obige Satz beruft, in der Praxis kaum eintritt. Wir würden also erwarten, daß K-S EKRETÄRIN »normalerweise« oder »typischerweise« deutlich geringere Kosten als Ω(nb) erzeugt.
2.1.2 Probabilistische Analyse Bei der probabilistischen Analyse setzen wir voraus, daß die Eingabe für einen Algorithmus »zufällig« gewählt wird. Dabei muß man sehr vorsichtig sein, was »zufällig« genau heißen soll, d.h., man muß rechtfertigen, welche Annahmen man über die Verteilung der Eingabe macht.
2.1 Das Sekretärinnen-Problem
5
Für unsere Sekretärinnen-Problem nehmen wir an, daß die Kandidatinnen in einer zufälligen Reihenfolge erscheinen: Für eine Permutatation π von [n] := {1, . . . , n} ist die Wahrscheinlichkeit, daß die Sekretärinnen in der Reihenfolge π(1), . . . , π(n) erscheinen, genau 1/n!. Wir analysieren nun die erwarteten Kosten von Algorithmus K-S EKRETÄRIN unter unserem einfachen Zufallsmodell. Die Kosten, die der Algorithmus produziert, werden zu einer Zufallsvariable: Definition 2.4 (Zufallsvariable) Eine Zufallsvariable X ist eine Funktion X : Ω → R. Für x ∈ R bezeichnet Pr [X = x] die Wahrscheinlichkeit des Ereignisses { ω ∈ Ω : X(ω) = x }. Definition 2.5 (Erwartungswert einer Zufallsvariablen) Der Erwartungswert E [X] von X ist definiert als E [X] =
X
x∈X(Ω+ )
x · Pr [X = x] ,
sofern die obige Reihe absolut konvergiert. Es bezeichne die Zufallsvariable Y die Kosten von K-S EKRETÄRIN. Sei außerdem X die Zufallsvariable, die angibt, wie oft K-S EKRETÄRIN eine Sekretärin einstellt. Dann gilt Y = b(X − 1). Unser Ziel ist es, den Erwartungswert E [Y ] zu berechnen. Wenn man dabei Definition 2.5 direkt anwendet, so ist die Berechnung recht aufwändig. Wir benutzen daher eine nützliche Eigenschaft, die Linearität des Erwartungswertes: Eigenschaft 2.6 Seien X1 , . . . , Xk Zufallsvariablen und h : Rk → R eine lineare Funktion. Dann gilt: E [h(X1 , . . . , Xk )] = h(E [X1 ] , . . . , E [Xk ]). Eigenschaft 2.6 können wir wie folgt ausnutzen. Sei für i = 1, . . . , n die Zufallsvariable X i definiert durch: ( 1 , falls Kandidatin si eingestellt wird, Xi := 0 , sonst. Pn Dann gilt X = i=1 Xi und daher: # " n n X X E [Xi ] − b. Xi − b = b · E [Y ] = E [b(X − 1)] = b · E [X] − b = b · E i=1
i=1
Wenn wir also die Erwartungswerte E [Xi ] ausrechnen können, dann haben wir E [X] und damit auch E [Y ]. Die Xi nennt man auch Indikator-Variablen, da sie nur Werte aus {0, 1} annehmen und genau dann eins sind, wenn ein bestimmtes Ereignis eintritt. Wir haben nach Definition 2.5: E [Xi ] = 0 · Pr [Xi = 0] + 1 · Pr [Xi = 1] = Pr [Xi = 1] .
(2.1)
Die Wahrscheinlichkeit Pr [Xi = 1] ist die Wahrscheinlichkeit, daß si größer ist als alle sj mit j = 1, . . . , i − 1. Mit anderen Worten: Pr [Xi = 1] = Pr [si > max{s1 , . . . , si−1 }] .
(2.2)
Die Wahrscheinlichkeit (2.2) kann man (mindestens) auf zwei Arten berechnen. Wir benutzen zuerst die »schwierige«. Es gibt ni Möglichkeiten, aus den n Elementen die ersten i
6
Einführung zu wählen. Wenn die ersten i Elemente feststehen, so gibt es genau (i − 1)! Permutationen, bei denen das größte Element an der Stelle i steht. Da man die Elemente an den Positionen i + 1, . . . , n auf (n − i)! Arten permutieren kann, gibt es also insgesamt (i − 1)! ni (n − i)! Permutationen der Zahlen aus [n], bei denen das ite Element größer ist als die Elemente an der vorangegangenen Stellen. Da wir insgesamt n! Permutationen haben, folgt: Pr [si > max{s1 , . . . , si−1 }] =
(i − 1)!
n i
n!
(n − i)!
=
(i − 1)! ·
n! (n−i)!i!
n!
· (n − i)!
=
1 . i
Zusammen mit (2.2) haben wir dann: E [X] =
n X i=1
E [Xi ] =
n X 1 i=1
i
= Hn .
(2.3)
Die Zahl Hn bezeichnet man als harmonische Zahl der Ordnung n. Eigenschaft 2.7 Die harmonischen Zahlen Hn erfüllen für n ≥ 1 die folgenden Ungleichungen: ln(n + 1) ≤ Hn ≤ ln n + 1. Gleichung (2.3) liefert uns den gesuchten Erwartungswert für X und aufgrund der Linearität des Erwartungswertes auch für Y . Wir haben also folgendes Ergebnis: Satz 2.8 Falls die Bewerberinnen in einer zufälligen Reihenfolge präsentiert werden, so hat der Algorithmus K-S EKRETÄRIN (erwartete) Kosten b · Hn − b = O(b ln n). 2 Die erwarteten Kosten von K-S EKRETÄRIN sind also deutlich geringer also die Worst-Case Kosten von Ω(bn).
Rückwärtsanalyse Bevor wir zur Analyse von randomisierten Algorithmen für das Sekretärinnen-Problem übergehen, soll hier noch ein nützliches Hilfsmittel vorgestellt werden, das die Berechnung von Wahrscheinlichkeiten oft deutlich vereinfacht. Unter anderem liefert es uns die versprochene »einfache Möglichkeit«, um die Wahrscheinlichkeiten Pr [X i = 1] auszurechnen. In unserem Beispiel geht es darum, die Wahrscheinlichkeit Pr [si > max{s1 , . . . , si−1 }] zu berechnen. Wir formulieren das Zufallsexperiment neu, indem wir die Permuation »rückwärts« erzeugen: si werde gleichverteilt aus [n] \ {si+1 , . . . , sn } gewählt (i = n, n − 1, . . . , 1). Man sieht leicht, daß hierbau ebenfalls jede Permuation mit Wahrscheinlichkeit 1/n! erzeugt wird. Mit dieser äquivalenten Formulierung können wir die gesuchte Wahrscheinlichkeit leicht berechnen. Da bei der Wahl von si noch genau i Elemente zur Verfügung stehen, ist die Wahrscheinlichkeit, daß si das Maximum dieser i Elemente ist, genau 1/i.
2.2 Zweimal Quicksort
7
2.1.3 Randomisierte Algorithmen Im vorhergehenden Abschnitt haben wir gesehen, daß uns die Kenntnis über die Verteilung der Eingabe helfen kann, das Verhalten von Algorithmen »im Durchschnittsfall« zu bestimmen (Average-Case-Analyse). Oftmals hat man aber keine vernünftigen Informationen über die Wahrscheinlichkeitsverteilung der Eingaben. Möglicherweise kann aber ein randomisierter Algorithmus in folgendem Sinne weiterhelfen: anstelle anzunehmen, daß eine bestimmte Verteilung über der Eingabe vorliegt, erzwingen wir eine solche Verteilung. Der Algorithmus R AND -S EKRETÄRIN (siehe Algorithmus 2.2) führt genau dies für das Sekretärinnen-Problem aus. Er permutiert die Bewerberinnen zunächst in eine zufällige Reihenfolge und benutzt dann den deterministischen Algorithmus K-S EKRETÄRIN, um Einstellungen vorzunehmen. Dabei bekommt K-S EKRETÄRIN die Kandidatinnen in der zufälligen Reihenfolge präsentiert. Algorithmus 2.2 Randomisierter Algorithmus für das Sekretärinnen-Problem R AND -S EKRETÄRIN(n) 1 Wähle eine zufällige Permutation π : [n] → [n]. 2 Benutze K-S EKRETÄRIN, um die Kandidatinnen π(1), π(2), . . . , π(n) zu befragen und einzustellen.
in
der
Reihenfolge
Im Unterschied zur probabilistischen Analyse im letzten Abschnitt stehen wir bei R AND S EKRETÄRIN vor der Situation, daß der Algorithmus bei mehrmaligem Aufruf auf der gleichen Eingabe unterschiedliche Kosten produziert. Der Zufall steckt nun im Algorithmus und nicht in der Eingabe. Allerdings können wir folgenden Schluß vollziehen. R AND -S EKRETÄRIN erzwingt eine Gleichverteilung über der Eingabe. Mit den Ergebnissen aus dem letzten Abschnitt über das Verhalten von K-S EKRETÄRIN folgt damit, daß die erwarteten Kosten von R AND S EKRETÄRIN bei jeder Eingabe b · Hn − b sind: Satz 2.9 Die erwarteten Kosten von Algorithmus R AND -S EKRETÄRIN sind b · Hn − b = O(b ln n). 2 Das besondere an Satz 2.9 ist daran, daß die erwarteten Kosten von O(b ln n) für jede Eingabe gelten. Insbesondere kann kein »Gegenspieler« eine schlechte Reihenfolge produzieren.
2.2 Zweimal Quicksort Unser zweites Beispiel für die Themen des Skripts ist das Sortieren, eine elementare Aufgabe aus dem Bereich der Algorithmen und Datenstrukturen.
2.2.1 Probabilistische Analyse Q UICKSORT ist ein bekannter Algorithmus zum Sortieren. Wir nehmen im Folgenden an, daß alle Schlüsselwerte paarweise verschieden sind. Zum Sortieren von A[1 . . . n] wählt man A[1] = x als »Pivot« und teilt das Array in drei Teilfolgen: A[1, . . . , k − 1] enthält
8
Einführung die Elemente vom Schlüsselwert kleiner x, A[k] enthält x und A[k + 1, . . . , r] enthält die Elemente vom Schlüsselwert größer als x. Die Arrays A[2, . . . , k − 1] und A[k + 1, . . . , n] werden dann rekursiv sortiert. Algorithmus 2.3 zeigt Q UICKSORT im Pseudocode. Das Aufteilen des Arrays ist etwas trickreich. Die Worst-Case-Laufzeit T (n) von Q UICKSORT zum Sortieren eines n elementigen Arrays kann man wie folgt abschätzen (diese Berechnung macht man normalerweise in den grundlegenden Vorlesungen über Algorithmen und Datenstrukturen): Nach dem Aufteilen, das O(n) Zeit benötigt, müssen Arrays der Größe k − 1 und n − k rekursiv sortiert werden. Daher erhält man für T (n) die Rekursionsgleichung: T (0) = T (1) = O(1) T (n) ≤ max (T (k − 1) + T (n − k)) + O(n) 1≤k≤n
(n ≥ 2).
Algorithmus 2.3 Deterministischer Quicksort-Algorithmus zum Sortieren. Q UICKSORT(A, l, r) Input: Ein Array A[1 . . . n] und zwei Indizes 1 ≤ l < r ≤ n Output: Das Teilfeld A[l . . . , r] wird aufsteigend sortiert. 1 x ← A[l] 2 i←l 3 k ←r+1 4 while i < k do 5 repeat 6 i←i+1 7 until A[i] ≥ x 8 repeat 9 k ←k−1 10 until A[k] ≤ x 11 if k > i then 12 vertausche A[k] und A[i] 13 end if 14 end while 15 vertausche A[l] und A[k] 16 if l < k − 1 then 17 Q UICKSORT(A, l, k − 1) 18 end if 19 if k + 1 < r then 20 Q UICKSORT(A, k + 1, r) 21 end if
{ Pivotelement }
Die Lösung der Rekursionsgleichung ist T (n) = Θ(n2 ), wie man leicht mit elementaren Mitteln ausrechnet. Damit hat Q UICKSORT im Worst-Case quadratische Laufzeit. In der Praxis stellt man aber fest, daß Q UICKSORT kaum quadratisches Laufzeitverhalten zeigt. Wie verhält sich der Algorithmus also »typischerweise«? In unserem Beispiel berechnen wir für Q UICKSORT die erwartete Laufzeit unter folgenden Voraussetzungen: Wir nehmen an, daß die Schlüssel alle paarweise verschieden sind und alle Permutationen der Schlüssel gleichwahrscheinlich sind. Unter diesen Voraussetzungen können wir o.B.d.A. annehmen, daß die Schlüssel die ganzen Zahlen 1, . . . , n sind. Wir betrachten die Ausführung von Q UICKSORT(A, 1, n). Was können wir über das Pivotelement x = A[1] unter unseren Voraussetzungen aussagen? Mit Wahrscheinlichkeit jeweils 1/n ist x = k für k = 1, . . . , n. Daher entstehen mit Wahrscheinlichkeit 1/n zwei
2.2 Zweimal Quicksort
9
Teilprobleme der Größen k−1 und n−k. Sofort möchte man nun für die erwartete Laufzeit E(n) folgende Rekursion hinschreiben: E(0) = E(1) = O(1) n 1X (E(k − 1) + E(n − k)) + O(n) E(n) = n k=1
(2.4) (n ≥ 2).
(2.5)
Allerdings besteht noch folgende Hürde. Wir müssen noch zeigen, daß die Teilprobleme die gleiche Struktur wie das Gesamtsproblem haben, d.h., wir müssen beweisen, daß die zufällige Folgen sind, die unsere Wahrscheinlichkeitsannahmen erfüllen. Das dies wirklich so ist, kann man wie folgt einsehen. Sei A[1] = x = k. Nach dem Aufteilen ist A[1 . . . k−1] eine Permutation der Zahlen 1, . . . , k − 1 und A[k + 1 . . . r] eine Permutation der Zahlen k + 1, . . . , r. Vor dem Ausführen von Schritt 15 sieht A dann wie folgt aus: k, i1 , e2 , . . . , ik−1 , jk+1 , jk+2 , . . . , jn .
(2.6)
Dabei ist i1 , . . . , ik−1 eine Permutation der Zahlen 1, . . . , k − 1 und jk+1 , . . . , jn eine Permutation der Zahlen k + 1, . . . , n. Wir müssen zeigen, daß im linken sowie im rechten Teil jede auftretende Permutation gleichwahrscheinlich ist. Dazu berechnen wir, wie viele Permutationen des Gesamtfeldes A[1 . . . n] zu einer bestimmten Permutation führen. Angenommen in Schritt 12 wurden t Vertauschungen durchgeführt. Das bedeutet, daß t mal das linkeste Element im linken Teilproblem mitdem rechtesten Element im rechten Teil n−k Permutationen des Gesamtfeldes, · problem getauscht wurde. Daher existieren k−1 t t die durch t Vertauschungen auf unsere Konstellation in (2.6) führen. Insgesamt gibt es also n X k−1 n−k · t t t=0
(2.7)
Permutationen, die auf (2.6) führen. Die Größe in (2.7) hängt allein von k ab, nicht jedoch von den speziellen Permutationen im linken oder rechten Teilproblem. Daher ist in den Teilproblemen jede Permutation gleichwahrscheinlich und die Rekursion (2.4)–(2.5) für die erwartete Laufzeit ist tatsächlich statthaft. Durch Indexverschiebung vereinfacht sie sich zu: E(0) = E(1) = O(1) E(n) =
n−1 2X E(k − 1) + O(n) n k=0
(n ≥ 2).
Mit den üblichen Tricks (siehe etwa das »Master-Theorem« in [2]) zeigt man, daß die Lösung der Rekursion E(n) = O(n log n) ist. Damit haben wir folgenden Satz bewiesen: Satz 2.10 Der deterministische Algorithmus Q UICKSORT hat im Erwartungswert Laufzeit O(n log n) zum Sortieren von n Elementen. 2
2.2.2 Randomisierte Algorithmen Wir kommen jetzt zu einer randomisierten Variante von Q UICKSORT. Der Algorithmus funktioniert fast wie die deterministische Variante mit folgenden Unterschieden: • Das Pivotelement x wird zufällig und gleichverteilt aus dem zu sortierenden Bereich gewählt.
10
Einführung • Das Aufteilen in die drei Teile. die Elemente A[l . . . k − 1] kleiner als x, A[k] = x und die Elemente A[k + 1 . . . r] größer als x wird nur durch Vergleich mit den PivotElement bestimmt. Der resultierende Algorithmus R AND -Q UICKSORT ist in Algorithmus 2.4 dargestellt. Algorithmus 2.4 Eine randomisierte Variante von Q UICKSORT. R AND -Q UICKSORT(A, l, r) Input: Ein Array A[1 . . . n] und zwei Indizes 1 ≤ l < r ≤ n Output: Das Teilfeld A[l . . . r] wird aufsteigend sortiert. 1 Wähle x aus A[l . . . r] zufällig und gleichverteilt. 2 Teile A[l . . . r] durch Vergleich mit dem Pivotelement x auf in die Elemente A[l . . . k − 1] kleiner als x, A[k] = x und die Elemente A[k + 1 . . . r] größer als x. 3 if l < k − 1 then 4 Q UICKSORT(A, l, k − 1) 5 end if 6 if k + 1 < r then 7 Q UICKSORT(A, k + 1, r) 8 end if Die Laufzeit von R AND -Q UICKSORT ist wieder eine Zufallsvariable. Im Unterschied zur probabilistischen Analyse im letzten Abschnitt ist dies jedoch auch bei einer Worst-Case Eingabe so. Wir werden im Folgenden eine Schranke für die erwartete Worst-Case-Laufzeit von R AND -Q UICKSORT herleiten. Es sei betont, daß wir dabei keinerlei Annahmen über die Verteilung der Eingabe machen. Der Zufall kommt allein durch das Randomisieren im Algorithmus ins Spiel. Da die Laufzeit linear in der Anzahl der Vergleiche ist, werden wir die erwartete Anzahl von Vergleichen abschätzen. Zu einfacheren Notation schreiben wir das Array als Menge A = {a1 , . . . , an } und definieren a(i) als das it-kleinste Element in A. Die Sortierung von A ist dann a(1) < a(2) < · · · < a(n) . Wir führen folgende Zufallsvariablen Xij für 1 ≤ i < j ≤ n ein: ( 1 falls R AND -Q UICKSORT a(i) und a(j) vergleicht, Xij := 0 sonst.
Mit dieser ist die Anzahl X der Vergleiche von R AND -Q UICKSORT die Summe Pn Notation Pn X = i=1 j=i+1 Xij der eben definierten Zufallsvariablen. Aus Eigenschaft 2.6 ergibt sich dann:
E [X] = E =
n X
n n X X
i=1 j=i+1 n X
Xij
E [Xij ] .
i=1 j=i+1
Da Xij nur die Werte 0 und 1 annimmt, gilt E [Xij ] = 0 · Pr [Xij = 0] + 1 · Pr [Xij = 1] = Pr [Xij = 1] . Zur kürzeren Notation setzen wir pij := Pr [Xij = 1]. Damit berechnet sich die erwartete Anzahl von Vergleichen gemäß: E [X] =
n n X X
i=1 j=i+1
pij .
(2.8)
2.2 Zweimal Quicksort
11
Um (2.8) abzuschätzen, betrachten wir den Rekursionsbaum T von R AND -Q UICKSORT. Jeder Knoten in T entspricht einem rekursiven Aufruf von R AND -Q UICKSORT. Die Wurzel repräsentiert R AND -Q UICKSORT(A, 1, n). Wir ordnen jedem Knoten in T das Pivotelement zu, das in diesem Aufruf gewählt wird. Abbildung 2.1 veranschaulicht den Rekursionsbaum an einem Beispiel.
5 1246387
68 7
12 4 3
1 2 3
1
5
6
7
4
8
3
(a) Rekursive Ausführung von R AND Q UICKSORT . Im Knoten des Baums ist das im rekursiven Aufruf zu sortierende Array eingetragen. Das Pivotelement ist durch einen weißen Kreis hervorgehoben.
2
1
6
8
3
(b) Rekursionsbaum T mit den Pivotelementen
Abbildung 2.1: Rekursive Ausführung von R AND -Q UICKSORT und zugehöriger Rekursionsbaum. Das Element in einem Knoten des Rekursionsbaums wird mit allen Elementen in den beiden Teilbäumen. Es findet aber nach unserer Konstruktion des Aufteilens kein Vergleich zwischen den Elementen in den beiden verschiedenen Teilbäumen statt. Daher erfolgt ein Vergleich zwischen a(i) und a(j) genau dann, wenn eines der Elemente Vorfahre des anderen im Rekursionsbaum T ist. Sei π die Permutation der Elemente von A, den man durch ebenenweisen Durchlauf erhält. Im Beispiel von Abbildung 2.1 ist π = 5, 4, 7, 2, 6, 8, 1, 2. Lemma 2.11 Sei i < j . In R AND -Q UICKSORT erfolgt ein Vergleich zwischen a (i) und a(j) genau dann, wenn in der Permutation π eines der Elemente a(i) oder a(j) vor allen Elementen aus {a(i+1) , a(i+2) , . . . , a(j−1) } erscheint. Beweis: Sei a(k) ∈ Sij := {a(i) , a(i+1) , . . . , a(j) } das erste Element der Menge, das in π erscheint. Man beachte, daß Sij vollständig im Teilbaum mit Wurzel a(k) enthalten ist, da kein vorhergehendes Pivot-Element die Menge geteilt hat. Falls k ∈ / {i, j}, so werden a(i) und a(j) in verschiedene Teilbäume eingeordnet, so daß keines der Elemente Vorfahre des anderen ist. Daher findet kein Vergleich zwischen a (i) und a(j) statt. Falls k ∈ {i, j}, so wird a(k) als Pivot mit allen Elementen im linken und rechten Teilbaum verglichen. Insbesondere erfolgt also ein Vergleich zwischen a (i) und a(j) . 2
12
Einführung Satz 2.12 Der Algorithmus R AND -Q UICKSORT benutzt im Erwartungswert höchstens 2nHn Vergleiche, wobei Hn die nte Harmonische Zahl ist: Hn =
n X 1 ≤ ln n + 1. k
k=1
Insbesondere benötigt R AND -Q UICKSORT im Erwartungswert O(n log n) Vergleiche. Beweis: Wir benutzten Lemma 2.11, um die Anzahl der Vergleiche geeignet zu beschränken. Sei i < j. Wir berechnen die Wahrscheinlichkeit pij , so daß in der Permutation π eines der Elemente a(i) oder a(j) vor allen Elementen aus {a(i+1) , a(i+2) , . . . , a(j−1) } erscheint.
Jedes Element aus Sij := {a(i) , a(i+1) , . . . , a(j) } hat gleiche Wahrscheinlichkeit als erstes in π zu erscheinen, da die Pivot-Elemente gleichverteilt gewählt werden. Somit ist die Wahrscheinlichkeit für jedes Element gleich 1 1 = . |Sij | j−i+1 Daher gilt pij = zuerst erscheint.
2 j−i+1 ,
da dies die Wahrscheinlichkeit ist, daß entweder a(i) oder a(j)
Mit (2.8) ergibt sich nun für die erwartete Anzahl der Vergleiche: n n X X
i=1 j=i+1
pij =
n n X X
i=1 j=i+1
=2
2 j −i+1
n n−i+1 X X 1 k i=1 k=2
n X n X 1 ≤2 k i=1 k=1
= 2nHn . Dies war zu zeigen.
2
Grundlegende Techniken In diesem Kapitel lernen wir grundlegende Techniken für die probabilistische Analyse sowie die Konstruktion und Analyse von randomisierten Algorithmen kennen.
3.1 Bedingte Wahrscheinlichkeiten, Unabhängigkeit und einfache Erfolgssteigerung Ein ungerichteter Graph ist ein Paar G = (V, E), wobei V eine endliche Menge und E eine Familie von ungeordneten Paaren aus V ist. Wir erlauben parallele Kanten im Graphen (manchmal bezeichnet man solche Graphen auch als Multi-Graphen). Definition 3.1 (Schnitt in einem ungerichteten Graphen) Sei G = (V, E) ein zusammenhängender ungerichteter Graph. Eine Kantenmenge C ⊆ E heißt ein Schnitt in G, wenn (V, E \ C) nicht mehr zusammenhängend ist.
Ist S ∪ T = V eine Partition von V . Dann nennen wir
[S, T ] := { {u, v} ∈ E : u ∈ S und v ∈ T }
den von S und T erzeugten Schnitt. Wir betrachten im Folgenden das Problem, einen Schnitt C mit minimaler Kardinalität zu finden. Wir bezeichnen mit n := |V | und m := |E| die Anzahl der Ecken bzw. Kanten im Graphen G = (V, E). Es gibt deterministische Algorithmen, die das Problem in Zeit O(mn log(n2 /m)) lösen. In diesem Abschnitt stellen wir einen sehr einfachen randomisierten Algorithmus vor. Wir werden später auf diesem Algorithmus aufbauen, um dann einen komplizierteren Algorithmus mit besseren Eigenschaften zu konstruieren. Zunächst jedoch beweisen wir eine einfache aber nützliche Eigenschaft: Lemma 3.2 Ist G = (V, E) ein ungerichteter Graph und C ∗ ein minimaler Schnitt in G mit |C ∗ | = k Kanten, so hat jede Ecke v ∈ V mindestens Grad k . Weiterhin besitzt G mindestens kn/2 Kanten. Beweis: Für jeden Knoten v ist [{v}, V \ {v}] ein Schnitt der Größe deg(v). Somit gilt k ≤ deg(v) für alle v ∈ V P (sonst wäre C ∗ kein minimaler Schnitt). Der durchschnittliche Grad im Graphen G ist n1 v∈V deg(v) = 2m/n, so daß insbesondere ein Knoten mit Grad höchstens 2m/n existieren muß. Folglich gilt k ≤ 2m/n, bzw. m ≥ kn/n. 2 Unser Hilfsmittel für den Algorithmus sind Kontraktionen von Kanten.
14
Grundlegende Techniken Definition 3.3 (Kontraktion einer Kante) Sei G = (V, E) ein ungerichteter Graph und e = {u, v} ∈ E eine Kante in G. Im Graphen G/e, der durch Kontraktion der Kante e entsteht, werden die beiden Endpunkte u und v zu einer gemeinsamen Ecke verschmolzen, deren die zu allen Nachbarn der Knoten u und v adzazent ist (vgl. Abbildung 3.1).
Formal besitzt G/e die Eckenmenge V \ {u, v} ∪ {z} (wobei wir z ∈ / V annehmen). Die Kantenmenge von G/e ist E \ { {u, v} : {u, v} ∈ E } ∪ { {z, w} : {u, w} ∈ E ∨ {v, w} ∈ E }.
1,2
2
1
4
5
3
(a) Ein ungerichteter Graph G = (V, E). Die zu kontrahierende Kante e = {1, 2} ist gestrichelt eingezeichnet.
4
5
3
(b) Der resultierende Graph G/e nach Kontraktion von e = {1, 2} in G.
Abbildung 3.1: Kontraktion einer Kante in einem ungerichteten Graphen. Kontraktion von Kanten sind das Schlüssel-Hilfsmittel für unseren randomisierten MinCut-Algorithmus. Dazu benötigen wir zunächst folgende einfache Tatsache: Lemma 3.4 Die Größe eines minimalen Schnittes in G = (V, E) ist höchstens der Größe eines minimalen Schnittes in G/e für jedes e ∈ E . Beweis: Jeder Schnitt in G/e induziert einem Schnitt in G mit gleicher Größe.
2
Aus Lemma 3.4 ergibt sich nun die Idee zu einem einfachen Algorithmus. Wir kontrahieren solange sukzessive eine (zufällig ausgewählte) Kante, bis der Graph nur noch aus zwei Ecken besteht. Die Menge der Parallelen zwischen den beiden Knoten ist dann ein Schnitt in G (genauer gesagt, entspricht sie einem Schnitt in G), und wir können sie als »Lösung« ausgeben. Der Algorithmus C ONTRACT nochmals in Algorithmus 3.1 dargestellt. Es sollte klar sein, daß C ONTRACT nicht immer einen minimalen Schnitt findet. Beispielsweise ist im im Graphen aus Abbildung 3.1 der eindeutige minimale Schnitt C ∗ = {{4, 5}} der Größe |C ∗ | = 1. Wird im Verlauf von C ONTRACT irgendwann einmal die Kante {4, 5} kontrahiert, so kann liefert er auf jeden Fall einen Schnitt der Kardinalität mindestens 2, also ein falsches Ergebnis. Wir werden zunächst berechnen, wie groß die Erfolgswahrscheinlichkeit von C ONTRACT ist. Sei C ∗ ein minimaler Schnitt und |C ∗ | = k. Wir schätzen die Wahrscheinlichkeit, daß C ONTRACT den Schnitt C ∗ findet, nach unten ab. Das Ergebnis ist offenbar eine untere Schranke für die Erfolgswahrscheinlichkeit, da G möglicherweise noch andere minimale Schnitte der Größe k enthält.
3.1 Bedingte Wahrscheinlichkeiten, Unabhängigkeit und einfache Erfolgssteigerung Algorithmus 3.1 Ein einfacher randomisierter Algorithmus zur Bestimmung eines minimalen Schnittes. C ONTRACT Input: Ein ungerichteter Graph G = (V, E) Output: Ein Schnitt C in G. 1 while |V | > 2 do 2 Wähle eine Kante e ∈ E zufällig und gleichverteilt aus. 3 Ersetze G durch G/e. 4 end while 5 { Es gilt nun V = {u, v}, E besteht aus parallelen Kanten zwischen u und v. } 6 Setze C := E. 7 return C. Für i = 1, . . . , n − 2 bezeichnen wir mit Ei das Ereignis, daß bei der iten Kontraktion keine Kante aus C ∗ kontrahiert wird. Dann findet C ONTRACT den Schnitt C ∗ mit Wahrscheinlichkeit "n−2 # [ (3.1) Ei . Pr i=1
Umh p zu berechnen, bedienen wir uns einer geschickten Umformulierung von Sn−2 i Pr i=1 Ei mit Hilfe von bedingten Wahrscheinlichkeiten. Wir erinnern kurz an die entsprechenden Definitionen und leiten unser Handwerkszeug her.
Definition 3.5 (Bedingte Wahrscheinlichkeit) Die bedingte Wahrscheinlichkeit von E1 unter der Bedingung E2 mit Pr [E2 ] > 0 ist definiert durch: Pr [E1 ∩ E2 ] . (3.2) Pr [E1 |E2 ] := Pr [E2 ]
Die bedingte Wahrscheinlichkeit Pr [E1 |E2 ] entspricht der Wahrscheinlichkeit, daß das Ergebnis des Zufallsexperiments in E1 liegt, wenn bereits bekannt ist, daß es in E2 enthalten ist. Man beachte, daß (3.2) impliziert, daß Pr [E1 ∩ E2 ] = Pr [E1 |E2 ] · Pr [E2 ] = Pr [E2 |E1 ] · Pr [E1 ] .
(3.3)
Als Spezialfall von (3.2) kann man für Zufallsvariablen X und Y die Ereignisse X = x und Y = y wählen. Dann ist die Wahrscheinlichkeit des Ereignisses X = x unter der Voraussetzung Y = y definiert durch: Pr [X = x|Y = y] =
Pr [X = x ∧ Y = y] . Pr [Y = y]
Durch Induktion erhält man aus (3.3) die folgende nützliche Eigenschaft: Eigenschaft 3.6 Für eine Kollektion {E1 , . . . , Ek } von Ereignissen gilt # " k i−1 k \ Y \ Ej . Pr Ei | Ei = Pr i=1
i=1
j=1
Mit Eigenschaft 3.6 können wir nun die Erfolgswahrscheinlichkeit von C ONTRACT einfach berechnen.
15
16
Grundlegende Techniken Satz 3.7 Sei C ∗ ein beliebiger minimaler Schnitt in G. Der Algorithmus C ONTRACT findet mit Wahrscheinlichkeit mindestens 2/n2 den Schnitt C ∗ . Beweis: Die Wahrscheinlichkeit für das Ereignis E1 , d.h., daß im ersten Schritt keine Kante aus C ∗ gewählt wird,h ist 1 − k/m.iWir betrachten nun allgemein für i ≥ 1 die bedingte Ti−1 Wahrscheinlichkeit Pr Ei | j=1 Ej . Seien im iten Schritt sind in G noch mi Kanten Ti−1 übrig. Die Voraussetzung j=1 Ej besagt, daß wir noch keine der k Kanten aus C ∗ kontrahiert haben. Somit gilt für die Wahrscheinlichkeit, daß wir im iten Schritt keine Kante aus C ∗ kontrahieren: i−1 \ k Pr Ei | (i ≥ 1). (3.4) Ej = 1 − mi j=1 Im iten Schritt hat G noch n − i + 1 Knoten. Die Größe des minimalen Schnittes mindestens k. Mit Lemma 3.2 folgt, daß im iten Schritt noch mindestens m i ≥ k(n − i + 1)/2 Kanten übrig sind. Damit können wir (3.4) weiterführen zu: i−1 \ 2k 2 Ej ≥ 1 − =1− (i ≥ 1). (3.5) Pr Ei | k(n − i + 1) n−i+1 j=1 Wenn wir nun Eigenschaft 3.6 in Zusammenarbeit mit (3.5) benutzen, erhalten wir: "n−2 # n−2 Y \ 2 Pr 1− Ei ≥ n−i+1 i=1 i=1 21 n−2 n−3 n−4 · · ... n n−1 n−2 43 2 = n(n − 1) 2 ≥ 2. n =
Dies zeigt die Behauptung des Satzes.
2
Korollar 3.8 Algorithmus C ONTRACT findet mit Wahrscheinlichkeit mindestens 2/n 2 einen minimalen Schnitt. 2 Wir lernen jetzt noch ein weiteres Standardhilfsmittel kennen. Die Erfolgswahrscheinlichkeit von C ONTRACT läßt sich steigern, indem wir ihn mehrmals laufen lassen, wobei die Zufallsentscheidungen für jeden Lauf unabhängig von den anderen getroffen werden. Wir geben dann den kleinsten gefundenen Schnitt aus. Definition 3.9 (Unabhängigkeit, k-Unabhängigkeit) Eine Kollektion { Ei : i ∈ I } von Ereignissen ist unabhängig, wenn für alle Teilmengen S ⊆ I gilt: " # Y \ Pr Pr [Ei ] . (3.6) Ei = i∈S
i∈S
Die Kollektion von Ereignissen heißt k -unabhängig, falls (3.6) für alle Indexmengen S ⊆ I mit |S| ≤ k gilt. Im Spezialfall k = 2 nennt man die Kollektion auch paarweise unabhängig.
3.2 Das Prinzip der verzögerten Entscheidungen
17
Definition 3.10 (Unabhängigkeit von Zufallsvariablen) Eine Kollektion { Xi : i ∈ I } von Zufallsvariablen ist unabhängig, wenn für alle Teilmengen S ⊆ I und alle Vektoren x ∈ R|S| gilt: # " Y ^ Pr [Xi = xi ] . (3.7) Xi = x i = Pr i∈S
i∈S
Die Kollektion heißt k -unabhängig, wenn (3.7) für alle Indexmengen S ⊆ I mit |S| ≤ k gilt. Im Spezialfall k = 2 nennt man die Variablen paarweise unabhängig. Eigenschaft 3.11 Sind die Zufallsvariablen X und Y unabhängig, so gilt E [XY ] = E [X] E [Y ]. 2 Wenn wir ` Läufe von C ONTRACT durchführen, so wird mit Wahrscheinlichkeit höchstens (1 − n22 )` kein minimaler Schnitt gefunden. Wir benutzen nun die Ungleichung
1 1− t
t
≤
1 e
(t ≥ 1),
(3.8)
die aus Lemma C.1 (ii) im Anhang C folgt. Wir führen also ` := n2 /2 Wiederholungen von C ONTRACT aus und erhalten damit eine Fehlerwahrscheinlichkeit von höchstens 1/e ≈ 0.37. Im Prinzip könnten wir die Fehlerwahrscheinlichkeit durch weitere Wiederholungen noch beliebig nahe an 1 bringen. Jede Wiederholung von C ONTRACT kostet aber natürlich Rechenzeit. Wir werden in Kapitel 5 noch eine Verfeinerung von C ONTRACT kennenlernen.
3.2 Das Prinzip der verzögerten Entscheidungen Im klassischen Hochzeitsproblem aus der Graphentheorie (siehe z.B. [6]) geht es darum, unter welchen Voraussetzungen n Männer zu n Frauen zugeordnet werden können, so daß die von jeder Frau gegebenen »Kompatibilitätsbedingungen«berücksichtigt werden. Jede Frau hat dabei eine Liste von Herren, denen sie zugeordnet werden darf. Wir betrachten hier eine etwas andere Variante von Zuordnungen, nämlich stabile Zuordnungen. Seien n Männer M = {m1 , . . . , mn } und n Frauen F = {f1 , . . . , fn } gegeben. Wir nehmen an, daß jede Person eine absteigend sortierte Präferenzliste hat, in der alle Personen des anderen Geschlechts aufgelistet sind. Eine Zuordnung ist eine bijektive Abbildung zwischen M und F . Ist ϕ : M → F eine Zuordnung, so fassen wir ϕ auch öfters als Teilmenge von M × F auf, und schreiben (m, f ) ∈ ϕ für Elemente m ∈ M und f ∈ F mit ϕ(m) = f . Eine Zuordnung ϕ heißt instabil, wenn es in ihr zwei Paare (m, f ) und (m 0 , f 0 ) gibt, so daß m lieber f 0 als f mag und f 0 auch m dem augenblicklichen Partner m0 bevorzugt. Man nennt dann das Paar (m, f 0 ) unzufrieden in ϕ. Eine Zuordnung heißt stabil, wenn es in ihr keine unzufriedenen Paare gibt. Es ist zunächst gar nicht klar, ob und unter welchen Voraussetzungen eine stabile Zuordnung existiert. Der folgende Satz ist daher etwas überraschend: Satz 3.12 Es existiert immer eine stabile Zuordnung. Diese kann in O(n 2 ) Zeit bestimmt werden. Beweis: Unser Algorithmus zur Berechnung einer stabilen Zuordnung ist sehr einfach. Der Algorithmus P ROPOSAL hält sich eine eine partielle Zuordnung, die anfangs keine Paarung
18
Grundlegende Techniken enthält. In jedem Schritt wählt P ROPOSAL den männlichen Single mi mit kleinstem Index i. Der Mann mi spricht nun die wünschenswerteste Frau fj auf seiner Liste an, die ihn noch nicht zurückgewiesen hat. Die Frau fj akzeptiert mi als neuen Partner, falls sie momentan keinen Partner hat oder der aktuelle Partner mk aus ihrer Sicht weniger wünschenswert als mi ist. Im letztere Fall löst sie ihre Verbindung zu mk und geht die Verbindung mit mi ein. Wir behaupten, daß P ROPOSAL eine stabile Zuordnung liefert. Besitzt eine Frau einmal einen Partner, so wird sie im Verlauf des Algorithmus nie wieder single. Außerdem kann ihr Partner im Verlauf des Algorithmus aus ihrer Sicht nur attraktiver werden. Folglich wird in jedem Schritt entweder ein weiblicher Single einem Mann zugeordnet oder eine bereits zugeordnete Frau bekommt einen aus ihrer Sicht besseren Partner. Wir müssen sicherstellen, daß der in einem Schritt gewählte männliche Single m i noch eine Frau hat, die er ansprechen kann. Dies ist aber der Fall: Nach den Beobachtungen im letzten Absatz ist jede Frau, die mi bereits angesprochen hat, einem Mann zugeordnet. Falls alle Frauen von mi bereits angesprochen wurden, so sind alle Frauen zugeordnet. Dies kann nur dann eintreten, wenn ebenfalls alle Männer zugeordnet sind. Insbesondere existiert dann kein Mann, der ein Single ist. Wir zeigen nun, daß P ROPOSAL nach O(n2 ) Kontaktaufnahmen terminiert. In jedem Schritt eliminiert ein männlicher Single eine Frau aus seiner Präferenzliste. Da die n Listen der n Männer insgesamt n2 Frauen auflisten, muß P ROPOSAL nach höchstens n2 Kontaktaufnahmen terminieren. Es verbleibt nun noch zu zeigen, daß die Zuordnung ϕ, die P ROPOSAL beim Abbruch liefert, tatsächlich stabil ist. Angenommen (m, f 0 ) wäre ein unzufriedenes Paar, so daß (m, f ) ∈ ϕ und (m0 , f 0 ) ∈ ϕ. Da m die Frau f 0 gegenüber f bevorzugt, hat m die Frau f 0 angesprochen, bevor er sich f zuwandte. Zu dem Zeitpunkt, wo m die Frau f 0 ansprach, hat sie ihn entweder akzeptiert oder abgelehnt. Im ersten Fall hat sie ihn später wieder für einen besseren Mann fallengelassen. Im zweiten Fall war sie bereits einem besseren Mann zugeordnet. In jedem Fall muß f 0 mit einem (aus ihrer Sicht) besseren Mann enden als m. Das widerspricht der Tatsache, daß sie bei Abbruch m0 zusammen ist, der für sie weniger attraktiv als m ist. 2 Nach Satz 3.12 benötigt der einfache Algorithmus P ROPOSAL im schlechtesten Fall höchstens O(n2 ) Kontaktaufnahmen. Wir machen uns nun daran, diese Anzahl im Durchschnitt zu analysieren. Dabei nehmen betrachten wir folgendes Zufallsmodell für die Eingabe: Die Listen der Männer sind unabhängig voneinander gleichverteilt gewählt, d.h., für jeden Mann ist seine Präferenzliste eine zufällige Permutation der Frauen, die unabhängig von denjenigen der anderen Männer gewählt wurde. Die Listen der Frauen sind beliebig, müssen aber zu Beginn fixiert sein. Sei TP die Zufallsvariable, die angibt, wie viele Kontaktaufnahmen P ROPOSAL durchführt. Es erscheint sehr schwer, zu analysieren, wie TP verteilt ist, da die einzelnen Kontaktaufnahmen voneinander abhängen. Hier hilft uns das Prinzip der verzögerten Entscheidungen. Beim Prinzip der verzögerten Entscheidungen formuliert man ein Zufallsexperiment äquivalent neu, so daß sich die zufälligen Entscheidungen Schritt für Schritt entfalten, anstelle von Anfang an festgelegt zu werden. In jedem Schritt des zufälligen Prozesses legt man nur diejenigen Zufallsentscheidungen fest (man kann auch sagen: deckt nur diejenigen Zufallsentscheidungen auf), die gerade im Algorithmus benötigt werden. Im konkreten Fall der Analyse von P ROPOSAL funktioniert das Prinzip der verzögerten Entscheidungen wie folgt: Wir nehmen nicht an, daß die Männer ihre Listen bereits zu Anfang zufällig gewählt haben. Stattdessen nehmen wir an, daß die Männer ihre Listen zu Anfang gar nicht kennen (sie sind sozusagen »verdeckt« zufällig gewählt). Jedes Mal, wenn ein Mann eine Frau ansprechen soll, wählt er eine zufällige Frau zufällig gleichverteilt aus denjenigen Frauen aus, die er noch nicht angesprochen hat. Diese Dame ist dann
3.3 Das Coupon-Sammler-Problem
19
per Definition die (für ihn) attraktivste Dame, die ihn bisher noch nicht abgelehnt hat. Dieser sich schrittweise entfaltende Zufallsprozeß ist äquivalent zu unserem Zufallsmodell. Diese Neuformulierung des Zufallsexperiments ist sehr ähnlich zur Rückwärtsanalyse in Abschnitt 2.1.2 auf Seite 6. Auch mit dem neuen Blick auf den Zufallsprozeß scheint die Analyse noch schwierig: die aktuell angesprochene Dame hängt immer noch von den bisherigen Kontaktaufnahmen des Mannes ab. Wir betrachten daher ein leicht geändertes Szenario. Wenn Herr m i eine Frau wählen muß, dann »vergißt« er einfach, welche Damen er bereits angesprochen hat. In jedem Schritt wird die Frau zufällig und gleichverteilt aus der Menge aller n Frauen gewählt. Falls ein Mann eine Dame anspricht, die ihn bereits vorher abgelehnt hat, so wird sie ihn auch diesmal ablehnen (da sich die Frau im Verlauf des Algorithmus immer nur verbessern kann). Offenbar liefert das neue Szenario genau das gleiche Ergebnis wie das alte, allerdings finden eventuell ein paar nutzlose Kontaktaufnahmen statt. Sei T A die Anzahl der Kontaktaufnahmen im geänderten Zufallsexperiement. Dann gilt offenbar für alle k, daß Pr [TA > k] ≥ Pr [TP > k]. Definition 3.13 (Stochastische Dominanz) Seien X und Y zwei Zufallsvariablen über den gleichen Zufallsraum. Die Zufallsvariable X dominiert stochastisch die Variable Y , wenn für alle z ∈ R gilt: Pr [X > z] ≥ Pr [Y > z] . Eigenschaft 3.14 Seien X und Y Zufallsvariablen mit endlichen Erwartungswerten und X domiere Y stochastisch. Dann gilt: E [X] ≥ E [Y ] . Wir werden im nächsten Abschnitt zeigen, daß E [TA ] = O(n log n) gilt. Später werden wir dann auch zeigen, daß die Wahrscheinlichkeit, daß TA (und damit auch TP ) größer als der Erwartungswert ist, sehr schnell abnimmt. Was bringt uns aber die Betrachtung von TA anstelle von TP ? Offenbar endet der Algorithmus, wenn jede Frau (mindestens) einmal angesprochen wurde, denn dann sind ja alle Frauen zugeordnet. Wir können jetzt einfach die Gesamtanzahl der Kontaktaufnahmen analysieren, anstelle die Kontaktaufnahmen der einzelnen Männer zu betrachten. Unser Problem wird zu einem Spezialfall des Coupon-Sammler-Problems, das wir im nächsten Abschnitt untersuchen.
3.3 Das Coupon-Sammler-Problem Beim Coupon-Sammler-Problem gibt es n verschiedene Couponarten, von denen jeweils eine unbeschränkte Anzahl zur Verfügung steht. In jeder Runde wird ein Coupon zufällig gleichverteilt und unabhängig von allen bisherigen Auswahlen gezogen. Das Experiment endet, wenn von jeder Couponart ein Coupon gezogen wurde. Sei X die Anzahl der Runden, die bis zum Abbruch nötig sind. Die Situation beim Coupon-Sammler-Problem spiegelt unsere Lage beim Problem der stabilen Zuordnungen wider: Die Couponarten entsprechen den Damen. In jedem Schritt wird eine Frau f gleichverteilt gewählt und angesprochen (es wird der Coupon f gezogen). Sobald alle Frauen angesprochen sind (alle Coupons gesammelt sind), endet der Algorithmus. Für i = 1, . . . , X bezeichne Ci ∈ {1, . . . , n} den in der iten Runde gezogenen Coupon. Wir nennen den Versuch Ci einen Erfolg, wenn Ci ∈ / {C1 , . . . , Ci−1 }, d.h., wenn ein bisher noch nicht gesammelter Coupon gezogen wird. Offenbar ist C 1 immer ein Erfolg.
20
Grundlegende Techniken Wir unterteilen die Folge von Runden in Phasen. Phase j startet mit dem Versuch nach dem jten Erfolg und endet mit den (j + 1)ten Erfolg. Wir definieren die Zufallsvariable Xj als die Anzahl der Runden in Phase j. Für die Gesamtanzahl der Runden gilt Pn−1 dann: X = j=0 Xj . Aufgrund der Linearität des Erwartungswertes, genügt es E [Xj ] für j = 0, . . . , n − 1 zu kennen, um E [X] zu bestimmen. Wir betrachten die Phase j. Es wurden bereits j − 1 der n Coupons gesammelt. Die Wahrscheinlichkeit, daß wir in der nächsten Runde einen neuen Coupon ziehen und damit die Phase beenden, ist also pj = n−j n . Das folgende Ergebnis ist nun nützlich:
Satz 3.15 (Geometrische Verteilung) Eine Münze werde solange geworfen, bis KOPF zum ersten Mal erscheint. Dabei habe jeder Münzwurf Wahrscheinlichkeit p, daß KOPF erscheint. Sei X die Zufallsvariable, die angibt, wie viele Würfe bis zum ersten KOPF erfolgen. Dann hat X die geometrische Verteilung mit Parameter p. Es gilt: ( p(1 − p)x−1 für x = 1, 2, . . . Pr [X = x] = 0 sonst. E [X] =
1 p
Beweis: Die Wahrscheinlichkeit Pr [X = x] für x = 1, 2, . . . , ist dadurch gegeben, daß x−1 mal Z AHL erschien und dann KOPF folgt. Da die Münzwürfe unabhängig voneinander sind, finden mit Wahrscheinlichkeit p(1 − p)x−1 genau x − 1 Z AHL und dann ein KOPFErgebnis statt. Der Erwartungswert berechnet sich durch: E [X] =
∞ X
x Pr [X = x] =
x=1
∞ X
x=1
xp(1 − p)x−1 = p
∞ X
x=0
x(1 − p)x = p ·
1 1 = . 2 p p 2
Aus Satz 3.15 folgt nun unmittelbar, daß E [Xj ] =
1 n = . pj n−j
Damit haben wir E [X] =
n−1 X j=0
E [Xj ] =
n−1 X j=0
n−1 n X 1 X n 1 =n =n = nHn . n−j n − j j j=0 j=1
Damit haben wir nun folgenden Satz bewiesen: Satz 3.16 Falls die Präferenzlisten der Männer gleichverteilt und unabhängig voneinander gezogen sind, so benötigt P ROPOSAL im Erwartungswert nur nHn = O(n ln n) Schritte, um eine stabile Zuordnung zu finden. 2 Unser nächster Schritt ist es, Schranken für die Wahrscheinlichkeit zu finden, daß P ROPO SAL mehr Schritte als nHn benötigt. Wir zeigen, daß es unwahrscheinlich ist, daß die Zufallsvariable X aus dem Coupon-Sammler-Problem von ihrem Erwartungswert abweicht. Ein solches Ergebnis läßt uns normalerweise noch mehr Zuversicht in die Leistung eines Algorithmus fassen. Wir erreichen unser Ergebnis in zwei Schritten. Zunächst zeigen wir ein einfacheres, etwas schwächeres Ergebnis. Dann leiten wir das scharfe verbesserte Ergebnis her, das deutlich aufwändiger zu zeigen ist.
3.3 Das Coupon-Sammler-Problem
21
Sei Eir das Ereignis, daß Coupon i in den ersten r Runden nicht gesammelt wurde. Dann gilt: r 1 r ≤ e−r/n . Pr [Ei ] = 1 − n Es folgt: Pr [X > r] = Pr
"
n [
i=1
#
Eir ≤
n X i=1
Pr [Eir ] ≤
n X
e−r/n = ne−r/n .
(3.9)
i=1
Was besagt uns das Ergebnis in (3.9)? Wir erinnern uns, daß E [X] = O(n ln n). Sei r = βn ln n. Aus (3.9) folgt, daß Pr [X > βn ln n] ≤ ne−β ln n = n−(β−1) .
(3.10)
Die Wahrscheinlichkeit, daß X größer als βn ln n wird, wird für wachsendes β ≥ 1 sehr klein. Abbildung 3.2 zeigt den Verlauf der Kurven n−(β−1) für wachsendes β. 1 5**(-beta+1) 10**(-beta+1) 50**(-beta+1) 100**(-beta+1) 0.8
0.6
0.4
0.2
0 1
2
3
4
5
6
7
8
9
10
Abbildung 3.2: Abnahme der Wahrscheinlichkeit Pr [X > βn ln n] für wachsendes β und n = 5, 10, 50, 100. Unser Ergebnis in (3.10) ist bereits gut, aber man kann sogar noch ein schärferes Resultat zeigen. Dafür muß man allerdings etwas tiefer in die mathematische Werkzeugkiste greifen. Satz 3.17 Sei X die Zufallsvariable, die angibt, wie viele Runden nötig sind, um von jeder der n Couponarten einen zu sammeln. Für alle c ∈ R und m = n ln n + cn gilt: −c
lim Pr [X > m] = 1 − ee .
n→∞
2
22
Grundlegende Techniken
3.4 Erzeugende Funktionen In diesem Abschnitt lernen wir kurz ein wichtiges Hilfsmittel kennen: die erzeugenden Funktionen. Anhand unseres Sekretärinnen-Problems aus Abschnitt 2.1 zeigen wir, wie hilfreich diese erzeugenden Funktionen sein können. Wir beweisen in diesem Abschnitt, daß es »nur unwahrscheinlich ist«, daß im probabilistischen Setting deutlich mehr als n log n Entlassungen vorgenommen werden. Definition 3.18 (Erzeugende Funktion einer Zufallsvariablen) Sei X eine Zufallsvariable, die nur Werte in N annimmt. Dann nennt man die formale Potenzreihe ∞ X GX (z) := Pr [X = k] z k (3.11) k=0
die wahrscheinlichkeitserzeugende Funktion (probability generating function), kurz PGF von X . Die Reihe (3.11) konvergiert zumindest für |z| ≤ 1, da für diese z ∈ C gilt: ∞ X
k=0
Pr [X = k] |z|k ≤
∞ X
Pr [X = k] 1 =
k=0
∞ X
Pr [X = k] = 1.
k=0
Die Reihe konvergiert sogar absolut, weshalb wir die Summationsreihenfolge zumindest für |z| ≤ 1 beliebig ändern dürfen.
Aus der Analysis weiß man (siehe z.B. [10]), daß es ein R > 0 gibt, so daß die Reihe (3.11) für |z| < R absolut konvergiert (wir haben eben R ≥ 1 nachgewiesen) und daher für |z| < R tatsächlich eine Funktion darstellt. Wir haben: X GX (z) = Pr [ω] z X(ω) = E z X . (3.12) ω∈Ω
Man weiß auch (siehe wiederum z.B. [10]), daß für |z| < R ebenfalls alle Ableitun(i) gen GX , i ∈ N existieren und man »termweise differenzieren« darf, d.h.: (i)
GX (z) =
∞ X k=0
Pr [X = k]
∞
di k X z = Pr [X = k] k·(k−1)·· · ··(k−i+1)z k−i . (3.13) dz k k=i
Die PGF GX speichert in kompakter Weise alle Informationen über die Zufallsvariable X. Eine PGF erleichtert uns das Leben in vielen Fällen. Wir wissen, daß GX (1) = 1 gilt. Umgekehrt ist auch jede Funktion G : N → N mit G(1) = 1 eine PGF für eine Zufallsvariable. Nach der Ableitungsformel (3.13): G0X (z) =
∞ X
Pr [X = k] kz k−1 .
k=1
Daher folgt: G0X (1) = =
∞ X
k=1 ∞ X
Pr [X = k] k1k−1 k Pr [X = k]
k=1
= E [X] . Die Eigenschaft G0X (1) = E [X] ist vor allem dann nützlich, wenn wir eine explizite Form für GX haben. Wir verdeutlichen dies an einem Beispiel.
3.4 Erzeugende Funktionen
23
Beispiel 3.19 Sei eine Münze gegeben, bei der ein Wurz mit Wahrscheinlichkeit p Kopf und mit Wahrscheinlichkeit q = 1 − p Zahl ergibt. Wir betrachten eine Folge von n ≥ 1 unabhängigen Münzwürfen. Sei X die Anzahl der Köpfe, die wir dabei erhalten. Wie groß ist der Erwartungswert von X? Bei n unabhängigen Würfen der Münze erhalten wir mit Wahrscheinlichkeit nk pk q n−k genau k mal Kopf. Somit ist die PGF zu X: GX (z) =
n X n
k=0
k
pk q n−k z k = (q + pz)n .
(3.14)
Wegen G0X (z) = np(q + pz)n−1 ist der Erwartungswert von X somit G0X (1) = np(q + p · 1)n−1 = np(q + p)n−1 = np1n−1 = np. C NatürlichPhätten wir das obige Ergebnis auch dadurch erhalten können, daß wir X als n Summe i=1 Xi von Indikatorvariablen mit ( 1 , falls der ite Wurf Kopf zeigt, Xi = 0 , sonst. Pn schreiben (es gilt dann E [Xi ] = Pr [Xi = 1] = p und E [X] = i=1 E [Xi ] = np). Die Formel nk pk q n−k für genau k mal Kopf in den n Würfen können wir übrigens auch mit Hilfe von PGF erhalten. Dazu benötigen wir eine wichtige Eigenschaft für die explizite Konstruktion von PGFs: Lemma 3.20 Seien X und Y unabhängige Zufallsvariablen. Dann gilt für die PGF G X+Y von X + Y : GX+Y (z) = GX (z) · GY (z). Beweis: Wegen Gleichung (3.12) gilt: GX+Y (z) = E z X+Y = E zX · zY = E zX · E zY = GX (z) · GY (z) Dabei haben wir benutzt, daß wegen der Unabhängigkeit von X und Y auch z X und z Y unabhängig sind. 2 Wir betrachten wieder Zufallsvariable X aus Beispiel 3.19. Sie ist, wie bereits erwähnt, die P Summe ni=1 Xi der unabhängigen Indikatorvariablen. Die PGF für ein Xi ist H(z) = q + pz. Daher folgt mit Lemma 3.20, daß GX die Form (3.14) besitzt. Da der Koeffizient vor z k von GX die Wahrscheinlichkeit Pr [X = k] angibt, erhalten wir daher Pr [X = k] = n k n−k . k p q Beispiel 3.21 Die Münze aus Beispiel 3.19 werde nun solange geworfen, bis das erste Mal Kopf erscheint. Sei Y die Anzahl der Münzwürfe. Wie sieht E [Y ] aus?
Wir wissen bereits aus Satz 3.15, daß Y die geometrische Verteilung mit Parameter p besitzt, also insbesondere E [Y ] = 1/p gilt. Dieses Ergebnis leiten wir nun mit Hilfe von PGF einfacher her.
24
Grundlegende Techniken Wir haben Pr [Y = 0] = 0 und Pr [Y = k] = q k−1 p für k ≥ 1 , daher ist GY (z) = =
∞ X
q k−1 pz k
k=1 ∞ X
p q
qk z k
k=1 ∞ X
= pz
qk z k
k=0
pz . = 1 − qz Man rechnet nun leicht nach, daß p . (1 − qz)2
G0Y (z) =
Daher ist E [Y ] = G0Y (1) = p/(1 − q)2 = 1/p.
C
Wir üben den Gebrauch von erzeugenden Funktionen noch einmal am SekretärinnenProblem aus Abschnitt 2.1. Beispiel 3.22 Sei wieder X die Zufallsvariable, die angibt, wie oft der Algorithmus KS EKRETÄRIN eine neue Sekretärin einstellt. Wir wissen bereits, daß (bei Gleichverteilung) E [X] = Hn gilt. Dieses Ergebnis werden wir nun mit Hilfe einer PGF erneut herleiten. Der Sinn dahinter ist der, daß wir (wie wir später sehen werden), aus der PGF noch mehr nützliche Informationen herausziehen können. Da die Anzahl der Einstellungen nur von der Ordnung der Güten abhängt, nehmen wir wieder an, daß die Sekretärinnen eine Permutation von [n] = {1, . . . , n} sind und die Zahlen den Güten entsprechen. Sei s1 , . . . , sn die Folge, die K-S EKRETÄRIN als Eingabe erhält. Sei pn,k die Wahrscheinlichkeit, daß der Algorithmus K-S EKRETÄRIN bei n Sekretärinnen genau k mal eine Sekretärin einstellt. Falls die letzte Sekretärin die beste ist (dies ist mit Wahrscheinlichkeit 1/n der Fall), so erfolgt K-S EKRETÄRIN genau eine Einstellung mehr als auf der Folge s1 , . . . , sn−1 . Ansonsten stellt der Algorithmus auf s1 , . . . , sn genausooft Sekretärinnen ein, wie auf s1 , . . . , sn−1 . Daher gilt die Rekursionsgleichung: pn,k =
1 n−1 pn−1,k−1 + pn−1,k . n n
(3.15)
Außerdem kennen wir die Randbedingungen p1,k =
(
1 , falls k = 1 0 , sonst. für k < 0 oder k ≥ n.
pn,k = 0
Die erzeugende Funktion Gn für X bei n Sekretärinnen hat die Gestalt: Gn (z) =
∞ X
pn,k z k ,
(3.16)
k=0
wobei sich die Reihe auf eine endliche Summe reduziert, da pn,k = 0 für k ≥ n ist.
3.4 Erzeugende Funktionen
25
Aus (3.15) erhalten wir eine Rekursionsgleichung für die Gn : Gn (z) = = =
∞ X
pn,k z k
k=0 ∞ X
1 n z n
k=0 ∞ X
pn−1,k−1 z k +
pn−1,k−1 z k−1 +
k=0
∞
n−1 X pn−1,k n k=0 ∞ X
n−1 n
pn−1,k
k=0
z n−1 Gn−1 (z) + Gn−1 (z) n n z+n−1 = Gn−1 (z). n =
(3.17)
Die explizite Form, die man aus (3.17) erhält ist allerdings immer noch recht unhandlich, um G0n (1) = E [X] auszurechnen. Wir benutzen die Rekusion (3.17) lieber direkt. Aus der ergibt sich nämlich durch Differenzieren (Produktregel): G0n (z) =
z+n−1 0 1 Gn−1 (z) + Gn−1 (z), n n
also mit Gn−1 (1) = 1 dann G0n (1) =
1 + G0n−1 (1). n
(3.18)
Aus (3.18) erhält man schnell zusammen mit der Anfangsbedingung G 01 (1) = 1, daß G0n (1) = Hn . C Mit Hilfe von erzeugenden Funktionen läßt sich noch eine weitere Kenngröße von Zufallsvariablen, die Varianz, elegant ausdrücken. Die Varianz wird uns noch in Kapitel 4 beschäftigen, wenn wir mit Hilfe der Chebyshev-Ungleichung Schranken für die Abweichung einer Zufallsvariablen von ihrem Erwartungswert berechnen. Definition 3.23 (Varianz und Standardabweichung einer Zufallsvariablen) 2 Sei X eine Zufallsvariable mit Erwartungswert µX := E [X]. Die Varianz σX := Var [X] ist definiert als: σX := E (X − µx )2 . 2 Die Standardabweichung σX von X ist die positive Wurzel aus σX
Lemma 3.24 Für die Varianz einer Zufallsvariablen X gilt: Var [X] = E X 2 − E [X]2 . Beweis: Sei µx = E [X]. Dann gilt wegen der Linearität des Erwartungswertes: Var [X] = E (X − µX )2 = E X 2 − 2µX E [X] + E µ2X = E X 2 − 2µ2X + µ2X = E X 2 − E [X]2 .
2
26
Grundlegende Techniken Wegen
E X
2
= =
∞ X
k=0 ∞ X k=0
k 2 · Pr [X = k] Pr [X = k] · k(k − 1)1k−2 + k1k−1
= G00X (1) + G0X (1)
haben wir eine Möglichkeit gefunden, die Varianz mit Hilfe von PGF auszudrücken. Wir fassen unsere Ergebnisse über PGF in folgendem Satz zusammen: Satz 3.25 Sei X : Ω → N eine Zufallsvariable und G := GX die zugehörige PGF. Dann gilt:
(i) G(1) = 1 (ii) E [X] = G0 (1) (iii) E X 2 = G00 (1) + G0 (1)
(iv) Var [X] = G00 (1) + G0 (1) − G0 (1)2 .
2
Der letzte Satz liefert einen Zusammenhang zwischen den Ableitungen der PGF G X und den Charakteristika der Zufallsvariablen X. Ist GX (z) = F (z)H(z) für Funktionen F und H, so gilt: G0X (z) = F 0 (z)H(z) + F (z)H 0 (z) G00X (z) = F 00 (z)H(z) + 2F 0 (z)G0 (z) + F (z)G00 (z). Die scheinbar langweiligen Gleichungen sind dann interessant, wenn F und H die für PGF charakteristische Eigenschaft F (1) = H(1) = 1 besitzen. Für solche Funktionen F (und H) definieren wir: E [F ] := F 0 (1) Var [F ] := F 00 (1) + F 0 (1) − F 0 (1)2 . Mit diesen Notationen folgt dann: E [X] = G0X (1) = F 0 (1) + H 0 (1) = E [F ] + E [H] Var [X] =
G00X (1) 00
+
G0X (1) 0
−
(3.19)
G0X (1)2 0 2
= (F (1) + F (1) − F (1) ) + (H 00 (1) + H 0 (1) − H 0 (1)2 ) = Var [F ] + Var [H] .
(3.20)
Falls X und Y unabhängig sind, so hatten wir bereits in Lemma 3.20 gesehen, daß GX+Y = GX · GY . Als unmittelbare Folge von (3.20) erhalten wir somit das folgende Ergebnis: Korollar 3.26 Seien X1 , . . . , Xn unabhängige Zufallsvariablen mit Werten in N und X = P n i=1 Xi . Dann gilt n X Var [X] = Var [Xi ] . i=1
3.5 Untere Schranken durch das Prinzip von Yao
27
Beispiel 3.27 Aus unserer Rekursionsgleichung (3.17) für die PGF G n folgt, daß Gn (z) =
z+n−1 z+n−2 z+1 z · ··· · = Qn (z)Qn−1 (z) · Q2 (z)Q1 (z). n n−1 2 1
Die Funktionen Qk = (z + k − 1)/k erfüllen allesamt Qk (1) =
1+k−1 = 1. k
Nach (3.19) und (3.20) gilt dann: Var [X] = Var [GX ] =
n X
Var [Qk ] =
k=1
n X 1 k=1
(p)
Hier benutzen wir die Notation Hn nung.
=
Pn
k=1
12 − k k
= Hn − Hn(2) .
1/np für die Harmonische Zahl pter OrdC
3.5 Untere Schranken durch das Prinzip von Yao Unser Beispiel für die Berechnung von unteren Schranken für randomisierte Algorithmen ist die Auswertung von AND-OR-Bäumen. Ein AND-OR-Baum ist ein vollständiger binärer Baum mit gerader Höhe 2k, k ∈ N. Die internen Knoten mit gerader Höhe sind mit »min« markiert, die internen Knoten mit ungerader Höhe haben »max« als Marke. Die Blätter besitzten Werte aus {0, 1}. Abbildung 3.3 zeigt einen solchen Baum.
Ein AND-OR-Baum der Höhe 2k hat genau 22k = 4k Blätter und insgesamt 22k+1 − 1 Knoten. Im folgenden wird die Anzahl N := 22k = 4k der Blätter eine zentrale Rolle spielen. ∧ ∨
∨
∧
∧
∨ 0
∨ 1
0
∧
∨ 0
1
∨ 0
1
∧
∨ 1
0
∨ 1
1
∨ 0
0
∨ 1
1
Abbildung 3.3: Ein binärer AND-OR-Baum. Der Wert in einem Knoten ist rekursiv von den Blättern her definiert. Die Blätter tragen ihre Werte. Ein AND-Knoten hat als Wert das Maximum der Werte seiner Söhne. Ein ORKnoten das Minimum hat als Wert das Maximum der Werte seiner Söhne. Wir betrachten nun das Problem, den Wert der Wurzel eines Min-Max-Baums zu berechnen. Das Problem läßt sich (deterministisch) eigentlich recht elegant mit Hilfe eines rekursiven Algorithmus T REE E VAL (siehe Algorithmus 3.2 auf der folgenden Seite) lösen. Der Algorithmus benötigt Θ(|T |) Zeit, wobei |T | die Anzahl der Knoten im Baum ist. Ist die Höhe von T gleich 2k, so hat der Baum 22k+1 − 1 Knoten, T REE E VAL benötigt also Θ(22k+1 = Θ(N ) Zeit, wobei N = 22k = 4k die Anzahl der Blätter des Baumes ist. Kann man einen Algorithmus finden, der den Wert des Baumes schneller berechnet? Für deterministische Algorithmen ist die Antwort »nein«, wie folgende Argumentation zeigt: Lemma 3.28 Sei k ∈ N. Für jeden deterministischen Algorithmus existiert ein ANDOR-Baum der Höhe 2k , bei dem er alle N = 4k Blätter inspizieren muß und folglich mindestens N Schritte zur Bestimmung des Wertes des Baumes benötigt.
1
28
Grundlegende Techniken Algorithmus 3.2 Deterministischer Algorithmus zur Min-Max-Baum-Evaluierung. T REE E VAL(T ) 1 v ← root[T ] 2 return AND-E VAL(v) AND-E VAL(v) 1 l ← leftson[v] 2 r ← rightson[v] 3 return OR-E VAL (l) ∧ OR-E VAL (r)
OR-E VAL(v) 1 l ← leftson[v] 2 r ← rightson[v] 3 return AND-E VAL(l) ∨ AND-E VAL(r)
Beweis: Sei ALG ein beliebiger deterministischer Algorithmus, der korrekt die Werte von Min-Max-Bäumen berechnet. Die Höhe eines Knotens ist die Länge eines kürzesten Weges zu einem Blatt. Blätter haben also Höhe 0. Wir zeigen durch Induktion nach der Höhe h folgende Aussage: Sei v ein Knoten der Höhe h. Dann können wir ALG zwingen, den Wert beider Söhne von v zu bestimmen, um den Wert von v zu erhalten. Dies gilt unabhängig vom Wert, den v letztendlich liefert. Falls h = 0, so ist die Aussage trivial. Sei v ein OR-Knoten der Höhe h > 0 mit den beiden Söhnen l und r. Um den Wert von v bestimmen zu können, muß der Algorithmus den Wert mindestens eines Sohnes kennen. Da der Algorithmus deterministisch ist, kennen wir denjenigen Sohn, der zuerst evaluiert wird, und können diesen eine 1 als Wert haben lassen. Damit muß ALG auch den zweiten Sohn berechnen. Die Argumentation für ANDKnoten ist analog. Es folgt nun induktiv, daß ALG alle Blätter auslesen muß.
2
Unser nächster Schritt ist es, einen randomisierten Algorithmus zu konstruieren, der die untere Schranke für die deterministischen Algorithmen unterbietet. Die Idee dafür ist ganz einfach. Ein bösartiger Gegenspieler kann für einen deterministischen Algorithmus bei einem OR-Knoten die 0 im zweiten untersuchten Knoten verstecken (analog die 1 für ANDKnoten). Um einen OR-Knoten zu evaluieren, wählen wir einen Sohn zufällig gleichverteilt aus. Sollte dieser Knoten eine 0 liefern, so sind wir fertig. Ansonsten müssen wir noch den zweiten Sohn anschauen. Auch beim AND-Knoten würfeln wir den ersten betrachteten Sohn aus. Wir nennen den resultierenden Algorithmus R AND T REE E VAL. Satz 3.29 Die erwartete Anzahl von Schritten von R AND T REE E VAL für einen Min-MaxBaum der Höhe 2k beträgt höchstens 3k = N log4 3 < N 0.7925 . Beweis: Seien T (2k) die erwarteten Kosten, um einen Knoten der Höhe 2k zu evaluieren. Es gilt offenbar T (0) = 0. Wir betrachten nun einen Knoten v der Höhe 2k > 0. Da 2k gerade ist, ist v ein AND-Knoten. 1. Fall: v hat den Wert 0. Die Kosten zur Evaluierung eines Sohnes von v können wir nach oben durch 2T (2k − 2) abschätzen, da er ein OR-Knoten ist, bei dem maximal die beiden AND-Knoten der Höhe 2k − 2 ausgewertet werden müssen. Falls v den Wert 0 hat, so liefert mindestens einer der beiden Söhne von v den Wert 0 zurück. Mit Wahrscheinlichkeit 1/2 wurde dieser Knoten von R AND T REE E VAL zuerst gewählt, so daß der zweite Sohn nicht evaluiert werden muß.
3.5 Untere Schranken durch das Prinzip von Yao
29
Daher sind die erwarteten Kosten höchstens: 1 · 2T (2k − 2) {z } |2
2T (2k − 2) +
= 3T (2k − 2).
(3.21)
der zweite Sohn wird mit W.keit 1/2 ausgewertet
2. Fall: v hat den Wert 1.
Beide Söhne von v müssen den Wert 1 haben. Für jeden der beiden Söhne x gilt: Mindestens einer der Söhne von x hat den Wert 1, so daß der zweite Sohn mit Wahrscheinlichkeit 1/2 nicht ausgewertet wird. Somit sind die erwarteten Kosten zur Evaluierung von x höchstens T (2k − 2) + 21 · T (2k − 2) = 32 · T (2k − 2).
Wir erhalten also die folgende obere Schranke für die erwarteten Kosten zur Evaluierung von v: 3 (3.22) 2 · · T (2k − 2) = 3T (2k − 2). 2 Aus (3.21) und (3.22) haben wir die Rekursionsgleichung T (2k) ≤ 3T (2k−2). Da T (0) = 0 gilt, folgt nun T (2k) = 3k . 2 Wir haben gerade bewiesen, daß man durch Randomisieren die untere Schranke für deterministische Algorithmen unterbieten kann. Kann man das Ergebnis aus Satz 3.29 noch weiter verbessern, d.h. gibt es einen noch besseren randomisierten Algorithmus? Wie zeigt man überhaupt untere Schranken für randomisierte Algorithmen? Sei Π ein Problem und I ⊆ Π eine endliche Teilmenge von Instanzen. Wir bezeichnen mit C(ALG , I) die »Kosten« (hier: Laufzeit) des deterministischen Algorithmus ALG auf der Instanz I von Π. Wir nehmen an, daß die Menge A aller deterministischen Algorithmen abzählbar ist (etwa eine Aufzählung der deterministischen Touring-Maschinen). Einen randomisierter Algorithmus RALG kann man als Wahrscheinlichkeitsverteilung p : A → [0, 1] definieren. Im Sprachgebrauch der Spieltheorie ist ein randomisierter Algorithmus dann eine gemischte Strategie über der Menge A der reinen Strategien. Oftmals ist es für das Formulieren eines Algorithmus allerdings natürlicher, daß Zufallsentscheidungen während des Algorithmenlaufs stattfinden (wie bei bisher allen unseren randomisierten Algorithmen). Man spricht in der Spieltheorie dann von Verhaltens-Strategien. Man kann sich aber vorstellen, daß alle Zufallsentscheidungen bereits zu Beginn gefallen sind und der Algorithmus danach komplett deterministisch ist. Insofern sind für unsere Zwecke gemischte Strategien und Verhaltens-Strategien äquivalent. Um eine untere Schranke f (A, I) für die Kosten jedes randomisierten Algorithmus zu beweisen, müssen wir zeigen, daß für jede mögliche Verteilung p eine Instanz I existiert, so daß die erwarteten Kosten Ep [C(ALGp , I)] ≥ f (A, I) sind. Wir schreiben hier Ep [C(ALGp , I)], um deutlich zu machen, daß der Erwartungswert bezüglich der Verteilung p über den »per p indizierten« Algorithmen ALG p ∈ A genommen wird. In Formeln heißt das: ∀p : A → [0, 1]∃I ∈ I : Ep [C(ALGp , I)] ≥ f (A, I) (3.23) Offenbar folgt (3.23), wenn wir die nächste Ungleichung für alle p : A → [0, 1] beweisen können: max Ep [C(ALGp , I)] ≥ f (A, I) (3.24) I∈I
Die direkte Anwendung von (3.24) ist offenbar problematisch. Wie sollen wir die erwarteten Kosten für eine beliebige Verteilung nach unten abschätzen? Das Prinzip von Yao im folgenden Satz liefert eine alternative Möglichkeit zum Beweis von unteren Schranken. Für eine Verteilung q : I → [0, 1] über den Instanzen bezeichnen wir mit E q [C(ALG, Iq )] die erwarteten Kosten des deterministischen Algorithmus ALG ∈ A bezüglich der Verteilung q.
30
Grundlegende Techniken Satz 3.30 (Yaos Prinzip) Sei q : I → [0, 1] eine Verteilung über der endlichen Instanzenmenge I . Falls für jeden deterministischen Algorithmus ALG ∈ A gilt Eq [C(ALG, Iq )] ≥ f (A, I), so ist f (A, I) eine untere Schranke für die die Kosten jedes randomisierten Algorithmus, d.h. es gilt (3.24). Beweis: Die Voraussetzungen des Satzes liefern uns: inf Eq [C(ALG , Iq )] ≥ f (A, I).
ALG ∈A
(3.25)
Sei p : A → [0, 1] fest. Dann gilt: max Ep [C(ALG p , I)] = max I∈I
I∈I
≥ =
X
q(I)
X X
p(ALG)C(ALG , I)
ALG ∈A
X X
q(I)p(ALG )C(ALG , I)
X
X
q(I)p(ALG )C(ALG , I)
I∈I
p(ALG)
ALG ∈A
=
X
ALG ∈A
ALG ∈A
=
p(ALG )C(ALG , I)
ALG ∈A
I∈I
I∈I
=
X
X
q(I)C(ALG , I)
I∈I
p(ALG)Eq [C(ALG , Iq )]
ALG ∈A
≥ inf Eq [C(ALG , Iq )] ALG ∈A
≥ f (A, I). Die letzte Ungleichung ergibt sich durch Einsetzen von (3.25). Das Vertauschen der Summationsreihenfolge oben ist übrigens deshalb Pzulässig, da wir vorausgesetzt hatten, daß I endlich ist und wir zusätzlich wissen, daß ALG ∈A p(ALG)C(ALG , I) ebenfalls endlich ist. 2 Wo liegt der Gewinn durch Yao’s Prinzip? Um eine untere Schranke zu beweisen, müssen wir jetzt «nur» jeden deterministischen Algorithmus im Durchschnitt schlecht aussehen lassen. Dies ist normalerweise viel einfacher, als einen beliebigen randomisierten Algorithmus hereinzulegen. Wir verwenden Yaos Prinzip, um eine untere Schranke für die Evaluierung der AND-ORBäume durch randomisierte Algorithmen herzuleiten. Es zeigt sich dabei als nützlich, unser Szenario der AND-OR-Bäume äquivalent umzuformulieren. Wir ersetzen alle ANDs und ORs durch NORs, wobei das logische NOR so definiert ist, daß es genau dann den Wert 1 liefert, wenn beide Eingabewerte gleich 0 sind. Wegen (x1 ∨ x2 ) ∧ (x3 ∨ x4 ) = (x1 ∨ x2 ) ∨ (x1 ∨ x2 ) = (x1 NOR x2 ) NOR(x3 NOR x4 ) ist der so umgebaute Baum äquivalent zum alten Baum. Die Reduzierung auf die eine logische Operation NOR macht die Darstellung im Folgenden etwas einfacher, da wir nicht mehr zwischen den einzelnen Ebenen unterscheiden müssen. Abbildung 3.4 zeigt die äquivalente Umformulierung des AND-OR-Baumes aus Abbildung 3.3 auf Seite 27. Sei T ein NOR-Baum mit N √ Blättern. Wir setzen den Wert jedes Blattes unabhängig mit Wahrscheinlichkeit p = (3 − 5)/2 auf 1. Dies liefert eine Wahrscheinlichkeitsverteilung über der (endlichen) Menge aller NOR-Bäume mit N Blättern.
3.5 Untere Schranken durch das Prinzip von Yao
31
NOR NOR
NOR
NOR
NOR
NOR 0
NOR 1
0
NOR
NOR 0
1
NOR 0
1
NOR
NOR 1
0
NOR 1
1
NOR 0
0
NOR 1
1
Abbildung 3.4: Ein NOR-Baum. Die spezielle Wahl von p hat einen praktischen Hintergrund. Ist√v ein NOR-Knoten, dessen Söhne jeweils unabhängig mit Wahrscheinlichkeit p = (3 − 5)/2 den Wert 1 besitzen, so ist die Wahrscheinlichkeit, daß v den Wert 1, die Wahrscheinlichkeit, daß beide Söhne 0 tragen, also: 2
(1 − p) =
√ !2 3− 5 = 1− 2
√ √ !2 3− 5 1− 5 = = p. 2 2
Somit hat unsere Verteilung die Eigenschaft, daß jeder einzelne Knoten des NOR-Baums mit Wahrscheinlichkeit p den Wert 1 besitzt. Wir berechnen nun eine untere Schranke für die erwarteten Kosten jedes determinitischen Algorithmus bezüglich unserer eben konstruierten Wahrscheinlichkeitsverteilung. Dazu benötigen wir noch ein weiteres Resultat, um die Klasse der Algorithmen zu beschränken. Wir nennen einen Algorithmus für die Evaluierung der NOR-Bäume einen Tiefensuchalgorithmus, wenn er folgende Eigenschaften besitzt: Der Algorithmus evaluiert die Knoten in Tiefensuchreihenfolge, d.h. für die Evaluierung eines Knotens v wird zuerst ein Sohn von v evaluiert, bevor irgendein Knoten im Teilbaum, der im anderen Sohn wurzelt, betrachtet wird. Das Ergebnis, das wir benötigen, besagt, daß es immer einen Tiefensuchalgorithmus gibt, bei dem die erwarteten Kosten minimal sind. Der Beweis ist sehr technisch, weshalb wir ihn hier weglassen. Man kann ihn in [11] nachlesen. Für uns ist hier wichtig, daß wir uns also bei der Analyse auf Tiefensuchalgorithmen beschänken können. Satz 3.31 Jeder randomisierte Algorithmus für die Evaluierung von AND-OR-Bäumen (der immer ein korrektes Ergebnis liefert), hat Kosten mindestens N 0.694 . Beweis: Sei W (h) die erwartete Anzahl von Blättern, die ein Tiefensuchalgorithmus inspizieren muß, um in einem NOR-Baum mit unserer Wahrscheinlichkeitsverteilung den Wert eines Knotens mit Distanz h von den Blättern zu bestimmen. Für W haben wir die Rekursionsgleichung: W (h) ≥ W (h − 1) + (1 − p)W (h − 1) = (2 − p)W (h − 1).
(3.26)
Der erste Term in (3.26) repräsentiert die erwarteten Kosten für das Evaluieren eines Sohnes. Da dieser mit Wahrscheinlichkeit 1 − p den Wert 0 trägt, muß mit Wahrscheinlichkeit 1 − p auch der zweite Sohn evaluiert werden. Daraus ergibt sich der zweite Term in (3.26).
Aus (3.26) folgt W (h) ≥ (2−p)h . Für uns ist hier der Fall h = log2 N interessant (Wurzel des vollständigen binären NOR-Baums mit N Blättern). Einsetzen ergibt W (log 2 N ) ≥ N 0.694 . 2
1
32
Momente und Abweichungen 4.1 Die Markov-Ungleichung Wir betrachten ein einfaches Problem aus dem Bereich der Datenstrukturen und Algorithmen: Gegeben sei eine endliche Menge A = {a1 , . . . , an }. Die Aufgabe besteht darin, daß kt kleinste Element in A zu finden. Ist x = a(i) das it-kleinste Element in A, so nennt man i auch den Rang von x. Er wird mit rank(x, A) bezeichnet. Das Problem kann natürlich deterministisch auf einfache Weise in O(n log n) Zeit gelöst werden: zunächst sortiert man die Menge A in O(n log n) Zeit und greift dann auf das Element an Position k zu. Es existieren sogar deterministische Algorithmen, die das Problem in linearer Zeit O(n) lösen, siehe z.B. [2]. Allerdings ist deren Implementierung und Analyse nicht ganz einfach. Algorithmus 4.1 Randomisierter Algorithmus zum Finden des kt-kleinsten Elements. R AND S ELECT(A, k) Input: Ein Array A[1 . . . n] und eine Zahl 1 ≤ k ≤ n Output: Das kt kleinste Element in A 1 Wähle x aus A[1 . . . n] zufällig und gleichverteilt. 2 Teile A durch Vergleich mit dem Pivotelement x auf in die Elemente L kleiner oder gleich x und die Elemente R größer als x. 3 Sei r = rank(A, x) der Rang von x in A. 4 if r = k then 5 return x 6 end if 7 if r > k then 8 return R AND S ELECT(L, k) 9 end if 10 if r < k then 11 return R AND S ELECT(R, k − |L|) 12 end if Wir beschäftigen uns hier mit einfachen randomisierten Algorithmen. Unser erster Algorithmus R AND S ELECT (Algorithmus 4.1) funktioniert ähnlich R AND Q UICKSORT. Wir wählen ein zufälliges Element x als Pivot, teilen A in die Elemente L kleiner oder gleich x und die Elemente R größer als x auf. Dabei bestimmen wir gleich den Rang r = |L| von x. Falls r = k, so können wir aufhören. Falls r > k, so ist a(k) das kt-kleinste Element in L. Ist andererseits r < k, so ist a(k) das (k − |L|)t-kleinste Element in R. Wir suchen dementsprechend rekursiv in L oder R weiter. Die Korrektheit von R AND S ELECT folgt unmittelbar.
34
Momente und Abweichungen Wir nennen einen rekursiven Aufruf R AND S ELECT(S, r) erfolgreich, wenn für das zufällig gewählte Pivotelement x gilt: 3|S| |S| ≤ rank(x, S) ≤ . 4 4 Ansonsten bezeichnen wir den rekursiven Aufruf als erfolglos. Bei einem erfolgreichen Aufruf enthält jede der beiden Mengen L und R, in denen rekursiv weitergesucht wird, n höchstens 3/4|S| Elemente. Somit können höchstens dlog4/3 ne = d lnln4/3 e erfolgreiche Aufrufe stattfinden. Die Wahrscheinlichkeit für einen erfolgreichen Aufruf ist mindestens 1/2: Es gibt |S|/2 Elemente x mit Rang zwischen |S|/4 und 3|S|/4, so daß mit Wahrscheinlichkeit mindestens 1/2 ein solches Element als Pivot gewählt wird. Da wir oben festgestellt hatten, daß mit Wahrscheinlichkeit mindestens 1/2 ein erfolgreicher Aufruf erfolgt, liefert uns Satz 3.15, daß im Erwartungswert nach maximal zwei Aufrufen ein erfolgreicher Aufruf erfolgt ist. Wir definieren die Zufallsvariablen X i für n e als die Anzahl der Vergleiche nach den i − 1ten erfolgreichen Aufruf i = 1, . . . , d lnln4/3 P bis zum iten erfolgreichen Aufruf. Die Gesamtanzahl der Vergleiche ist dann X = i Xi . Außerdem gilt i−1 3 E [Xi ] ≤ 2 · n, 4 da im Erwartungswert maximal zwei Aufrufe für einen erfolgreichen Aufruf benötigt weri−1 n Elemente übrig sind. den und beim iten erfolgreichen Aufruf noch höchstens 43 Damit haben wir: n d lnln4/3 e
E [X] =
X i=1
E [Xi ] ≤ 2n
n d lnln4/3 e
X i=1
3 4
i−1
≤ 2n
∞ i X 3 i=0
4
= 8n.
Dies zeigt folgenden Satz: Satz 4.1 Die Erwartete Anzahl von Vergleichen von R AND S ELECT zum Finden des k tkleinsten Elements ist höchstens 8n. 2 Wir haben bewiesen, daß R AND S ELECT im Erwartungswert höchstens 8n Vergleiche benötigt. Der Erwartungswert allein ist aber oft nicht aussagekräftig genug, um die Qualität eines Algorithmus beurteilen zu können. Wir haben noch keine Information darüber, ob der Algorithmus nicht auch in vielen Fällen sehr schlechte Ergebnisse liefert (R AND S ELECT kann im Worst-Case Laufzeit Ω(n2 ) haben). Im konkreten Fall würde uns ein Ergebnis der folgenden Form mehr Zutrauen zu R AND S E LECT fassen lassen: Die Wahrscheinlichkeit, daß R AND S ELECT mehr als αcn Vergleiche benötigt, fällt »sehr rasch« mit α. Ein Hilfsmittel, um Ungleichungen der gewünschten Form abzuleiten, ist die MarkovUngleichung: Satz 4.2 (Markov-Ungleichung) Sei X eine Zufallsvariable, die nur nichtnegative Werte annimmt. Dann gilt für alle t > 0: Pr [X ≥ t] ≤
E [X] . t
(4.1)
4.2 Die Chebyshev-Ungleichung
35
Beweis: Sei t > 0. Dann gilt: X x · Pr [X = x] E [X] = x∈X(Ω+ )
=
X
+
x · Pr [X = x] + |{z}
x∈X(Ω ) ≥0 x
≥t
X
X
+
x · Pr [X = x] |{z}
x∈X(Ω ) ≥t x≥t
Pr [X = x]
x∈X(Ω+ ) x≥t
= t · Pr [X ≥ t] . Dies war zu zeigen.
2
Die Ungleichung (4.1) kann man mit λ := E [X] /t äquivalent zu Pr [X ≥ λ · E [X]] ≤ 1/t umformulieren. Wir notieren diese alternative Variante der Markov-Ungleichung: Satz 4.3 (Markov-Ungleichung (äquivalente Form)) Sei X eine Zufallsvariable, die nur nichtnegative Werte annimmt. Dann gilt für alle t > 0: Pr [X ≥ t · E [X]] ≤
1 . t
Anwendung der Markov-Ungleichung auf R AND S ELECT liefert: Pr [Anzahl der Vergleiche ≥ αn] ≤
8 . α
Insbesondere ist die Wahrscheinlichkeit, daß mehr als n log n Vergleiche benötigt werden nach oben durch 8/ ln n beschränkt. Man beachte, daß für n → ∞ der Term 8/ ln n gegen 0 konvergiert. Somit wird ein schlechteres Verhalten als das anfangs erwähnte Sortieren und dann Auswählen für große Mengen immer unwahrscheinlicher. Allerdings können wir mit der Markov-Ungleichung die Abweichung vom Erwartungswert zunächst nur »linear« beschränken. Oft sind die Ergebnisse, die wir dadurch erhalten, nur relativ schwach. Beispiel 4.4 Wir betrachten wieder das Sekretärinnen-Problem aus Abschnitt 2.1. Wir hatten ausgerechnet, daß für die Anzahl X von Einstellungen bei Gleichverteilung gilt: E [X] = Hn . Mit Hilfe der Markov-Ungleichung folgt: 1 , t
(4.2)
= o(1).
C
Pr [X ≥ tHn ] ≤ insbesondere für t = Hn : Pr X ≥ Hn2 ≤
1 Hn
4.2 Die Chebyshev-Ungleichung Die Markov-Ungleichung liefert oft nur sehr schwache Ergebnisse. Das liegt unter anderem daran, daß keine tieferliegenden Eigenschaften der Zufallsvariablen (und ihrer Verteilung) ausgenutzt werden. Wenn man neben dem Erwartungswert p µ x = E [X] noch die Varianz Var [X] und damit die Standardabweichung σX = Var [X] der Zufallsvariablen X kennt, so sind bereits etwas stärkere Aussagen mit Hilfe der Chebyshev-Ungleichung möglich.
36
Momente und Abweichungen Satz 4.5 (Chebyshev-Ungleichung) Sei X eine Zufallsvariable mit Erwartungswert µ X und Standardabweichung σX . Dann gilt für alle t > 0 die Ungleichung: Pr [|X − µX | ≥ t · σX ] ≤
1 . t2
Beweis: Es gilt: 2 . Pr [|X − µX | ≥ t · σX ] ≤ Pr (X − µX )2 ≥ t2 σX
(4.3)
2 Wir betrachten nun die Zufallsvariable Y := (X − µX )2 . Es gilt dann E [Y ] = σX . Nach der Markov-Ungleichung folgt daher nun:
1 2 ≤ 2. E Y ≥ t 2 σX t
Zusammen mit (4.3) zeigt dies die Behauptung.
2
Die Chebyshev-Ungleichung besagt, daß eine Zufallsvariable X im Bereich [µ X −tσ, µX + tσ] mit Wahrscheinlichkeit mindestens 1 − 1/t2 liegt. Beispielsweise liegt X in einem Intervall der Länge [µX − 2σX , µX + 2σ] mit Wahrscheinlichkeit mindestens 0.75 und im Intervall [µX − 10σX , µX + 10σ] mit Warscheinlichkeit mindestens 0.99. Beispiel 4.6 Wir betrachten wieder das Sekretärinnen-Problem aus Abschnitt 2.1. Wir hatten ausgerechnet, daß für die Anzahl X von Einstellungen bei Gleichverteilung gilt: (2) E [X] = Hn . Die Varianz von X hatten wir in Beispiel 3.27 als Hq n − Hn errechnet. (2)
Mit Wahrscheinlichkei mindestens 0.99 liegt X im Intervall [Hn − 10 Hn − Hn , Hn + q √ (2) 10 Hn − Hn , also »großzügig über den Daumen gepeilt« höchstens 10 Hn − 1 vom Mittelwert weg. Die Chebyshev-Ungleichung impliziert, daß für unsere Variable X gilt: (2)
Pr [X ≥ Hn + c] ≤
Hn − H n Var [X] = . 2 c c2
Insbesondere ist für c = Hn : Pr [X ≥ 2Hn ] ≤
1 , Hn
wobei wir hier wieder großzügig abgeschätzt haben. Dieses Ergebnis ist deutlich stärker als das entsprechende Ergebnis aus der Markov-Ungleichung (Beispiel 4.4). C
4.3 Chernoff-Schranken Chernoff-Schranken sind mit die stärksten Hilfsmittel, um Resultate über die »scharfe Konzentration« einer Zufallsvariablen um ihren Erwartungswert zu beweisen. Wir betrachten als Beispiel die folgende Variante des Mehrgüterflußproblems: Gegeben sei ein gerichteter Graph G = (V, A) und k Paare von Knoten (s1 , t1 ), . . . , (sk , tk ). Die Aufgabe ist es, für jedes Paar (si , ti ) einen Weg Pi in G zu finden, der si mit ti verbindet. Die Zielfunktion, die wir uns hier anschauen ist die maximale Last maxa ∈ Ac(a) auf den Bögen, die es zu minimieren gilt. Für eine Lösung P1 , . . . , Pk ist die Last c(a) einer Kante a ∈ A dabei definiert als: c(a) := |{Pi : a ∈ Pi }|.
4.3 Chernoff-Schranken
37
Im folgenden bezeichnen wir mit n := |V | und m := |A| die Anzahl der Ecken bzw. Bögen des Graphens G. Wir nehmen an, daß G keine parallelen Bögen hat, somit gilt m ≤ n 2 . Das oben definierte Mehrgüterflußproblem ist NP-schwer [4]. Daher existiert unter der Annahme P 6= NP kein polynomialer Algorithmus, der das Problem löst. Wir betrachten hier einen randomisierten Algorithmus, der auf Raghavan und Thomposon zurückgeht. Dieser Algorithmus benutzt die Technik des randomisierten Rundens, die wir in Kapitel 6 noch intensiver kennenlernen werden. Das (randomisierte) Runden von Linearen Programmen ist eine inzwischen sehr oft benutzte Technik zur Konstruktion von Approximationsalgorithmen. Dazu formuliert man das Problem zunächst als ganzzahliges Problem. Die Relaxation kann man in Polynomialzeit optimal lösen. Die gebrochenen Variablenwerte aus der Relaxation müssen dann noch geeignet gerundet werden. Wir formulieren das Mehrgüterflußproblem zunächst als ganzzahliges Lineares Programm. Dazu definieren wir uns für jeden Bogen a ∈ A und jedes Paar (s i , ti ) eine Entscheidungsvariable xi (a) ∈ {0, 1}, die genau dann den Wert 1 annimmt, wenn der Pfad P i für das Paar (si , ti ) den Bogen a benutzt. (ILP)
min C
(4.4)
falls v = si 1 X X = −1 falls v = ti xi (v, w) − u:(u,v)∈A w:(v,w)∈A 0 sonst. k X i=1
xi (a) ≤ C
xi (a) ∈ {0, 1}
(4.5)
a∈A
(4.6)
i = 1, . . . , k und a ∈ A (4.7)
Die Nebenbedingungen (4.5) sind die üblichen Flußerhaltungsbedingungen, die angeben, daß eine Einheit Fluß von si nach ti geschickt werden muß. Die Nebenbedingung (4.6) sichert schließlich, daß der Zielfunktionswert C mindestens so groß wie die Last auf jeder Kante ist. Wir relaxieren nun die Ganzzahligkeitsbedingungen (4.7) zu 0 ≤ xi (a) ≤ 1
i = 1, . . . , k und a ∈ A.
Sei (LP) das so entstandene Lineare Programm. Wir bezeichnen mit Z ILP und ZLP die Zielfunktionswerte von optimalen Lösungen des (ILP) bzw. von (LP). Dann gilt offenbar ZLP ≤ ZILP . Die Optimallösung des (LP) läßt sich in Polynomialzeit bestimmen [5]. Sei x ˜ eine solche Optimallösung. Falls x ˜ ganzzahlig ist, dann sind wir bereits fertig. Dies können wir allerdings nicht erwarten. Daher müssen wir für den Fall, daß x ˜ fraktional ist, Maßnahmen treffen, um eine ganzzahlige Lösung daraus zu generieren. Wir betrachten dazu jedes der k Paare (s i , ti ) getrennt. Sei Gi der Teilgraph von G, der nur die Bögen mit x˜i (a) > 0 enthält. Wir entfernen zunächst alle Kreise aus Gi . Ist K ein Kreis in Gi , so können wir den Flußwert auf allen Bögen in K um mina∈K x ˜i (a) verringern. Damit bleibt der Flußwert von si nach ti unverPk ändert, während sich die fraktionale Last i=1 x ˜i (a) höchstens verringert.
Sei x ˆi der fraktionale Fluß für das Paar (si , ti ), den wir aus der LP-Lösung x ˜i durch Entfernen der Kreise erhalten haben. Wie bereits bemerkt, gilt x ˆi (a) ≤ x ˜i (a) für alle a ∈ A. Wir
38
Momente und Abweichungen »dekomponieren« x ˆi in Pfade. Unser Ziel ist es, eine Menge {Pi1 , . . . , Pil } von il ≤ m Pfaden und zugehörige Gewichte 0 ≤ λij ≤ 1 zu finden, so daß X λij = xˆi (a) für alle a ∈ A (4.8) j:a∈Pij
il X
λi j = 1
(4.9)
j=1
gilt. Wegen der Flußerhaltungsbedingungen (4.5) gibt es in Gi für jeden Knoten v ∈ V \{si , ti }, in dem ein Bogen aus Gi mündet, auch mindestens einen Bogen, der aus vi herausführt. Außerdem führt mindestens ein Bogen aus si heraus und mindestens ein Bogen mündet in ti . Daher können wir einen Weg in si starten, der jeden Bogen höchstens einmal benutzt und der in ti enden muß, weil Gi keine Kreise mehr enthält. Somit erhalten wir einen Weg Pi1 . ˆi (a). Wir Auf dem Weg Pi1 gibt es einen Bogen a mit geringstem Flußwert λi1 := x verringern den Fluß auf allen Bögen in Pi1 um λi1 . Fortsetzung des Verfahrens liefert nun Pfade {Pi1 , . . . , Pil } von si nach ti und zugehörige Gewichte λij mit den gewünschten Eigenschaften (4.8) und (4.9). Da mit jeder Pfadextraktion mindestens eine Kante aus G i verschwindet, werden auch höchstens m Pfade konstruiert. Nun kommen wir zu unserem randomisierten Algorithmus. Wir können wie Werte λ ij als eine Wahrscheinlichkeitsverteilung über {Pi1 , . . . , Pil } auffassen, da sie zusammen den Wert 1 ergeben (Gleichung (4.9)). Wir wählen für das Paar (si , ti ) den Pfad Pij mit Wahrscheinlichkeit λij . Wenn wir dieses Verfahren für alle Paare (si , ti ) (unabhängig voneinander) durchführen, so erhalten wir eine zulässige Lösung für das Mehrgüterflußproblem. Es stellt sich die Frage, wie gut die so erhaltene Lösung ist. Sei a ∈ A fest und Xi = Xi (a) ∈ {0, 1} die Last auf a, die durch den Pfad für das Paar Pk (si , ti ) entsteht. Dann gilt für die Gesamtlast c(a) auf a, daß c(a) = i=1 Xi . Wegen E [ci (a)] =
X
j:a∈Pij
k X (4.8) X λi j = x ˆi Pr Pij wird gewählt = j:a∈Pij
(4.10)
i=1
und der Linearität des Erwartungswertes folgt dann: E [c(a)] =
k X i=1
E [ci (a)] =
k X i=1
x ˆi ≤
k X i=1
x ˜i ≤ ZLP ≤ ZILP .
(4.11)
Für jede Kante erwarten wir also eine Last, die höchstens so groß ist wie die in der optimalen Lösung! Allerdings müssen wir maxa∈A c(a) beschränken. Im allgemeinen gilt für Zufallsvariable E [maxi Xi ] 6= maxi E [Xi ], wie das folgende Beispiel zeigt. Beispiel 4.7 Wir nehmen an, daß die Zufallsvariablen X1 und X2 unabhängig jeweils mit Wahrscheinlichkeit 1/2 den Wert 0 und 1 annehmen (Xi modelliert quasi eine faire Münze). Dann gilt maxi E [Xi ] = 1/2 und E [maxi Xi ] = 1/4(0 + 1 + 1 + 1) = 3/4. C Wir müssen die maximale Last also anders abschätzen. Sei a ∈ A fest und X := X(a) := Pk c(a) die Zufallsvariable, welche die Last auf a angibt. Dann gilt X := i=1 Xi mit Pk E [Xi ] = Pr [Xi = 1] = pi , pi := ˆi und E [X] ≤ ZLP ≤ ZILP . Angenommen, i=1 x wir hätten eine Schranke der folgenden Form: Pr [X > (1 + δ)µ] ≤ θ,
(4.12)
4.3 Chernoff-Schranken
39
wobei wir wie üblich µ := E [X] ≤ ZILP setzen. Mit anderen Worten, wir hätten also eine obere Schranke für die Wahrscheinlichkeit, daß die Last auf der festen Kante a ∈ A größer als 1 + δ mal der Erwartungswert ist. Dann können wir die Wahrscheinlichkeit, daß auf irgendeiner Kante die Last größer als 1+δ mal der Erwartungswert ist, nach oben durch mθ abschätzen. Somit könnten wir eine Wahrscheinlichkeit angeben, daß unser Algorithmus eine »schlechte Lösung« liefert. Offfenbar erhalten wir aus der Markov-Ungleichung eine Schranke der Form (4.12): Pr [X > (1 + δ)µ] ≤
1 . 1+δ
Damit können wir die Wahrscheinlichkeit für eine maximale Last größer als (1 + δ)Z ILP nach oben durch m/(1 + δ) abschätzen. Dieses Resultat ist aber unbrauchbar, da m/(1 + δ) ≥ 1 ist, sofern δ »interessante« Werte im Bereich [1, m − 1] annimmt.
Wie sieht es mit der Chebyshev-Ungleichung aus? Da die Xi unabhängig sind (zur Erinnerung: wir hatten für jedes Paar (si , ti ) unabhängig von den anderen Paaren gerundet), gilt Pk 2 Var [X] = i=1 Var [Xi ] (siehe Korollar 3.26). Wir haben Var [Xi ] = E Xi2 −E [Xi ] = x ˆi − x ˆ2i und daher Var [X] =
k X i=1
x ˆi −
k X i=1
x ˆ2i ≤ ZLP −
k X
xˆ2i .
(4.13)
i=1
Den quadratischen Term in (4.13) bekommen wir aber offenbar nicht gut in den Griff. Die Abschätzung Var [X] ≤ ZLP führt nicht zu brauchbaren Ergebnissen.
Wir benötigen also ein stärkeres Hilfsmittel.
= 1, . . . , n unabhängige {0, 1}Satz 4.8 (Chernoff-Schranke) Seien Xi , i Zufallsvariablen mit Pr [X = 1] = p und die Zufallsvariable X definiert durch i i Pn X = i=1 Xi . Es gelte µ = E [X] > 0.
Dann folgt für alle δ > 0:
+
Pr [X > (1 + δ)µ] < F (µ, δ) :=
eδ (1 + δ)(1+δ)
µ
.
(4.14)
Insbesondere gilt für 0 < δ ≤ 1: Pr [X > (1 + δ)µ] < F + (µ, δ) ≤ e−δ
2
µ/3
(4.15)
und für δ ≥ 1: Pr [X > (1 + δ)µ] < F + (µ, δ) ≤ e−(1+δ) ln(1+δ)µ/5 .
(4.16)
Korollar 4.9 Unter den Voraussetzungen von Satz 4.8 gelten alle Aussagen aus Satz 4.8 auch für alle δ ≥ 0 und alle M ≥ µ. Bevor wir Satz 4.8 und Korollar 4.9 beweisen, soll hier zunächst erläutert werden, wie uns die Chernoff-Schranke für unsere spezielles Problem hilft. Wir nehmen im folgenden an, daß die Optimallösung eine »nicht zu kleine maximale Last« erzeugt. Konkret fordern wir ZILP ≥ ZLP ∈ Ω(log m). Sei ε > 0 beliebig und s 3 ln(m/ε) δ := . ZILP Dann gilt (1 + δ)ZILP = ZILP +
p
3ZLP ln(m/ε).
40
Momente und Abweichungen Außerdem gilt: δ 2 ZILP =
3 ln(m/ε) = 3 ln(m/ε). ZILP
Falls δ ≤ 1 gilt, so können wir die handliche Schranke in (4.15) (in der verallgemeinerten Form aus Korollar 4.9) benutzen und erhalten: h i p Pr X > ZILP + 3ZILP ln(m/ε) = Pr [X > (1 + δ)ZILP ] ≤ exp(−δ 2 ZILP /3)
(wg. ZILP ≥ ZLP = E [X])
− ln(m/ε)
=e ε = . m
Wie wir uns bereits oben überlegt hatten, hat somit p mit Wahrscheinlichkeit höchstens ε mm = ε eine der m Kanten Last größer als ZILP + 3ZILP ln(m/ε). Die Voraussetzung δ ≤ 1 ist erfüllt, falls ZILP ≥ 6 ln n − 3 ln ε. Damit ergibt sich folgendes Resultat: Satz 4.10 Sei ε > 0. Falls die Optimallösung ZILP für das Mehrgüterflußproblem den Wert ZILP ∈ Ω(ln m) hat, so findet der randomisierte Rundungsalgorithmus mit Wahrscheinlichkeit mindestens 1 − ε eine Lösung mit Zielfunktionswert höchstens Z ILP + √ O( ZILP · ln n). 2 Beweis von Satz 4.8 Für alle t > 0 gilt: h
Pr [X > (1 + δ)µ] = Pr e
tX
>e
t(1+δ)µ
i
E etX ≤ t(1+δ)µ , e
wobei die letzte Ungleichung aus der Markov-Ungleichung für die Zufallsvariable e tX folgt. Wegen der Unabhängigkeit der Xi sind auch die Zufallsvariablen etXi unabhängig, so daß # " n X tX E e = E exp( tXi ) i=1
=E = =
"
n Y
i=1 n Y i=1
=
n Y
i=1
≤
n Y
i=1
n Y
exp(tXi )
i=1
#
E [exp(tXi )] (pi et + (1 − pi )) (1 + pi (et − 1)) exp(pi (et − 1))
= exp(
n X i=1 t
pi (et − 1))
= exp((e − 1)µ).
(da 1 + x < ex )
4.3 Chernoff-Schranken
41
Wir haben also: Pr [X > (1 + δ)µ] ≤
exp((et − 1)µ) exp(t(1 + δ)µ)
für alle t > 0. Wir wählen nun speziell t = ln(1 + δ) > 0 und erhalten die gewünschte Ungleichung (4.14). Ungleichungen (4.15) und (4.16) folgen durch elementare Abschätzungen. 2 Beweis von Korollar P 4.9 Wir fügen unabhängige {0, 1}-Zufallsvariable X n+1 , . . . , Xm m hinzu, so daß X 0 = i=1 Xi den Erwartungswert M besitzt. Das Ergebnis folgt nun aus Pr [X > (1 + δ)M ] ≤ Pr [X 0 > (1 + δ)M ] und der Chernoff-Schranke aus Satz 4.8 für X 0 . 2 Zur Übung der Chernoff-Schranke betrachten wir noch einmal unser SekretärinnenProblem aus Abschnitt 2.1. Beispiel 4.11 Sei wieder für i = 1, . . . , n die Zufallsvariable Xi genau dann 1, wenn die Kandidatin i eingestellt wird. Wir wissenPbereits, daß pi := Pr [Xi = 1] = 1/i. Die n Gesamtanzahl der Einstellungen ist X = i=1 Xi mit µ = E [X] = Hn . Nehmen wir für einen Moment an, daß die Xi unabhängig sind. Dann können wir die ChernoffSchranke (4.15) benutzen und erhalten für δ = 1: Pr [X > 2Hn ] ≤ e−1/3Hn ≤ (n + 1)−1/3 . Dieses Ergebnis ist deutlich stärker als unser Ergebnis in Beispiel 4.6. Das liegt daran, daß die Chernoff-Schranken mehr von der Struktur von X ausnutzen. Allerdings ist dabei die Unabhängigkeit der Xi eine unabdingbare Voraussetzung. Daß die Xi tatsächlich unabhängig sind, zeigen wir nun. Behauptung: Seien n ≥ 1 paarweise unterschiedliche natürliche Zahlen S gegeben. Die Menge S werde in einer zufälligen Reihenfolge s1 , . . . , sn gegeben und Xi bezeichne die Zufallsvariable, die genau dann 1 ist, wenn si = max{s1 , . . . , si }. Die Zufallsvariablen Xi sind unabhängig. Beweis: Wir beweisen die Behauptung durch Induktion nach n. Für n = 1 ist nichts zu zeigen. Wir nehmen an, daß die Aussage für |S| = n − 1 stimmt. Sei I ⊂ [n] eine beliebige Teilmenge der Variablen. Wir müssen zeigen, daß für alle zi ∈ {0, 1} gilt " # ^ Y Pr Xi = z i = Pr [Xi = zi ] . i∈I
i∈I
Falls |I| ≤ n − 1, so folgt die Aussage aus der Induktionsvoraussetzung, da wir dann für die betreffenden Xi , i ∈ I, eine zufällige Permutation von |I| ≤ n − 1 natürlichen Zahlen vorliegen haben. Der einzige interessante Fall ist also I = [n]. Wir müssen also lediglich beweisen, daß Pr [X1 = z1 ∧ X2 = z2 ∧ · · · ∧ Xn = zn ] =
n Y
Pr [Xi = zi ]
(4.17)
i=1
für alle zi ∈ {0, 1} gilt. Wir können die linke Seite von (4.17) umschreiben zu: Pr [X1 = z1 ∧ X2 = z2 ∧ · · · ∧ Xn = zn ]
= Pr [Xn = zn |X1 = z1 ∧ · · · ∧ Xn−1 = zn−1 ] · Pr [X1 = z1 ∧ · · · ∧ Xn−1 = zn−1 ] = Pr [Xn = zn |X1 = z1 ∧ · · · ∧ Xn−1 = zn−1 ] ·
n−1 Y i=1
Pr [Xi = zi ] ,
42
Momente und Abweichungen wobei wir für die letzte Gleichheit wieder die Induktionsvoraussetzung benutzt haben. Wir betrachten nun die bedingte Wahrscheinlichkeit Pr [Xn = zn |X1 = z1 ∧ · · · ∧ Xn−1 = zn−1 ] und zeigen, daß diese gleich Pr [Xn = zn ] ist. Damit ist der Beweis dann vollständig. Die Variable Xn ist genau dann 1, wenn sn das größte Element aus S ist. Ob sn das größte Element ist oder nicht ist aber unabhängig von den Werten der Zufallsvariablen X i mit i ≤ n − 1 (vgl. die Rückwärtsanalyse des Erzeugens der zufälligen Permutation in Abschnitt 2.1.2). Somit gilt tatsächlich Pr [Xn = zn |X1 = z1 ∧ · · · ∧ Xn−1 = zn−1 ] = Pr [Xn = zn ]. C Es sollte erwähnt werden, daß es nicht »die Chernoff-Schranke« gibt. Es gibt viele Varianten, von denen mal die eine, mal die andere nützlich ist. Möglicherweise muß man sich aber auch »per Hand« eine neue Variante selbst stricken. Dabei kann man die hier vorgestellten Beweistechniken in Abwandlung benutzen. Eine nützliche Variante ist die folgende: Pn Satz 4.12 (Chernoff-Schranke) Sei X = i=1 Xi , wobei die Xi unabhängige {−1, +1}-Variablen mit Pr [Xi = +1] = Pr [Xi = −1] = 1/2 sind. Dann gilt für alle λ > 0: 2 Pr [X ≥ λ] < e−λ /(2n) . 2 Abschließend erwähnen wir noch, daß es auch Chernoff-Schranken gibt, mit denen man die Abweichung nach unten vom Erwartungswert weg beschränken kann: Satz 4.13 (Chernoff-Schranke) Seien Xi , i = 1, . . . , n unabhängige {0, 1}Zufallsvariablen mit Pr [X = 1] = p und die Zufallsvariable X definiert durch i i Pn X = i=1 Xi . Es gelte µ = E [X] > 0.
Dann folgt für alle 0 < δ ≤ 1:
Pr [X < (1 − δ)µ] < F − (µ, δ) := e−δ
2
µ/2
.
(4.18) 2
Graphenalgorithmen 5.1 Minimale Schnitte Wir haben in Abschnitt 3.1 bewiesen, daß ein fester minimaler Schnitt vom Algorithmus C ONTRACT (Algorithmus 3.1 auf Seite 15) mit Wahrscheinlichkeit mindestens 2/n 2 gefunden wird. Wir betrachten nun die Situation, wenn C ONTRACT gestoppt wird, wenn noch t < n Knoten im Graphen vorhanden sind. Wir sagen, daß ein minimaler Schnitt überlebt, wenn keine seiner Kanten kontrahiert wurde. Lemma 5.1 Algorithmus C ONTRACT werde gestoppt, wenn noch t Knoten im Graphen vorhanden sind. Sei C ∗ ein beliebiger minimaler Schnitt in G. Dann überlebt der Schnitt C ∗ mit Wahrscheinlichkeit 2 ! t(t − 1) t ∈Ω n(n − 1) n Beweis: Der Beweis verläuft vollkommen analog zu Satz 3.7. Für i = 1, . . . , n − 2 bezeichnen wir wieder mit Ei das Ereignis, daß bei der iten Kontraktion keine Kante aus C ∗ kontrahiert wird. Dann überlebt C ∗ mit Wahrscheinlichkeit "n−t # [ (5.1) Pr Ei . i=1
Statt des Terms Pr erhalten wir
hS
Pr
n−2 i=1
"n−t \ i=1
i Ei müssen wir jetzt (5.1) nach unten beschränken. Mit (3.5) #
Ei ≥
n−t Y i=1
1−
2 n−i+1
n−2 n−3 n−4 t t−1 · · · n n−1 n−2 t+2t+1 t(t − 1) = n(n − 1)
=
Dies war zu zeigen.
2
Wir konstruieren nun einen Algorithmus FAST C UT (Algorithmus 5.1 auf der nächsten Seite), der auf »gestutzten« Aufrufen von C ONTRACT beruht. Lemma 5.2 Die Rekursionstiefe von Algorithmus FAST C UT beträgt d = O(log n). Jeder Graph in Rekursionstiefe t hat O(n/2t/2 ) Ecken.
44
Graphenalgorithmen Algorithmus 5.1 Ein schneller randomisierter Algorithmus zur Bestimmung eines minimalen Schnittes. FAST C UT Input: Ein ungerichteter Graph G = (V, E) Output: Ein Schnitt C in G. 1 if n ≤ 6 then 2 Berechne einen minimalen Schnitt C durch Enumeration. 3 return C 4 else √ 5 Setze t := d1 + n/ 2e 6 Führe den Algorithmus C ONTRACT (Algorithmus 3.1 auf Seite 15) zweimal unabhängig voneinander aus, um zwei Graphen H1 und H2 mit jeweils t Knoten zu erhalten. 7 Berechne rekursiv Schnitte in H1 und H2 . 8 Sei C der kleinere der beiden Schnitte. 9 return C. 10 end if Beweis: Man zeigt leicht durch Induktion nach der Rekursionstiefe t, daß ein Graph in Rekursionstiefe t nur O(n/2t/2 ) Ecken besitzt. Dies ist die zweite Aussage des Lemmas, welche die erste sofort impliziert. 2 Lemma 5.3 Algorithmus FAST C UT läuft in O(n2 log n) Zeit. Beweis: Beim Aufruf von FAST C UT auf einem Graphen mit n > 6 Ecken werden zunächst zweimal n − t Kontraktionen durchgeführt (durch die zwei unabhängigen Aufrufe von C ONTRACT). Da C ONTRACT in O(n2 ) Zeit läuft, wenn er den Graphen bis auf zwei Knoten schrumpft, können wir den Aufwand für die Schrumpfung auf t ≥ 2 Knoten großzügig mit O(n2 ) abschätzen. Daher berechnet sich die Laufzeit T (n) von FAST C UT nach folgender Rekursion: T (n) = 2T (t) + O(n2 ) n = 2T 1+ √ + O(n2 ). 2
(5.2)
Wir berechnen nun den Aufwand in jeder Rekursionsebene ` ≥ 0. In der `ten Ebene gibt es insgesamt 2` Teilprobleme, von denen jedes nach Lemma 5.2 höchstens c 1 √n ` Knoten 2 2 n besitzt. Für jedes Teilproblem wird maximal c2 c1 √ ` Zeit benötigt, wobei c2 > 0 eine 2 geeignet gewählte Konstante ist. Daher ist der gesamte Aufwand für die Ebene ` nach oben wie folgt abschätzbar: !2 n 2` c2 c1 √ ` = c2 c21 n2 = O(n2 ). 2
Da nach Lemma 5.2 insgesamt d = O(log n) Rekursionsebenen existieren, beträgt der gesamte Zeitaufwand für FAST C UT daher d · O(n2 ) = O(n2 log n). 2 Lemma 5.4 Algorithmus FAST C UT findet mit Wahrscheinlichkeit Ω(1/ log n) einen minimalen Schnitt.
Beweis: Sei C ∗ ein minimaler Schnitt in G mit |C ∗ | = k. Mit H bezeichnen wir einen Teilgraphen, der in einer Rekursionsstufe auftritt. Wir nennen den Aufruf FAST C UT(H)
5.1 Minimale Schnitte erfolgreich, wenn FAST C UT einen minimalen Schnitt in H findet. Wir bezeichnen mit P (H) die Erfolgswahrscheinlichkeit auf H. FAST C UT(H) ist erfolgreich, wenn C ∗ die Kontraktionen für mindestens einen der Graphen Hi (i = 1, 2) überlebt und FAST C UT(Hi ) für diesen Graphen erfolgreich ist. FASTC UT findet einen minimalen Schnitt, wenn FAST C UT(G) erfolgreich ist. Mit n0 bezeichnen wir die Eckenanzahl von H. Sei i ∈ {1, 2} fest. Nach Lemma 5.1 überlebt C ∗ die Kontraktionen für Hi mit Wahrscheinlichkeit mindestens √ √ √ √ d1 + n0 / 2e · dn0 / 2e d1 + n0 / 2e d1 + n0 / 2 − 1e 1 1 t(t − 1) 1 = = · ≥ √ ·√ = . n0 (n0 − 1) n0 (n0 − 1) n0 n0 − 1 2 2 2
Die Wahrscheinlichkeit, daß für festes i ∈ {1, 2} der Schnitt C ∗ in Hi überlebt und FAST C UT(Hi ) dann erfolgreich ist, kann man daher nach unten durch 12 · P (Hi ) abschätzen.
FAST C UT(H) ist nur dann nicht erfolgreich, wenn beide Alternativen via H 1 und H2 keinen minimalen Schnitt liefern. Da die beiden Alternativen unabhängig sind, folgt für Erfolgswahrscheinlichkeit auf H die Rekursionsgleichung: P (H1 ) P (H2 ) P (H) ≥ 1 − 1 − · 1− . (5.3) 2 2 Für einen Knoten im Rekursionsbaum definieren wir seine Höhe als die Länge des kürzesten Weges zu einem Blatt. Blätter haben also Höhe 0, die Wurzel hat Höhe d = O(log n). Sei p(t) eine untere Schranke für die Wahrscheinlichkeit, daß FAST C UT für einen Graphen in einem Knoten mit Höhe t erfolgreich ist. Das Lemma ist gezeigt, wenn wir p(d) ∈ Ω(log n) bewiesen haben.
Offenbar ist p(0) = 1, da in jedem Blatt durch Enumeration auf jeden Fall ein minimaler Schnitt gefunden wird. Aus der Rekursion (5.3) folgt 2 p(h − 1) p(h) ≥ 1 − 1 − für t ≥ 1. (5.4) 2 Wir zeigen durch Induktion nach h, daß p(h) ≥ 1/(h + 1). Die Aussage ist für t = 0 offenbar richtig. Für h ≥ 1 ergibt sich nun: 2 p(h − 1) p(h) ≥ 1 − 1 − 2 2 1 (nach Induktionsvoraussetzung.) ≥1− 1− 2h 4h2 − 4h + 1 =1− 4h2 4h − 1 = 4h2 (4h − 1)(h + 1) 1 = · 2 4h h+1 4h2 + 4h − h − 1 1 = · 4h2 h+1 4h2 + 3h − 1 1 = · 2 4h h+1 1 . ≥ h+1 Dies beendet die Induktion. Da die Rekursionstiefe d = O(log n), also d ≤ c log n, ist, ergibt sich für die Erfolgswahrscheinlichkeit jetzt die untere Schranke p(d) ≥ 1/(c log n + 1) ∈ Ω(1/ log n). 2
45
46
Graphenalgorithmen
5.2 Minimale aufspannende Bäume Definition 5.5 (Aufspannender Baum, minimaler aufspannender Baum) Sei G = (V, E) ein ungerichteter Graph. Ein aufspannender Baum von G ist ein Teilgraph T = (V, ET ) von G mit gleicher Eckenmenge, der zusammenhängend und kreisfrei ist. Ist c : E → R eine Kantenbewertung, so heißt ein aufspanndender Baum T von G ein minimaler aufspannender Baum (MST), wenn c(T ) = min{ c(T 0 ) : T 0 ist aufspannender Baum von G }. Es läßt sich zeigen, daß ein aufspannender Baum eines Graphen mit n Ecken genau n − 1 Kanten besitzt, siehe [2, Kapitel 23] oder [1]. Falls der Graph G nicht zusammenhängend ist, so kann kein aufspannender Baum von G existieren. Für unsere Zwecke wird es nützlich sein, das Konzept des MST auch auf unzusammenhängende Graphen zu erweitern. Definition 5.6 (Aufspannender Wald, minimaler aufspannender Wald) Ein Wald ist ein ungerichteter Graph, bei dem jede Zusammenhangskomponente ein Baum ist. Ein aufspannender Wald F = (V, EF ) eines Graphen G = (V, E) ist ein Wald mit gleicher Eckenmenge wie G, so daß jede Zusammenhangskomponenten von F ein aufspannender Baum einer Zusammenhangskomponente von G ist. Ist c : E → R eine Kantenbewertung, so ist ein minimaler aufspannender Wald (MSF) ein aufspannender Wald mit minimalem Gesamtgewicht. Das MST-Problem besteht darin, einen minimalen aufspannenden Baum zu bestimmen. Das MSF-Problem ist die natürliche Verallgemeinerung, wobei der Ausgangsgraph nicht notwendigerweise zusammenhängend ist. Ist G zusammenhängen, so ist zwangsläufig jeder aufspannende Wald ein aufspannender Baum, so daß sich das MSF-Problem auf das MST-Problem reduziert. Offenbar läßt sich das MSF-Problem auch lösen, indem man zuerst die Zusammenhangskomponenten von G bestimmt (dies ist in linearer Zeit möglich, siehe z.B. [2]) und dann auf jeder Zusammenhangskomponente einen MST bestimmt. Man kennt sehr schnelle deterministische Algorithmen für die Bestimmung eines MST. Falls man den Algorithmus von Prim mit Fibonacci-Heaps implementiert, so benötigt dieser O(m+n log n) Zeit [2, 8]. Mit Hilfe von komplizierteren Algorithmen und Datenstrukturen ist die Laufzeit sogar auf O(m log β(m, n)) zu drücken, wobei β(m, n) := min{ i : log(i) n ≤ m/n } eine extrem langsam wachsende Funktion ist (im Skript [8] ist beschrieben, wie man mit relativ einfachen Mitteln eine Laufzeit von O(mβ(m, n)) erreicht). In diesem Abschnitt lernen wir einen randomisierten Algorithmus kennen, der eine erwartete Laufzeit von O(n + m) besitzt und der (im Prinzip) ganz einfach funktioniert. Im folgenden nehmen wir an, daß die Kantengewichte c : E → R alle paarweise verschieden sind. Dies ist nicht wirklich eine Einschränkung, da wir immer eine »kanonische« Ordnung der Kanten benutzen könnten, um Gleichstände aufzulösen.
5.2.1 Der Algorithmus von Boruvka Baustein für unseren randomisierten Linearzeit Algorithmus ist ein einfacher deterministischer Algorithmus, der auf Boruvka zurückgeht. Lemma 5.7 Sei v ∈ V eine Ecke des Graphen G und (v, w) unter allen zu v inzidenten Kanten diejenige mit minimalem Gewicht c(v, w). Dann enthält jeder MST von G die Kante (v, w).
5.2 Minimale aufspannende Bäume Beweis: Sei T ein MST mit (v, w) ∈ / T . Hinzunahme von (v, w) zu T erzeugt einen Kreis, der eine Kante (v, u) 6= (v, w) enthalten muß. Dann ist T ∪ {(v, w)} \ {(u, v)} wieder ein aufspannender Baum, der aber wegen c(u, v) > c(v, w) kleineres Gewicht als T besitzt. Dies ist ein Widerspruch. 2 Das letzte Lemma legt einen MST-Algorithmus nahe. Wir starten mit leerer Kantenmenge T = ∅. Dann erfolgt eine Boruvka-Phase: Boruvka-Phase Wir bestimmen für jede Ecke v ∈ V die billigste inzidente Kante. Sei C die Menge dieser Kanten. Wir kontrahieren alle Kanten in C, wobei wir entstandende Schleifen, also Kanten der Form (v, v), eliminieren und von entstandenen parallelen Kanten nur die jeweils billigste behalten. Eine Boruvka-Phase kann so implementiert werden, daß sie in linearer Zeit O(n + m) auf einem Graphen mit n Ecken und m Kanten läuft: Die Bestimmung der leichtesten inzidenten Kanten C ist mittels Durchlaufen der Adjazenzlisten jedes Knotens in O(n + m) Zeit möglich. Danach bestimmt man die Zusammenhangskomponenten im Graphen (V, C), ersetzt jede Komponente durch eine einzelne Ecke und eliminiert zum Schluß noch Schleifen und parallele Kanten. Lemma 5.8 Sei G = (V, E) ein Graph und G0 der Graph, der aus G durch Kontraktion der Kantenmenge C in einer Boruvka-Phase entsteht. Ist T 0 ein MST in G0 , so ist T 0 ∪ C ein MST von G. Beweis: Die Kanten aus C sind nach Lemma 5.7 Teil jedes MST von G. Jeder MST T in G induziert einen aufspannenden Baum T \ C in G0 , der mindestens so schwer ist wie T 0 . Somit hat T 0 ∪ C höchstens so viel Gewicht wie der MST T . Da T 0 ∪ C kreisfrei ist, muß T 0 ∪ C ebenfalls ein MST sein. 2 Da jede Kante zu genau zwei Ecken inzident ist, enthält die Menge C aus der BoruvkaPhase mindestens n/2 Kanten. Folglich reduziert sich durch die Boruvka-Phase die Anzahl der Ecken von n auf höchstens n/2. Die Anzahl m der Kanten steigt natürlich nicht. Daher zeigt Lemma 5.8, daß eine Boruvka-Phase in O(n + m) Zeit das MST-Problem auf einem Graphen mit n Ecken und m Kanten auf ein MST-Problem in einem Graphen mit höchstens n/2 Ecken und höchstens m Kanten reduziert. Der naheliegende rekursive Algorithmus (die algorithmische Variante von Lemma 5.8) benötigt daher O((n + m) log n) Zeit. Bemerkung 5.9 Der MST-Algorithmus von Prim kann mit Hilfe von Fibonacci-Heaps so implementiert werden, daß er in O(m + n log n) Zeit läuft [2, 8]. Durch Kombination des Boruvka-Algorithmus mit dem von Prim können wir einen schnelleren MST-Algorithmus konstruieren. Die Idee ist dabei, nicht so lange Boruvka-Phasen durchzuführen, bis nur zwei Knoten vorhanden sind, sondern bereits vorher abzubrechen und für den Restgraphen den Algorithmus von Prim zu verwenden. Wenn man O(log log n) Boruvka-Phasen hintereinander ausführt (was insgesamt O(m log log n) Zeit benötigt), so erhält man einen Graphen mit O(n/logn) Ecken. Auf diesem Graphen benötigt der Algorithmus von Prim dann nur O(m +
n n n · log ) = O(m + (log n − log log n)) = O(m + n) log n log n log n
Zeit. Damit läuft der kombinierte Algorithmus insgesamt in Zeit O(n + m log log m).
47
48
Graphenalgorithmen
5.2.2 Schwere Kanten Für die Konstruktion unseres randomisierten Algorithmus benötigen wir einen MSTVerifikationsalgorithmus, den wir (zunächst) als »Blackbox« verwenden werden. Bei der MST-Verifikation ist ein aufspannender Baum T des Graphen G gegeben und es soll entschieden werden, ob T ein MST ist. Offenbar ist das MST-Verifikationsproblem höchstens so schwierig wie das MST-Problem (wir könnten einfach einen MST berechnen und dessen Gewicht mit dem von T vergleichen). Tatsächlich läßt sich das Verifikationsproblem aber deterministisch in linearer Zeit O(n + m) lösen. Dabei liefert der Linearzeitalgorithmus sogar noch mehr Information, die wir ausnutzen werden. Sei F ein aufspannender Wald von G. Für zwei Ecken u, v ∈ V in der gleichen Zusammenhangskomponente von F existiert ein eindeutiger Weg PF (u, v) zwischen u und v. Wir setzen ( max{ c(e) : e ∈ PF (u, v) }, falls u und v in der gleichen Komp. von F sind cF (u, v) := +∞, sonst. Definition 5.10 (F -schwere Kante) Sei F ein aufspannender Wald von G. Wir bezeichnen eine Kante (u, v) ∈ E als F -schwer, wenn c(u, v) > cF (u, v). Ansonsten heißt die Kante (u, v) F -leicht. Ist eine Kante e ∈ E F -schwer ist, so kann sie nicht in einem MST liegen. Außerdem ist für einen Wald F jede Kante e ∈ F offenbar F -leicht. Lemma 5.11 Ein aufspannender Baum T ist genau dann ein MST, wenn die einzigen T leichten Kanten die Kanten aus T selbst sind. Beweis: Falls e = (u, v) ∈ E \ T eine T -leichte Kante ist, so ist T 0 := T \ {e} ∪ {f } für eine geeignete Kante f ∈ PT (u, v) wieder ein aufspannender Baum. Da e T -leicht war und alle Kanten verschiedenes Gewicht haben, gilt c(T 0 ) < c(T ), also kann T kein MST sein. Wenn umgekehrt alle Kanten aus E\T T -schwer, so liefert der Kruskal-Algorithmus (siehe Abschnitt 5.2.5) zur Bestimmung eines MST genau den Baum T . Somit ist T ein MST. 2 Lemma 5.11 liefert einen Zusammenhang zwischen der MST-Verifikation und dem Konzept der F -schweren/F -leichten Kanten. Im Prinzip genügt es für die Verifikation eines Kandidatenbaums T , alle T -leichten Kanten zu finden. Der folgende Satz liefert das Ergebnis, das wir für unsere Zwecke hier als »Blackbox« verwenden werden. In Abschnitt 5.2.4 sind grundlegende Ideen des referenzierten Algorithmus dargestellt. Satz 5.12 (King [7]) Sei G ein Graph und F ein aufspannender Wald. Es gibt einen deterministischen Algorithmus, der in O(n + m) Zeit alle F -schweren Kanten in G findet. 2
5.2.3 Zufällige Stichproben für die MST-Berechnung Lemma 5.13 Algorithmus R ANDOM -S AMPLE -MST findet einen minimalen aufspannenden Wald. Die Worst-Case Laufzeit des Algorithmus beträgt O(min{n2 , m log n}). Beweis: Die Korrektheit des Algorithmus folgt im wesentlichen aus Lemma 5.8: Die kontrahierten Kanten aus Schritt 1 sind Teil jedes MSF (vgl. auch Lemma 5.7) und der MSF für G berechnet sich als Vereinigung von C und des MSF T in G0 . Der Algorithmus berechnet zwar einen MSF im ausgedünnten Graphen G00 (per Induktion, da G00 weniger Ecken
5.2 Minimale aufspannende Bäume
49
Algorithmus 5.2 Randomisierter Algorithmus zur Bestimmung eines MST. R ANDOM -S AMPLE -MST(G, c) Input: Ein ungerichteter Graph G = (V, E) mit Kantengewichten c : E → R Output: Ein minimaler aufspannender Wald in G. 1 Führe drei Boruvka-Phasen durch. Sei C die Menge der kontrahierten Kanten und G 0 der resultierende Graph. { G0 hat höchstens n/8 Ecken } 2 Konstruiere einen zufälligen Graphen H mit der gleichen Eckenmenge wie G 0 : jede Kante von G0 wird unabhängig von den restlichen Kanten mit Wahrscheinlichkeit 1/2 zu H hinzugefügt. 3 Berechne rekursiv einen MSF F in H. 4 Berechne alle F -schweren Kanten in G0 und lösche diese aus G0 . Sei G00 der resultierende Graph. 5 Berechne rekursiv einen MSF T in G00 . 6 return T ∪ C. enthält), aber beim Ausdünnen werden nur F -schwere Katen entfernt, die sowieso nicht im MSF von G0 enthalten sein können. Zur Analyse der Worst-Case-Laufzeit des Algorithmus betrachten wir den Rekursionsbaum, der bei der Ausführung entsteht. Jeder Knoten im Rekursionsbaum steht für ein zu lösendes Teilproblem und hat zwei Söhne, einen für den MSF für H (Zeile 3) und einen für den MSF von G00 (Zeile 5). Wir nennen den ersten Sohn den linken Sohn und den anderen den rechten Sohn. Abbildung 5.1 veranschaulicht den Rekursionsbaum. Ein Teilproblem mit Tiefe d im Rekursionsbaum besteht aus einem Graphen mit höchstens n/8 d Ecken. Insbesondere ist die Rekursionstiefe nur O(log n). G mit n Ecken und m Kanten Zeile 3
Zeile 5
≤ n/8 Ecken und m1 Kanten Zeile 3
Zeile 5
2
≤ n/82 Ecken
≤ n/8 Ecken
≤ n/8 Ecken und m2 Kanten
≤ n/8d Ecken
Abbildung 5.1: Rekursionsbaum für R ANDOM -S AMPLE -MST Die Worst-Case-Laufzeit ergibt sich durch Summation des Berechnungsaufwandes in den einzelnen Knoten des Rekursionsbaums. Sind in einem Knoten n Ecken und m Kanten vorhanden, so fällt im Knoten selbst nur O(n + m) Zeit an: die Boruvka-Phasen in Schritt 1 benötigen nur lineare Zeit, die Berechnung des Graphen H in Schritt 2 erfordert das einmalige Betrachten jeder Kante und das Bestimmen der F -schweren Kanten kann ebenfalls in Linearzeit erfolgen (siehe Satz 5.12).
50
Graphenalgorithmen Da jeder betrachtete Graph parallelen- und schleifenfrei ist, besitzt ein Teilproblem auf Tied 2 fe d höchstens (n/82 ) Kanten. Da »nur« maximale 2d Teilprobleme mit Tiefe d existieren, läßt sich der Gesamtaufwand nach oben wie folgt abschätzen: dlog8 ne
X d=0
2
d (n/8
2
d 2
)
c log8 ne X 1 n2 = · 2d 2d = O(n2 ) 2 8 d=0
Eine zweite Abschätzung erhalten wir durch folgende Beobachtung: Wir betrachten ein Teilproblem mit N Ecken und M Kanten, das zwei Teilprobleme (Söhne) erzeugt. Jede Kante aus E gelangt in genau ein Teilproblem mit zwei Ausnahmen: • Die Kanten im MSF F für H gelangen in beide Teilprobleme. • Die Kanten, die in den Boruvka-Phasen in Schritt 1 eliminiert werden, tauchen in keinem Teilproblem auf. Sei n ˆ die Anzahl der Ecken, die nach Schritt 1 übrigbleiben. Wir wissen n ˆ ≤ N/8. Dann enthält F als aufspannender Wald höchstens n ˆ − 1 ≤ N/8 Kanten. In einer Borovka-Phase werden aber mindestens N/2 Kanten eliminiert, so daß beide Teilprobleme zusammen nur höchstens m + N/8 − N/2 ≤ m Kanten besitzen.
Mit der obigen Beobachtung folgt, daß alle Teilprobleme mit Tiefe d zusammen nur m Kanten besitzen. Da wir O(log n) Ebenen im Rekursionsbaum haben, folgt, daß die Zeitkomplexität nach oben ebenfalls durch O(m log n) beschränkt ist. 2
Satz 5.14 (Negative Binomialverteilung) Eine Münze werde solange geworfen, bis n mal KOPF erschienen ist. Dabei habe jeder Münzwurf Wahrscheinlichkeit p, daß KOPF erscheint. Sei X die Zufallsvariable, die angibt, wie viele Würfe erfolgen. Dann hat X die negative Binomialverteilung mit Parametern n und p. Es gilt x − 1 n x−n Pr [X = x] = p q (x = n, n + 1, . . . ) n−1 n E [X] = p nq Var [X] = 2 , p
wobei q = 1 − p. Beweis: Wir wissen aus Beispiel 3.21, daß für n = 1 die Zufallsvariable die geometripz sche Verteilung hat und die zugehörige PGF durch 1−qz gegeben ist. Die Variable X im Satz ist daher Summe von n unabhängigen Variablen mit geometrischer Verteilung. Nach Lemma 3.20 hat X daher die PGF n pz GX (z) = . 1 − qz Die Behauptungen des Lemmas folgen nun durch elementare Methoden der Analysis.
2
Lemma 5.15 Sei G = (V, E) ein ungerichteter Graph mit n = |V | Ecken und m = |E| Kanten. Der Teilgraph H werde aus G dadurch gewonnen, daß jede Kante von G unabhängig mit Wahrscheinlichkeit p (0 < p < 1) in H aufgenommen werde. Sei schließlich F ein MSF in H und X die Anzahl von F -leichten Kanten in G. Dann wird X stochastisch dominiert von einer Zufallsvariablen mit negativer Binomialverteilung zu den Parametern n und p. Insbesondere gilt E [X] ≤ n/p.
5.2 Minimale aufspannende Bäume
51
Beweis: Wir konstruieren den Graph H und den MSF F gleichzeitig, indem wir die Kanten von H nach aufsteigendem Gewicht betrachten. Dies ist eine Anwendung des Prinzips der verzögerten Entscheidungen (siehe Abschnitt 3.2): wir treffen die Zufallsentscheidungen für die Kanten in G erst dann, wenn wir sie benötigen. Sei c(e1 ) < c(e2 ) < · · · < c(em ). Wir verwenden eine Variante des Kruskal-Algorithmus (siehe Abschnitt 5.2.5) zur Bestimmung eines MSF. Anfangs sind H und F leer. Wir betrachten dann die Kanten in der Reihenfolge e1 , . . . , em , d.h., gemäß aufsteigendem Gewicht. Im iten Schritt verabeiten wir ei . Dabei werfen wir zunächst eine gewichtete Münze mit Kopfwahrscheinlichkeit p, die darüber entscheidet, ob e i in H aufgenommen wird. Falls wir Kopf gewürfelt haben, entscheiden wir über die Aufnahme von e i in den Wald F . Die Kante ei wird genau dann zu F hinzugefügt, wenn die Endpunkte von e i in verschiedenen Komponenten von (V, F ) liegen. Sei Fi der Wald, wenn ei untersucht wird. Aufgrund der Reihenfolge, in der die Kanten verarbeitet werden, gilt: ei ist genau dann Fi -leicht, wenn die Endpunkte von ei in verschiedenen Komponenten von (V, Fi−1 ) liegen. Der Wald F , der durch das obige Verfahren erzeugt wird, ist genau der Wald, den der Algorithmus von Kruskal bei Anwendung auf H berechnen würde. Er ist also tatsächlich unser MSF F . Ist eine Kante ei Fi−1 -schwer, so ist sie natürlich auch F schwer, da der Wald niemals Kanten verliert. Ist umgekehrt ei Fi−1 -leicht, so ist sie auch F -leicht, da nach ei nur schwerere Kanten zu F hinzugefügt werden. Wir müssen zeigen, daß die Anzahl der F -leichten Kanten klein ist. Dazu formulieren wir unseren parallelen Aufbau von H und F äquivalent neu. Wir stellen uns vor, daß wir für ei zuerst prüfen, ob die Endpunkte in verschiedenen Komponenten liegen. Falls dies so ist, so markieren wir ei . Danach werfen wir unsere gewichtete Münze. Wir fügen ei zu F hinzu, wenn ei markiert ist und die Münze Kopf zeigt. Offenbar erhalten wir so genau den selben Wald F wie vorher. Der Trick dabei ist aber folgender: jedes Mal, wenn wir eine markierte Kante in der Hand haben, so wird sie mit Wahrscheinlichkeit p zum Wald F hinzugefügt. Der Wald F hat zum Schluß z ≤ n − 1 Kanten.
Wenn wir nur auf die Münzwürfe für die markierten Kanten schauen, dann sind wir in der Situation, daß wir eine Münze mit Kopfwahrscheinlichkeit p so lange werfen, bis wir z ≤ n − 1 mal Kopf erhalten haben. Die Gesamtzahl der Münzwürfe für markierte Kanten entspricht der Anzahl der F -leichten Kanten (die unmarkierten Kanten sind F -schwer!). Die Frage, wie viele F -leichte Kanten existieren, können wir somit umformulieren, wie viele Münzwürfe wir benötigen, um z ≤ n − 1 mal Kopf zu erhalten.
Wir können uns jetzt vorstellen, daß wir noch weiter Münzen werfen, bis wir genau n − 1 mal Kopf erhalten haben. Damit sind wir aber in der Situation der negativen Binomialverteilung mit Parametern n − 1 und p, siehe Satz 5.14 auf der gegenüberliegenden Seite. Es folgt, daß die erwartete Anzahl von F -leichten Kanten nach oben durch (n − 1)/p beschränkt ist. 2 Bevor wir beweisen, daß Algorithmus R ANDOM -S AMPLE -MST lineare Laufzeit hat, machen wir zunächst einmal eine Überschlagsrechnung, die wir nachher wasserdicht machen werden. Wir stellen uns vor, der Algorithmus sei deterministisch und alle Erwartungswerte würden deterministisch exakt angenommen. Sei T (n, m) die Laufzeit auf einem Graphen mit n Ecken und m Kanten. Dann erfüllt T die Rekursion: T (n, m) ≤ T (n/8, m/2) + T (n/8, n/2) + O(m).
(5.5)
Der erste Term steht dabei für das linke Teilproblem, bei dem wir durch die Kontraktionen in der Boruvka-Phase mindestens die Hälft der Kanten eliminiert haben. Der zweite Term
52
Graphenalgorithmen entspricht dem rechten Teilproblem, das nach (der nichtexistenten) deterministischen Variante von Lemma 5.15 nur n/2 Kanten enthält. Der dritte Term reflektiert den Aufwand für die Boruvka-Phasen, wobei wir m ≥ n vorausgesetzt haben. Falls sogar m ≥ 2n (was wir durch Hinzufügen von Dummy-Kanten immer erreichen können), so ist n/2 ≤ m/4 und wir erhalten aus (5.5): T (n, m) ≤ T (n/8, m/2) + T (n/8, m/4) + O(m).
(5.6)
Man zeigt nun leicht durch Induktion, daß (5.6) eine Lösung T (n, m) ∈ O(n + m) hat. Satz 5.16 Algorithmus R ANDOM -S AMPLE -MST hat eine erwartete Laufzeit von O(n + m). Beweis: Wir betrachten wieder den Rekursionsbaum des Algorithmus. Bereits im Beweis von Lemma 5.13 hatten wir gesehen, daß in jedem Knoten des Rekursionsbaums nur lineare Zeit (in der Anzahl der Ecken und Kanten des betroffenen Graphen) anfällt. Somit genügt es, die Summe der Ecken und Kanten über alle Knoten des Baumes nach oben abzuschätzen. In jedem Knoten sind die Anzahl der Ecken und Kanten des Graphen Zufallsvariable. Aufgrund der Linearität des Erwartungswertes genügt es, die Summe der einzelnen Erwartungswerte abzuschätzen. Die Summe der Ecken in allen Teilproblemen ist sehr einfach (wir benötigen hier nicht einmal Erwartungswerte): Es gibt 2d Knoten der Tiefe d, von denen jeder höchstens n/8d Ecken besitzt. Insgesamt haben wir also höchstens ∞ X d=0
∞
X n 2 · d =n 8 d
d=0
d 4 1 = n. 4 3
Ecken. Wir kommen nun zu den Kanten. Sei X die Anzahl der Kanten in einem Teilproblem und Y die Anzahl der Kanten im linken Teilproblem. Jede Kante des Vaters wird entweder bei den drei anfänglichen Boruvka-Phasen eliminiert oder sie hat Wahrscheinlichkeit 1/2, in das linke Teilproblem zu gelangen. Somit gilt E [Y |X = k] ≤ k/2 für alle k ∈ N. Daraus folgt E [Y ] ≤ E [X] /2.
Wir dekomponieren nun den Rekursionsbaum in linke Pfade. Ein linker Pfad startet entweder bei der Wurzel oder einem rechten Sohn und enthält dann alle Knoten, die als linke Söhne, linke Enkel, etc. erreichbar sind. Unsere Argumentation im letzten Abschnitt zeigt, daß, falls die erwartete Anzahl von Kanten in einem Teilproblem P∞ k ist, die erwartete Gesamtzahl aller Kanten im linken Pfad nach unten höchstens i=0 k/2i = 2k ist.
Daher ist die Gesamtzahl aller Kanten nach oben durch 2m plus die erwartete Anzahl von Kanten in rechten Söhnen beschränkt. Nach Lemma 5.15 hat ein rechter Sohn höchstens zweimal so viele Kanten wie Ecken. Da wir bereits wissen, daß alle Söhne zusammen nur 4/3n Ecken besitzen, folgt, daß insbesondere die Anzahl der Ecken in rechten Söhnen durch 4/3n beschränkt ist. Daher ist die erwartete Anzahl von Kanten in allen Knoten insgesamt maximal 2m + 4/3n = O(n + m). 2 Man kann übrigens zeigen, daß R ANDOM -S AMPLE -MST nicht nur im Erwartungswert lineare Laufzeit aufweist, sondern mit hoher Wahrscheinlichkeit nur O(n + m) Schritte benötigt. Satz 5.17 Algorithmus R ANDOM -S AMPLE -MST benötigt mit Wahrscheinlichkeit 1 − e−Ω(m) nur O(n + m) Schritte.
5.2 Minimale aufspannende Bäume
53
Beweis: Wir benutzen zum Beweis eine »globale Version« vom Lemma 5.15 und zeigen, daß mit Wahrscheinlichkeit 1−e−Ω(m) alle Teilprobleme des Rekursionsbaums zusammen nur O(m) Kanten haben.
Zunächst betrachten wir die rechten Teilprobleme. Diese enthalten die F -leichten Kanten des Vaterproblems. Im Beweis von Lemma 5.15 hatten wir den parallelen Aufbau von H und F äquivalent neu formuliert, indem wir uns vorgestellt hatten, daß wir für e i zuerst prüfen, ob die Endpunkte in verschiedenen Komponenten liegen und dann unsere Münze werfen. Zur Vereinfachung der Darstellung sagen wir, daß wir für eine markierte Kante eine Euro werfen und für eine unmarkierte Kante einen Dollar. 1 . Wie im Beweis von Lemma 5.15 sind für die F -leichten Kanten allein die Euro-Würfe relevant. Jeder Euro-Wurf, der Kopf zeigt, entspricht einer Kante in einem Wald in einem rechten Teilproblem. Da jeder Wald in einem Graphen mit x Ecken nur x − 1 Kanten hat, ist die Gesamtzahl aller Waldkanten in rechten Teilproblemen durch die Anzahl der Knoten in rechten Teilproblemen beschränkt. Die Gesamtanzahl aller Knoten in rechten Teilproblemen können wir wie folgt nach oben abschätzen: ∞ X d=1
∞
X n 2 · d =n 8 d
d=1
d ∞ d 1 X 1 1 1 = n = n. 4 4 4 3 d=0
Wir haben dabei ausgenutzt, daß wir für die rechten Teilprobleme erst ab Tiefe d = 1 zählen müssen. Wir haben somit gezeigt, daß n/3 eine obere Schranke für die Gesamtanzahl der Kopfergebnisse bei den Euro-Würfen ist. Für jede leichte Kante muß ein Euro-Wurf stattgefunden haben. Wenn wir mehr als 3m leichte Kanten haben, so haben wir nach den (insgesamt) ersten 3m Eurowürfen noch nicht alle n/3 Kanten der Wälder erhalten (andernfalls wären die Wälder komplett und es gäbe nur noch schwere Kanten). Wir wenden nun die Chernoff-Schranke an. Sei X die Anzahl der Euro-Würfe aus den ersten 3m, die Kopf zeigen. Dann ist X Summe von unabhängigen {0, 1}-Variablen, die alle Kopfwahrscheinlichkeit 1/2 haben. Nach Satz 4.13 gilt wegen µX = E [X] = 3m 2 . h h 2 ni ni 3m − n 3m Pr X < < Pr X < = Pr X < (1 − ) < e−δ µ/2 3 2 3m 2 mit δ =
3m−n 3m .
Wegen m ≥ n/2 ist 3m − n ≥ m und somit
3m − n 3m
2
3m ≥ 2
2 3m 1 = Ω(m). 3 2
Dies zeigt, daß mit Wahrscheinlichkeit 1−e−Ω(m) die Gesamtanzahl aller F -leichten Kanten nur O(m) beträgt. Wir kommen nun zu den linken Teilproblemen. Die Kanten in den linken Teilproblemen entstehen durch die zufälligen Stichproben des zugehörigen Vaterproblems: für jede Kante im Vaterproblems werfen wir eine Münze, ob die Kante ins Sohnproblem übernommen wird. Jede Kante im Wurzelproblem oder einem rechten Teilproblem erzeugt eine Sequenz von Kantenkopien in linken Teilproblemen, wobei jede Kopie durch einen unabhängigen Münzwurf erzeugt wird, bei dem wir als Resultat »Kopf« erhalten. Die Sequenz der Kopien endet, wenn der Münzwurf »Zahl« ergibt. Die Gesamtzahl der »Zahl«-Ergebnisse entspricht der Anzahl der Sequenzen, die wiederum höchstens so groß ist, wie die Anzahl m 0 der Kanten in der Wurzel und in allen rechten Teilproblemen. Die Gesamtzahl der Kanten 1 Es
gibt tatsächlich Dollar-Münzen!
54
Graphenalgorithmen in den linken Teilproblemen ist die Anzahl der »Kopf«-Ergebnisse, die natürlich höchstens so groß wie die Gesamtzahl der Münzwürfe für die linken Teilprobleme ist. Wenn wir mehr als 3m0 Kanten in allen linken Teilproblemen haben, dann haben offenbar mindestens 3m0 Münzwürfe stattgefunden, von denen höchstens m0 »Zahl« ergeben haben (bei m0 »Kopf«-Ergebnissen sind alle Kanten ausgesiebt). Daher ist die Wahrscheinlichkeit, daß die Kantenanzahl in den linken Teilproblemen 3m0 übersteigt gleich der Wahrscheinlichkeit, daß höchstens m0 »Zahl«-Ergebnisse bei einer Folge von mindestens 3m0 Würfen auftreten. Nach der Chernoff-Schranke in Satz 4.13 können wir diese Wahrscheinlichkeit wieder 0 durch e−Ω(m ) beschränken. Da m0 ≥ m erhalten wir die gewünschte Wahrscheinlichkeit von höchstens e−Ω(m) . Insgesamt haben wir also gezeigt, daß mit Wahrscheinlichkeit höchstens e −Ω(m) mehr als 3m Kanten in den rechten Teilproblemen und mit Wahrscheinlichkeit e −Ω(m) mehr als 3m Kanten in den linken Teilproblemen auftreten. Insgesamt treten mit Wahrscheinlichkeit höchstens 2e−Ω(m) mehr als 6m Kanten auf. Dies zeigt das Resultat des Satzes. 2
5.2.4 Anhang: Der MST-Verifikationsalgorithmus mit Linearzeit In diesem Abschnitt stellen wir kurz ein paar Ideen für den MST-Verifikationsalgorithmus mit linearer Laufzeit vor. Sei F der Kandidat für den MSF. Wir wollen für jede Kante e = (u, v) den Wert cF (u, v) bestimmen. Das Problem ist, daß wir für alle m Kanten insgesamt nur O(m) Zeit zur Verfügung haben.
Zu F können wir zunächst in linearer Zeit die Zusammenhangskomponenten von (V, F ) bestimmen, etwa mit Depth First Search [2]. Dies ermöglicht es uns, für eine Kante (u, v) in konstanter Zeit entscheiden, ob u und v in verschiedenen Zusammenhangskomponenten von F liegen. Daher können wir uns im Folgenden auf solche Kanten (u, v) beschränken, für die cF (u, v) < ∞ gilt.
Die Grundidee für die gleichzeitige Bestimmung von cF (u, v) für alle solchen Kanten e = (u, v) ist die folgende: Wir lassen Boruvkas MSF-Algorithmus auf (V, F ) laufen. Das klingt seltsam, da wir natürlich wissen, daß als Ergebnis F selbst entsteht. Allerdings gibt es zwei wichtige Beobachtungen: • Auf (V, F ) läuft der Algorithmus von Boruvka in Zeit O(n + |F |) = O(n):
Da wir auf einem Wald arbeiten, halbiert sich in jedem Schritt mit der Anzahl der Knoten auch die Anzahl der Kanten, so daß die Gesamtlaufzeit O((n + |F |) +
n + |F | n + |F | + + . . . ) = O(n + |F |) 2 4
ist. • Wenn wir uns für jeden Knoten w die schwerste Kante merken, die »seine Komponente« im Verlauf des Algorithmus als ausgehende Kante im Boruvka-Algorithmus gewählt hat, so können wir wF (u, v) leicht bestimmen: In dem Moment, wo u und v in eine gemeinsame Komponente gelangen, ergibt sich wF (u, v) als das Maximum der gemerkten Werte für u, v und der aktuell gewählten Kante, welche die beiden Komponenten verbindet. Es ist nicht ganz klar, wie man für alle Knoten die entsprechenden Werte geschickt speichert und aktualisiert. An dieser Stelle kommen komplizierte Datenstrukturen und noch eine ganze Hand voll anderer Tricks ins Spiel, deren Beschreibung leider unseren Rahmen hier sprengt.
5.2 Minimale aufspannende Bäume
55
5.2.5 Anhang: Der Kruskal-Algorithmus zur Bestimmung eines MST Ein klassischer MST-Algorithmus ist der Algorithmus von Kruskal (Algorithmus 5.3), der folgende einfache Strategie benutzt. Man startet mit einer leeren Kantenmenge T . Dann fügt man iterativ die leichteste Kante zu T hinzu, die keinen Kreis induziert. Algorithmus 5.3 Algorithmus von Kruskal zur Konstruktion eines MST. MST-K RUSKAL(G, c) Input: Ein zusammenhängender ungerichteter Graph G = (V, E) mit n := |V | und m := |E|, eine Kantenbewertungsfunktion c : E → R. Output: Ein minimaler aufspannender Baum T . 1 Sortiere die Kanten nach ihrem Gewicht: c(e1 ) ≤ · · · ≤ c(em ). 2 T ←∅ 3 for i ← 1, . . . , m do 4 if (V, T ∪ {ei }) ist zyklenfrei then 5 T ← T ∪ {ei } 6 end if 7 end for 8 return T Die Korrektheit des Algorithmus von Kruskal läßt sich relativ einfach beweisen. Definition 5.18 (Sichere Kante) Sei E 0 ⊆ E eine Teilmenge der Kanten von G mit folgender Eigenschaft:
Es gibt einen MST T ∗ = (V, ET ∗ ) von G mit E 0 ⊆ ET ∗ .
(5.7)
Eine Kante e ∈ E heißt sicher für E 0 , wenn E 0 ∪ {e} ebenfalls die Eigenschaft (5.7) besitzt. Satz 5.19 Sei G = (V, E) ein zusammenhängender ungerichteter Graph und c : E → R eine Gewichtsfunktion. Sei E 0 ⊆ E mit der Eigenschaft (5.7). Sei [A, B] ein Schnitt von V mit der Eigenschaft: [A, B] ∩ E 0 = ∅. Sei nun e eine billigste Kante aus [A, B]. Dann ist e sicher für E 0 . Beweis: Sei T ∗ ein MST mit E 0 ⊆ T ∗ . Ist e ∈ T ∗ , so ist nichts zu zeigen. Ansonsten erzeugt die Hinzunahme von e zu T ∗ einen einfachen Kreis w = (e1 , . . . , ek ) mit o.B.d.A. e1 = e. Der Kreis w muß eine Kante ei ∈ [A, B] mit ei 6= e enthalten. Nach Voraussetzung gilt c(ei ) ≥ c(e). Dann erfüllt T := T ∗ \ {ei } ∪ {e}: c(T ) ≤ c(T ∗ ). Ferner ist T zusammenhängend und besitzt |V | − 1 Kanten, ist also ein Baum. Somit ist T ein MST, der alle Kanten aus E 0 ∪ {e} enthält. 2 Satz 5.20 Der Algorithmus von Kruskal findet einen minimalen aufspannenden Baum. Beweis: Wir zeigen durch Induktion nach der Kardinalität der Kantenmenge T des Kruskal-Algorithmus, daß T Teilmenge eines minimalen aufspannenden Baumes ist. Dies ist für T = ∅ trivial.
Wird in Schritt 4 eine Kante ei = (u, v) zu T hinzugefügt, so ist nach Konstruktion T ∪{ei } zyklenfrei. Sei A die Zusammenhangskomponente von (V, T ), in der u liegt und B := V \ A. Dann enthält T keine Kante aus [A, B]: eine solche Kante (a, b) mit a ∈ A, b ∈ B
56
Graphenalgorithmen würde implizieren, daß auch b in der Komponente A liegt. Wir behaupten nun, daß e i eine leichteste Kante aus [A, B] ist. Mit Hilfe von Satz 5.19 folgt dann, daß auch T ∪ {e i } Teilmenge eines minimalen aufspannenden Baumes ist. Um die Behauptung zu zeigen, genügt es zu beweisen, daß die Kanten e 1 , . . . , ei−1 nicht im Schnitt [A, B] liegen. Wäre eine solche Kante ej = (a, b) im Schnitt, so folgt wegen ej ∈ / T , daß beim Testen von ej in Schritt 4 ej einen Zykel induziert hat. Dann gab es aber vor der Hinzunahme von ej bereits eine Kante in T , die in [A, B] liegt. Dies widerspricht der weiter oben gezeigten Tatsache, daß T keine Kante aus [A, B] enthält, wenn später e i getestet wird. Wir haben somit gezeigt, daß die Kantenmenge T , die der Kruskal-Algorithmus bei Abbruch liefert, Teilmenge eines minimalen aufspannenden Baumes ist. Die Menge (V, T ) ist zyklenfrei und offenbar maximal mit dieser Eigenschaft (sonst hätten wir noch eine Kante hinzufügen können). Daher ist (V, T ) ein auch ein aufspannender Baum. 2
Approximationsalgorithmen In diesem Kapitel beschäftigen wir uns mit approximativen Algorithmen zur Bestimmung von Lösungen mit beweisbarer Qualität für NP-harte Optimierungsprobleme. Definition 6.1 (Deterministischer c-approximativer Algorithmus) Ein (deterministischer) Polynomialzeit-Algorithmus ALG für ein Minimierungsproblem Π ist c-approximativ (oder ein c-Approximationsalgorithmus), wenn er für jede Instanz I von Π eine Lösung produziert mit ALG (I)
≤ c OPT(I).
(6.1)
Im Falle eines Maximierungsproblems fordern wir, daß für jede Instanz I gilt: ALG (I)
≥ c OPT(I).
Man nennt c dann auch die Approximationsgüte von
(6.2)
ALG .
Es gibt mehrere Möglichkeiten, wie man einen randomisierten Approximationsalgorithmus definieren kann. Wir fordern, daß ein randomisierter Approximationsalgorithmus in Polynomialzeit läuft. Im Unterschied zur Definition 6.1 fordern wir aber, daß die Ungleichung (6.1) bzw. (6.2) im Erwartungswert bzw. mit bestimmter Wahrscheinlichkeit gilt.
6.1 Randomisiertes Runden: Ein einfacher Algorithmus für M IN S ET C OVER Beim M IN S ET C OVER-Problem sind eine endliche Grundmenge U und eine Kollektion F ⊆ 2U von Teilmengen über U gegeben. Die Aufgabe besteht darin, die Elemente aus U mit möglichst wenigen Mengen aus F zu überdecken. M IN S ET C OVER ist ein klassisches NP-hartes Optimierungsproblem. Wir benutzen M IN S ET C OVER, um an einem recht einfachen Fall das randomisierte Runden vorzustellen. Wir setzen n := |U |. Das (randomisierte) Runden von Linearen Programmen ist eine inzwischen sehr oft benutzte Technik zur Konstruktion von Approximationsalgorithmen. Wir haben es bereits in Abschnitt 4.3 kennengelernt. Wir betrachten nun das M IN S ET C OVER in einer etwas allgemeineren Variante. Hier hat jede Menge f ∈ F ein Gewicht cf und das Ziel ist es, alle Elemente mit Mengen von möglichst geringem Gesamtgewicht zu überdecken. Das M IN S ET C OVER läßt sich dann wie folgt als ganzzahliges Lineares Programm formulieren. Wir halten uns Entscheidungs-
58
Approximationsalgorithmen variablen xf ∈ {0, 1}, die angeben ob eine Menge f gewählt ist oder nicht. X c f xf (ILP) min f ∈F
X
f :u∈F
xf ≥ 1
für alle u ∈ U
xf ∈ {0, 1}
für alle f ∈ F
P Die Nebenbedingung f :u∈F xf ≥ 1 stellt sicher, daß jedes Element aus U überdeckt ist. Bei der Relaxation (LP) von (ILP) ersetzt man die Bedingung xf ∈ {0, 1} durch 0 ≤ xf ≤ 1. Diese Relaxation kann man dann mit den üblichen Methoden für Lineare Programme [5] in Polynomialzeit lösen. Sei x∗ die Optimallösung von (ILP) und x ˆ die Optimallösung der Relaxation (LP). Dann gilt natürlich X X cf x ˆf ≤ cf x∗f . f ∈F
f ∈F
Im allgemeinen sind allerdings die Werte x ˆf nicht ganzzahlig und daher nicht direkt als Lösung für das M IN S ET C OVER interpretierbar. Wir führen nun folgenden einfachen »Rundungsprozeß« durch: Variable xf wird mit Wahrscheinlichkeit x ˆf auf 1 und mit Wahrscheinlichkeit 1− x ˆf auf 0 gesetzt. Das Setzen von xf erfolgt unabhängig von allen anderen Variablen. Lemma 6.2 Sei x die durch das randomisierte Runden generierte Lösung. Dann gilt: X X cf x∗f . c f xf ≤ E f ∈F
f ∈F
Beweis: Nach der Linearität des Erwartungswertes (Eigenschaft 2.6 auf Seite 5) gilt: X X cf E [xf ] c f xf = E f ∈F
f ∈F
=
X
cf Pr [xf = 1]
f ∈F
=
X
cf xˆf
f ∈F
≤
X
cf x∗f .
f ∈F
2 Lemma 6.2 zeigt, daß wir im Erwartungswert eine hervorragende Lösung erhalten. Allerdings ist die Lösung x, die wir durch das Runden erhalten nicht zulässig. Wir schätzen nun die Fehlerwahrscheinlichkeit nach unten ab. Dazu benötigen wir das folgende hilfreiche Ergebnis über die Beziehungen zwischen dem harmonischen, geometrischen und arithmetischen Mittel: Lemma 6.3 Seien zi ∈ R≥0 für i = 1, . . . , k . Dann gilt: k Pk
i=1
zi
≤
k Y
i=1
zi
!1/k
≤
k 1X zi . k i=1
6.2 Randomisiertes Runden für M AX S AT
59
Beweis: Siehe z.B. [10].
2
Lemma 6.4 Sei u ∈ U . Mit Wahrscheinlichkeit mindestens 1 − 1/e erzeugt der randomisierte Rundungsprozess eine Lösung, die u überdeckt. Beweis: Seien f1 , . . . , fk ∈ F die Mengen in F , die u enthalten. Dann wird u überdeckt, wenn mindestens eine der Variablen xfi , i = 1, . . . , k auf 1 gerundet wird. Umgekehrt wird u genau dann nicht überdeckt, wenn alle diese Variablen auf 0 fixiert werden. Diese Qk Wahrscheinlichkeit ist einfach berechenbar und ist i=1 (1 − x ˆfi ). Daher gilt: Pr [u überdeckt] = 1 −
k Y
i=1
(1 − x ˆfi ).
(6.3)
Wenn wir Lemma 6.3 mit zi := 1 − x ˆfi in (6.3) benutzen, so ergibt sich: k 1 1 ≥1− . Pr [u überdeckt] ≥ 1 − 1 − k e Die letzte Ungleichung folgt dabei aus der bekannten Tatsache (siehe z.B. [10]), daß die 2 Folge (1 − k1 )k monoton wachsend gegen 1/e konvergiert. Wir können Lemma 6.4 benutzen, um die Wahrscheinlichkeit abzuschätzen, daß eine gültige Überdeckung erzeugt wird. Mit Wahrscheinlichkeit höchstens 1/e wird ein spezielles u ∈ U nicht überdeckt. Also wird mit Wahrscheinlichkeit höchstens n · 1/e = n/e irgendeines der n Elemente nicht überdeckt. Dieses Ergebnis ist offenbar unbrauchbar, da bereits für n ≥ 3 die so abgeschätze Fehlerwahrscheinlichkeit von n/e größer als 1 ist. Daher helfen wir uns anders weiter. Um die Wahrscheinlichkeit zu erhöhen, daß wir eine zulässige Überdeckung gefunden haben, wiederholen wir den Rundungsprozeß t mal unabhängig voneinander (das LP muß dabei natürlich nur einmal gelöst werden). Als Lösung wählen wir die Mengen f ∈ F , für die bei mindestens einem Runden P wurde. Offenbar sind die erwarteten P xf = 1 gesetzt ˆf ≤ t f ∈F cf x∗ f . Kosten nach t Wiederholungen t f ∈F cf x
Sei u ∈ U fest. Nach t Wiederholungen ist die Wahrscheinlichkeit, daß u nicht überdeckt wird, höchstens (1 − (1 − 1/e))t = 1/et . Für t = dln 2ne ist die Wahrscheinlichkeit, daß u nicht überdeckt wird, höchstens 1/2n. Folglich werden alle n Elemente aus U mit Wahrscheinlichkeit mindestens 1/2 überdeckt. Beobachtung 6.5 Das wiederholte randomisierte Runden findet für jede Instanz von M IN S ET C OVER eine O(log n)-approximative Lösung, die mit Wahrscheinlichkeit mindestens 1/2 zulässig ist. 2
6.2 Randomisiertes Runden für M AX S AT Eine Instanz von M AX S AT besteht aus n Booleschen Variablen x1 , . . . , xn und m Klauseln Cj der Form Cj = L i1 ∨ L i2 ∨ · · · ∨ L ij ,
wobei Lil ∈ {xil , x¯il } ein Literal, d.h. eine Variable oder ihre Negierung ist. Das Problem besteht darin, eine Belegung für die Variablen zu finden, so daß möglichst viele Klauseln erfüllt sind. M AX S AT ist NP-vollständig. Algorithmus 6.1 zeigt einen nahezu trivialen randomisierten Algorithmus für M AX S AT. Man setzt einfach den Wert jeder Variablen xi unabhängig von allen anderen Variablen mit Wahrscheinlichkeit 1/2 auf 1.
60
Approximationsalgorithmen Algorithmus 6.1 Einfacher 1/2-approximativer Algorithmus für M AX S AT. S IMPLE M AX S AT Input: Eine Instanz von M AX S AT mit Variablen x1 , . . . , xn und Klauseln C1 , . . . , Cm . Output: Eine Belegung für die Variablen 1 Setze jede Variable xi unabhängig von den anderen Variablen mit Wahrscheinlichkeit 1/2 auf 1.
Wir analysieren die Güte von S IMPLE M AX S AT. Sei Yj die Indikatorvariable, welche den Wert 1 annimmt, wenn die Klausel Cj durch die PmVariablenbelegung von S IMPLE M AX S AT erfüllt ist. S IMPLE M AX S AT erfüllt also Y = j=1 Yj Klauseln.
Wir betrachten Klausel Cj . Diese Klausel habe k ∈ N Literale. Von allen 2k möglichen Belegungen der entsprechenden Variablen führt nur eine zu einer nichterfüllten Klausel C j . Also ist 1 E [Yj ] = Pr [Cj ist erfüllt] = 1 − 2−k ≥ . (6.4) 2 Somit ist die erwartete Anzahl von erfüllten Klauseln mindestens m/2. Da man höchstens m Klauseln erfüllen kann, liefert S IMPLE M AX S AT eine Lösung, die (im Erwartungswert) mindestens halb so viele Klauseln, wie die optimale Lösung erfüllt. Wir können das Ergebnis sogar noch genauer spezifizieren (dies wird gleich noch nützlich sein). Falls jede Klausel mindestens k Literale enthält, so können wir aus (6.4) schließen, daß der Algorithmus eine Lösung vom Wert mindestens (1 − 2 −k )OPT liefert. Lemma 6.6 Sei OPT(I) die optimale Lösung für die Instanz I von M AX S AT. Sei k ∈ N mit der Eigenschaft, daß jede Klausel in I mindenstens k Literale enthält. Dann gilt: E [S IMPLE M AX S AT(I)] ≥ (1 − 2−k )OPT(I) ≥
1 OPT (I). 2 2
Wir kommen jetzt zu einem zweiten randomisierten Approximationsalgorithmus für M AX S AT. Dieser beruht auf der uns inzwischen bekannten Technik des randomisierten Rundes von Linearen Programmen. Dazu formulieren wir M AX S AT wieder als ganzzahliges Lineares Programm. Wir bezeichnen für eine Klausel Cj mit Ij+ und Ij− die Indexmenge der positiven bzw. negativen Literale in Cj . (ILP)
max
m X
yj
j=1
X
i∈Ij+
xi +
X
i∈Ij−
xi ∈ {0, 1}
yj ∈ {0, 1}
(1 − xi ) ≥ yj für i = 1, . . . , n für i = j, . . . , m
Sei x ˜, y˜ die optimale Lösung der Relaxation von (ILP), in der wir die Ganzzahligkeitsbedingungen durch 0 ≤ xi ≤ 1 und 0 ≤ yj ≤ 1 ersetzt haben. Wir setzen nun für i = 1, . . . , n die Variable xi mit Wahrscheinlichkeit x ˜i auf 1. Dies erfolgt wieder unabhängig von den anderen Variablen. Wir betrachten wieder eine Klausel Cj . Wir nehmen an, daß Cj nur positive Literale enthält und Cj = x1 ∨ · · · ∨ xk . Die Fälle mit negativen und negativen und positiven Literalen sind
6.2 Randomisiertes Runden für M AX S AT
61
symmetrisch hierzu, so daß unsere Annahme ohne Beschränkung erfolgen kann. Wegen der Unabhängigkeit der xi haben wir Pr [Cj ist erfüllt] = 1 −
k Y
i=1
(1 − x ˜i )
!k k 1X ≥1− (1 − x ˜i ) k i=1 !k k 1X x˜i =1− 1− k i=1 k y˜j ≥1− 1− k k 1 y˜j . ≥1− 1− k
(nach Lemma 6.3 mit zi = 1 − x ˜i )
Enthält jede Klausel höchstens k Literale (Achtung: bei S IMPLE M AX S AT hatten wir die Forderung, daß jede Klasuel mindestens k Literale enthält). , so erhalten wir für Anzahl Y von erfüllten Klauseln: k ! X k ! m 1 1 1 E [Y ] ≥ 1 − 1 − OPT (I) ≥ 1 − OPT(I). y˜j ≥ 1 − 1 − k k e j=1
(6.5)
Lemma 6.7 Sei OPT(I) die optimale Lösung für die Instanz I von M AX S AT. Sei k ∈ N mit der Eigenschaft, daß jede Klausel in I höchstens k Literale enthält. Dann liefert das randomisierte Runden eine Lösung, die im Erwartungswert mindestens
1 1− 1− k
Klauseln erfüllt.
k !
OPT (I)
≥
1−
1 e
OPT(I)
2
Da 1 − 1/e > 0.632 ist unser Rundungsalgorithmus besser als der einfache Algorithmus S IMPLE M AX S AT. Wir können jetzt aber noch mehr erreichen, wenn wir unsere beiden Algorithmen kombinieren. Wir wissen: • Wenn jede Klausel mindestens k = 2 zwei Literale enthält, dann liefert S IMPLE M A X S AT eine Approximation mit Güte 1 − 2−2 = 3/4 • Wenn jede Klausel höchstens k = 2 Literale enthält, dann liefert randomisiertes Runden eine Approximation mit Güte 1 − (1 − 1/2)2 = 1 − 1/4 = 3/4. Wir haben allerdings noch keinen Algorithmus, der eine Güte von 3/4 liefert, wenn Klauseln mit Länge kleiner als zwei und gleichzeitig Klauseln mit Länge größer als zwei vorliegen. Unser kombinierter Algorithmus sieht folgendermaßen aus: Wir würfeln anfangs nochmals, welchen der beiden Algorithmen wir verwenden sollen. Mit Wahrscheinlichkeit 1/2 benutzen wir S IMPLE M AX S AT und mit Wahrscheinlichkeit 1/2 das randomisierte Runden. Sei
62
Approximationsalgorithmen Cj eine Klausel mit k Literalen. Dann gilt nach (6.4) und (6.5): 1 1 1 · (1 − 2−k ) + · (1 − (1 − )k )˜ yj 2 2 k 1 1 1 yj + · (1 − (1 − )k )˜ yj ≥ · (1 − 2−k )˜ 2 2 k αk + β k = · y˜j 2
Pr [Cj wird erfüllt] =
(da 0 ≤ y˜j ≤ 1) (6.6)
wobei αk = 1 − 2−k
(6.7)
1 βk = 1 − (1 − )k . k
(6.8)
Wir benötigen jetzt noch folgendes elementare Ergebnis: Lemma 6.8 Für die in (6.7) und (6.8) definierten Werte αk und βk gilt: 3 αk + β k ≥ . 2 Beweis: Für k = 1 gilt: α1 + β 1 = 1 −
1 1 3 1 + 1 − (1 − )1 = + 1 = . 2 1 2 2
α2 + β 2 = 1 −
1 1 3 3 3 + 1 − (1 − )2 = + = . 4 2 4 4 2
Für k = 2 gilt: Letzendlich haben wir für k ≥ 3:
αk + β k ≥
7 1 3 +1− ≥ . 8 e 2
Dies beendet den Beweis.
2
Wenn wir Lemma 6.8 in (6.6) einsetzen, zeigt sich, daß für den kombinierten Algorithmus gilt: 3 Pr [Cj wird erfüllt] ≥ · y˜j . 4 P ˜j ≥ 34 · Damit ist die erwartete Anzahl von erfüllten Klauseln dann mindestens 43 m j=1 y OPT (I). Satz 6.9 Sei OPT(I) die optimale Lösung für die Instanz I von M AX S AT. Der kombinierte Algorithmus aus S IMPLE M AX S AT und randomisierten Runden erfüllt für jede Instanz I im Erwartungswert mindestens 34 OPT(I) Klauseln. 2
6.3 Semidefinite Programmierung und M AX C UT In Abschnitt 3.1 hatten wir einen randomisierten Algorithmus zur Bestimmung eines minimalen Schnittes in einem Graphen kennengelernt. Hier betrachten wir nun das Problem M AX S AT, das darin besteht, in einem ungerichteten Graphen G = (V, E) mit ganzzahligen Gewichten w : E → N auf den Kanten einen maximalen Schnitt, also einen Schnitt [S, T ] mit maximalem Gewicht X w(S) := w(S, T ) := w(e) e∈[S,T ]
zu finden. Im Gegensatz zum minimalen Schnittproblem ist M AX C UT NP-schwer zu lösen, siehe z.B. [4].
6.3 Semidefinite Programmierung und M AX C UT
6.3.1 Ein einfacher Algorithmus für M AX C UT Ausgangspunkt ist wieder ein extrem einfacher randomisierter Algorithmus, den wir C OIN FLIP nennen. Wir wollen einen Schnitt [S, T ] bestimmen. Für jeden Knoten v ∈ V nehmen wir ihn mit Wahrscheinlichkeit 1/2 zu S und mit Wahrscheinlichkeit 1/2 zu T hinzu. Die Entscheidungen für die einzelnen Knoten werden dabei unabhängig voneinander getroffen. Lemma 6.10 Für jede Instanz I ist das erwartete Gewicht des von C OINFLIP einen Schnittes mindestens 1/2 OPT(I). Beweis: Sei [S, T ] der von C OINFLIP produzierte Schnitt. Für jede Kante (u, v) ∈ E ist die Wahrscheinlichkeit, daß (u, v) ∈ [S, T ] liegt, dadurch gegeben, daß u und v auf verschiedenen Seiten des Schnittes zu liegen kommen. Daher ist X w(u, v) · Pr [(u, v) ∈ [S, T ]] E [w(S)] = (u,v)∈E
=
X
(u,v)∈E
=
w(u, v) · Pr [(u ∈ S ∧ v ∈ / S) ∨ (u ∈ / S ∧ v ∈ S)]
X 1 w(u, v) · 2 (u,v)∈E
1 ≥ 2
OPT (I).
Dabei haben wir für die letzte Ungleichung die triviale Abschätzung benutzt, daß die optimale Lösung nicht mehr Gewicht im Schnitt haben kann als das Gewicht aller Kanten. 2
6.3.2 Der Algorithmus von Goemans und Williamson
63
64
Algebra (huuhh!) und Zufall In diesem Kapitel wenden wir randomisierte Algorithmen in Zusammenhang mit algebraischen Techniken an, um kombinatorische Probleme zu lösen. Zunächst stellen wir in Abschnitt 7.1 eine elementare Hilfstechnik, die Technik von Freiwalds, vor. Abschnitt 7.2 beschäftigt sich mit probabilistischen Beweissystemen, die eine alternative Charakterisierung der Komplexitätsklasse NP ermöglichen. In Abschnitt 7.3 kommen wir der Praxis wieder etwas näher. Hier stellen wir randomisierte Primzahltests vor.
7.1 Die Technik von Freivalds Wir betrachten zunächst ein einfaches elementares Problem. Gegeben sind drei n × nMatrizen A, B und C über einem endlichen Körper F gegeben. Wir wollen testen, ob AB = C. Offenbar können wir das Produkt AB berechnen und dann Eintrag für Eintrag in O(n2 ) Zeit mit C vergleichen. Zum Berechnen des Produkts AB steht uns eventuell ein schneller Multiplikationsalgorithmus zur Verfügung. Der bisher beste solche Algorithmus benötigt O(n2.376 ) Zeit, so daß unsere Verifikation insgesamt ebenfalls O(n2.376 ) benötigt.
Die Technik des folgenden Lemmas ist deutlich eleganter und ermöglicht es uns, die Verifikation in O(n2 ) Zeit auszuführen, wobei wir eine konstante Fehlerwahrscheinlichkeit haben. Satz 7.1 Seien A, B und C drei n × n-Matrizen über F, so daß AB 6= C . Sei S ⊆ F endlich und r ∈ S n zufällig und gleichverteilt gewählt. Dann gilt: Pr [ABr = Cr] ≤
1 . |S|
Beweis: Sei D = AB − C. Wir müssen zeigen, daß Dr 6= 0 mit Wahrscheinlichkeit höchstens 1/|S| gilt. Wenn AB 6= C, dann ist D nicht die Nullmatrix. Daher gibt es eine Zeile d von D, die nicht nur Nullen enthält. Sei o.B.d.A. d = (d 1 , . . . , dk , 0, 0, . . . , 0) mit di 6= 0 für i = 1, . . . , k. Dann gilt: # " " k # Pk X T i=2 di ri di ri = 0 = Pr r1 = − Pr [Dr = 0] ≤ Pr d r = 0 = Pr . (7.1) d1 i=1 Wir benutzen nun das Prinzip der verzögerten Entscheidungen (siehe Abschnitt 3.2): wir können annehmen, daß alle anderen Einträge in r vor r1 gewählt werden und dann r1 gleichverteilt aus S gewählt wird. k
d r
i i Der Term − i=2 in (7.1) ist vor der Wahl von r1 ein fester Wert v ∈ F. Die Wahrd1 scheinlichkeit, daß r = v gilt, beträgt somit höchstens 1/|S|, da r 1 gleichverteilt aus einer Menge der Größe |S| gewählt wird. 2
66
Algebra (huuhh!) und Zufall Algorithmus 7.1 Randomisierter Algorithmus zum Überprüfen eines Matrizen-Produkts. V ERIFY-P RODUCT(AB, C, S) Input: Zwei n × n-Matrizen über einem endlichen Körper F, wobei AB das Produkt aus zwei Matrizen A und B ist; eine Menge S ⊆ F . 1 Wähle r ∈ S n zufällig und gleichverteilt, indem jeder Eintrag von r gleichverteilt aus S gewählt wird. 2 if ABr 6= Dr then 3 return false 4 else 5 return true 6 end if Satz 7.2 Sei S = {0, 1}. Der Algorithmus V ERIFY-P RODUCT läuft in O(n2 ) Zeit und besitzt folgende Eigenschaften:
(i) Falls AB = C , so liefert V ERIFY-P RODUCT immer true zurück. (ii) Falls AB 6= C , so liefert V ERIFY-P RODUCT mit Wahrscheinlichkeit höchstens 1/2 das Ergebnis true .
7.2 Schnelle Beweise für NP: Probabilistische Beweisprüfer In diesem Abschnitt machen wir einen Ausflug in die Komplexitätstheorie. Wir beschreiben die Anwendung der Technik von Freiwalds, um eine alternative Charakterisierung der Komplexitätsklasse NP als Beweissystem zu erhalten. Die Klasse NP kann man als Menge aller Sprachen L ⊆ Σ∗ definieren, so daß es eine Sprache L0 ∈ P gibt mit folgenden Eigenschaft: • x ∈ L genau dann, wenn es ein y ∈∗ mit |y| ≤ poly(|x|) gibt und (x, y) ∈ L0 . Man kann sich etwa bei S AT das y als Belegung der Variablen zu einer vorgegebenen Instanz x ∈ S AT vorstellen. Falls die Belegung y gegeben ist, so kann man in Polynomialzeit verifizieren, daß x erfüllbar ist. Man nennt y dann auch einen Zeugen oder einen Beweis, daß x ∈ L. Die Idee des Beweises liegt auch der Definition der probabilistischen Beweisprüfer zugrunde. Ein (nicht-interaktives) probabilistisches Beweissystem besteht aus einem Verifizierer V , der Fragen an einen angeblichen Beweis π stellen kann. Der Verifizierer ist eine polynomial beschränkte Turingmaschine, die zusätzlich Zugriff auf Zufallsbits besitzt. Der Beweis ist über Positionsangaben addressierbar. Der Verifizierer muß feststellen, ob eine Eingabe x in einer vorgegebenen Sprache L liegt. Wir sprechen von einem angeblichen Beweis, da selbst bei x ∈ / L ein »Beweis« angeboten wird. Der Verifizierer entscheidet bei Eingabe x auf Basis von x und seinen Zufallsbits, welche Bits des angeblichen Beweises π er sehen möchte. Die Entscheidung, welche Bits dies sind, muß nichtadaptiv getroffen werden, d.h., der Verifizierer schreibt zu Beginn allein auf Basis von x und der Zufallsbits die gefragten Stellen auf ein Band, welche dann durch die entsprechenden Beweisstellen ersetzt werden. Nach Lesen der Antworten entscheidet der Verifizierer, ob er x akzeptiert oder nicht.
7.2 Schnelle Beweise für NP: Probabilistische Beweisprüfer Definition 7.3 (PCP) Die Klasse PCP besteht aus allen Sprachen L, die einen randomisierten Verifizier V mit (worst-case) polynomialer Laufzeit haben, so daß für jedes x ∈ Σ∗ gilt: • Falls x ∈ L, dann gibt es einen Beweis π , so daß Pr [V (x, π) akzeptiert] = 1. • Falls x ∈ / L, dann gilt für alle angeblichen Beweise π : Pr [V (x, π) akzeptiert] ≤ 1/2. In der letzten Definition können wir uns den angeblichen Beweis π als von einem böswilligen Gegenspieler konstruiert vorstellen. Der Gegenspieler kann einen falschen »Beweis« liefern, auch wenn x ∈ / L ist. Eine Schwierigkeit des Verifizierers besteht unter anderem darin, mit falschen Beweisen umzugehen und diese zu erkennen. Definition 7.4 (PCP(r(n), q(n))) Die Klasse PCP(r(n), q(n)) besteht aus allen Sprachen L, die einen randomisierten Verifizier mit (worst-case) polynomialer Laufzeit haben, der bei einer Eingabe der Länge n nur O(r(n)) Zufallsbits benutzt und O(q(n)) Bits eines angeblichen Beweises π betrachtet. Mit dieser Definition gilt P = PCP(0, 0) und NP = PCP(0, poly(n). In diesem Abschnitt zeigen wir das folgende Resultat: Satz 7.5 Es gilt NP ⊆ PCP(poly(n), 1). Man kann das Ergebnis aus Satz 7.5 noch verbessern. Die Identität NP = PCP(log n, 1) ist als »PCP-Theorem« in den 90er Jahren bekannt geworden. Es hat starke Auswirkungen auf die (Nicht-) Existenz von Approximationsalgorithmen. Die algebraischen Techniken, um die Zufallsbits auf ein logarithmisches Maß zu reduzieren, gehen aber über das hinaus, was wir hier in diesem Skript vorstellen können. Daher beschränken wir uns auf das »PCPlight-Theorem«. Es sollte darauf hingewiesen werden, daß selbst diese schwächere Version Aufsehen erregte und bei näherem Hinsehen ein überaus überraschendes Ergebnis bereithält: Man kann mit einseitig beschränktem Fehler jede Instanz eines Problems aus NP entscheiden, wobei man unabhängig von der Eingabegröße nur konstant viele Bits aus einem Beweis betrachtet. Um Satz 7.5 zu beweisen, genügt es zu zeigen, daß 3S AT ∈ PCP(poly(n), 1) liegt: da 3S AT NP-vollständig ist, kann man jedes Problem in NP in deterministischer Polynomialzeit auf 3S AT zurückführen. Eine Instanz von 3S AT besteht aus einer Formel F = C1 ∧C2 ∧· · · ∧Cm mit n Booleschen Variablen X1 , . . . , Xn in m Klauseln Cj der Form Cj = L i1 ∨ L i2 ∨ L i3 , wobei Lil ∈ {Xil , X¯il } ein Literal, d.h. eine Variable oder ihre Negierung ist. Das Problem 3S AT besteht darin, zu entscheiden, ob es eine Belegung der Variablen gibt, die F erfüllt, d.h., so daß alle Klauseln gleichzeitig erfüllt sind. Ein Beweis für die Erfüllbarkeit einer Instanz x von 3S AT ist einfach: wir schreiben eine Belegung A = (a1 , . . . , an ) ∈ {0, 1}n für die Variablen auf. Der Verifizierer kann die Werte ai in F einsetzen und dann den Wahrheitswert ausrechnen. Dies ist offenbar in Polynomialzeit möglich. Unglücklicherweise benötigt er dazu alle n Bits des Beweises. Es ist einfach zu sehen, daß mit dieser einfachen Form des Beweises eine Teilmenge der Bits nicht genügt, um etwa zu sichern, daß wir eine erfüllbare Formel mit Wahrscheinlichkeit 1 akzeptieren. Diese Schwierigkeit lösen wir, indem wir die Belegung auf eine sehr redundante Art speichern. In der Definition von PCP wird ja nur gefordert, daß es einen Beweis gibt, der den
67
68
Algebra (huuhh!) und Zufall Verifizier bei x ∈ L immer akzeptieren läßt. Natürlich steht dann noch das Problem der falschen Beweise aus, die wir erkennen müssen. Wir konvertieren die Formel F in ein Polynom über Z2 . Dazu ersetzen wir jede Klausel Cj = Li1 ∨ Li2 ∨ Li3 durch ein Polynom cj vom Grad 3, indem wir die Variable Xi als ¯i durch xi ersetzen und das logische ∨ durch die Multiplikation über 1 − xi schreiben, X Z2 ersetzen. Beispielsweise wird dann X1 ∨ X¯2 ∨ X3 zu cj = (1 − x1 )x2 (1 − x3 ). Eine Variablenbelegung A erfüllt die Klausel Cj genau dann, wenn der entsprechende Vektor a ∈ {0, 1}n eine Nullstelle von cj ist.
Zum Schluß ersetzen wir das logische ∧ noch durch die Addition über Z 2 . Damit haben Pm wir die Formel F in ein Polynom f (x1 , . . . , xn ) = j=1 cj konvertiert. Der Grund für die angegebene Arithmetisierung ist, daß auf diese Weise f den Grad 3 besitzt. Die »offensichtliche« Variante, bei der ∨ durch die Addition und ∧ durch die Multiplikation ersetzt wird, würde ein Polynom vom Grad 3m liefern. Wir werden später sehen, daß der beschränkte Grad von f entscheidend für die Existenz von effizienten Verifizierern ist. Lemma 7.6 Sei A eine Variablenbelegung für F und a der entsprechende Vektor in {0, 1}n. Falls F (A) = 1, dann gilt f (a) = 0. Beweis: Wir haben bereits gesehen, daß eine erfüllende Belegung für eine Klausel C j eine Nullstelle von cj liefert. Falls A eine erfüllende Belegung für F ist, so sind alle Klauseln erfüllt, also insbesondere alle Polynome cj gleichzeitig Null. Addition von 0en über Z2 führt zum Gesamtergebnis 0. 2 Das letzte Lemma liefert uns einen Teil einer möglichen Äquivalenz für unsere Transformation der Formel F auf das Polynom f . Warum haben wir im Lemma nicht F (A) = 1 ⇔ f (a) = 0 behauptet? Ganz einfach! Dies ist im allgemeinen nicht koorekt, wie folgendes Beispiel zeigt. Beispiel 7.7 Sei F = (x1 ∨x2 ∨x3 )∧(x4 ∧x5 ∧x6 ). Für A = (0, . . . , 0 ist F (A) = 0, d.h., A ist keine erfüllende Belegung für F . Andererseits ist unser Polynom f (x 1 , . . . , x6 ) = (1 − x1 )(1 − x2 )(1 − x3 ) + (1 − x4 )(1 − x5 )(1 − x6 ) und f (0, . . . , 0) = 1 + 1 = 0. C Das Problem lösen wir, indem wir eine Variante der Technik von Freiwalds benutzen. Wir wählen einen zufälligen Vektor r = (r1 , . . . , rm ) ∈ Zm 2 und setzen: f (x1 , . . . , xm ) =
m X
ri ci .
i=1
Lemma 7.8 Falls F (A) = 1, so gilt f (a) = 0. Ist andererseits F (A) = 0, so haben wir Pr [f (a) = 0] = 1/2. Beweis: Da eine erfüllende Belegung alle Polynome cj zu 0 evaluieren läßt, erhalten wir f (a) = 0 unabhängig von den zufälligen Werten in r. Sei nun F (A) = 0. Dann erfüllt A mindestens eine Klausel von F nicht. Sei dies o.B.d.A. die Klausel C1 = L1 ∨ L2 ∨ L3 . Es gilt also für das entsprechende Polynom c1 , daß c1 (x1 , x2 , x3 ) = 1. Wir benutzen wieder das Prinzip der verzögerten Entscheidungen. Pm Wir stellen uns vor, daß alle Zufallswerte r2 , . . . , rm vor r1 gewählt werden. Sei v = i=2 ri ci . Dann gilt Pr [f (a) = 0] = Pr [v + r1 c1 = 0] = Pr [v + r1 = 0] .
Zum Zeitpunkt, zu dem r1 gewählt wird, ist v ∈ {0, 1} fest. Falls v = 0, so liefert nur r1 = 0 den Wert 0. Ist v = 1, so muß r1 = 1 gelten, um im Gesamtergebnis 0 zu erhalten. Unabhängig vom Wert v ist also Pr [v + r1 = 0] = 1/2. 2
7.2 Schnelle Beweise für NP: Probabilistische Beweisprüfer
69
Der Wert 1/2 in Lemma 7.8 kann durch unabhängige Wiederholung beliebig verkleinert werden. Wir sind in der Situation, daß mit Wahrscheinlichkeit 1/2 (oder ε > 0 durch Wiederholungen) das Polynom f genau dann eine Nullstelle hat, wenn die Formel F erfüllbar ist. Bei Eingabe einer Formel F benutzt der Verifizierer die Technik von Freiwalds, um das (zufallsbehaftete) Polynom f zu erhalten. Er steht dann vor der Aufgabe zu prüfen, ob ein Polynom vom Grad 3 eine Nullstelle hat oder nicht. Diese Aufgabe lösen wir nun. Genauer gesagt, sieht unsere Aufgabe wie folgt aus: Gegeben sei ein Polynom f vom Grad 3 über Z2 . Finde einen Verifizierer V , der folgende Eigenschaften besitzt: • Falls f eine Nullstelle hat, dann gibt es einen Beweis π, so daß V mit Wahrscheinlichkeit 1 akzeptiert. • Falls f keine Nullstelle hat, dann gilt für jeden (falschen) Beweis π, daß V mit Wahrscheinlichkeit höchstens 1/2 akzeptiert.
7.2.1 Codierung des Beweises In unserem Polynom f vom Grad 3 sind alle Koeffizienten entweder 0 oder 1. Daher besitzt f die folgende Form: X X X xi xj xk (7.2) f (x1 , . . . , xn ) = α + xi xj + xi + i∈S1
(i,j,k)∈S3
(i,j)∈S2
für ein festes α ∈ Z2 und Indexmengen Si . Falls a ∈ Zn2 eine feste Belegung ist, so gilt dann X X X ai + ai aj + f (a) = α + ai aj ak . (7.3) i∈S1
(i,j)∈S2
(i,j,k)∈S3
Unser Ziel ist es, f (a) anders auszudrücken, damit wir es effizienter und fehlerunanfälliger evaluieren können. Für Vektoren x ∈ Rn und y ∈ Rm Matrix z mit zij = xi yj , d.h., x1 x ◦ y = ... ◦ xn
definieren wir das äußere Produkt x ◦ y als die n × m x1 y 1 y1 .. = .. . . xn y 1 ym
x1 y 2 .. . x1 y 2
. . . x1 y m .. .. . . . . . x1 y m
Sei a ∈ {0, 1}n ein Vektor von Variablenbelegungen. Wir setzen b = a ◦ a. Wir fassen nun b als einen Vektor aus Rnm auf und setzen und c = a ◦ b. Es gilt also: bij = ai aj und cijk = ai bjk = ai aj ak . Mit Hilfe von a, b und c definieren wir drei lineare Funktionen 2 3 Ga : Zn2 → Z2 , Gb : Zn2 → Z2 und Gc : Zn2 → Z2 : Ga (z1 , . . . , zn ) =
n X
ai zi
i=1
Gb (z11 , . . . , znn ) =
X
bij zij =
i,j
Gc (z111 , . . . , znnn ) =
X
i,j,k
zijk =
n X n X
ai aj zij i=1 j=1 n X n X n X
ai aj ak zijk
i=1 j=1 k=1
70
Algebra (huuhh!) und Zufall Der Grund, warum wir diese kompliziert aussehenden Funktionen definieren, ist, daß wir mit Hilfe von Ga , Gb und Gc das Polynom f ausdrücken und auswerten können. Unser Beweis für die Existenz einer Nullstelle a von f ist die tabellarische Aufzählung aller 2 3 Funktionswerte von Ga , Gb und Gc . Dieser Beweis hat Länge 2n + 2n + 2n . Wir bezeichnen mit χS den charakteristischen Vektor der Menge S bei dem die Komponenten i genau dann 1 ist, wenn das ite Element der Grundmenge in S ist. Wir greifen auf (7.3) zurück und erhalten mit dieser Notation für eine feste Belegung a: X X X f (a) = α + ai + ai aj + ai aj ak i∈S1
(i,j)∈S2
(i,j,k)∈S3
= α + Ga (χS1 ) + Gb (χS2 ) + Gc (χS3 )
Damit können wir f (a) dadurch berechnen, indem wir Ga , Gb und Gc jeweils an einem einzigen Punkt evaluieren. Das heißt, wir benötigen für diese Aktion nur drei Bits aus dem tabellierten Beweis. Falls wir immer korrekte Beweise hätten, ergäbe sich damit ein Frageaufwand q(n) = 3 und r(n) = m ≤ n3 : 1. Bei Eingabe F benutzt der Verifizierer m Zufallsbits, um f zu erhalten. 2. Er fragt die drei Bits Ga (χS1 ), Gb (χS2 ) und Gc (χS3 ) des Beweises ab. 3. Aus den Antworten berechnet er f (a). 4. Er akzeptiert, falls f (a) = 0. Falls F erfüllbar ist, so liefert eine erfüllende Belegung a in unserer Codierung über G a , Gb , Gc nach Lemma 7.8 immer eine akzeptierende Berechnung. Allerdings haben wir damit noch nicht die eigentliche Hauptschwierigkeit gelöst: wir müssen mit falschen Beweisen umgehen können. Falls f keine Nullstelle hat, dann dürfen wir mit Wahrscheinlichkeit höchstens 1/2 akzeptieren. Wenn f keine Nullstelle hat, dann könnte ein böswilliger Gegenspieler G a , Gb und Gc so wählen, daß wir getäuscht werden. Allerdings hat unsere Codierung zwei nützliche Eigenschaften, die uns helfen: die Funktionen sind linear und alle durch den gleichen Vektor a bestimmt.
7.2.2 Falsche Beweise und die Verifikation In diesem Abschnitt zeigen wir, wie der Verifizierer mit angeblichen und insbesondere falschen Beweisen umgehen kann. Falls der Verifizierer folgende zwei Eigenschaften sicherstellen kann, funktioniert die im letzten Abschnitt vorgestellte Strategie: 1. Ga , Gb und Gc sind lineare Funktionen. 2. Ga , Gb und Gc sind alle durch den gleichen Vektor a bestimmt und b = a ◦ a, c = a ◦ b. Wir zeigen im Folgenden, wie wir beide Eigenschaften (getrennt) mit konstanter Fehlerwahrscheinlichkeit verifizieren können (»Sub-Verifzierer«). Diese Fehlerwahrscheinlichkeit können wir jeweils durch unabhängige Wiederholungen beliebig verkleinern, so daß dann die Summe der Fehlerwahrscheinlichkeiten nach O(1) Wiederholungen insgesamt höchstens 1/2 beträgt.
7.2 Schnelle Beweise für NP: Probabilistische Beweisprüfer
71
Der Linearitätstest Definition 7.9 Seien f, g : I → O Funktionen mit endlicher Urbild- und Bildmenge. Der Abstand ∆(f, g) zwischen f und g ist definiert als ∆(f, g) = Pr [f (x) 6= g(x)] ,
wobei die Wahrscheinlichkeit bezüglich eines gleichverteilt gezogenen Elements x ∈ I gerechnet wird. Sei 0 ≤ δ ≤ 1. Die Funktionen f und g heißen δ -ähnlich, falls ∆(f, g) ≤ δ . Eine Funktion f : Zn2 → Z2 heißt linear, falls sie von der Form f (x) = Alle drei Funktionen Ga , Gb und Gc sind linear.
Pn
i=1
ai xi ist.
Lemma 7.10 Die Funktion f : Zn2 → Z2 ist genau dann linear, falls f (a) = f (b) = f (a + b) für alle a, b ∈ Zn2 gilt. Beweis: 2 ˆ : Zn → Das folgende Lemma ist ein Schlüssel für die Sub-Verifikation der Linearität. Sei G 2 Z2 eine Funktion, die wir auf Linearität prüfen wollen. Das Lemma besagt im wesentlichen ˆ ˆ ˆ Folgendes: Falls die Wahrscheinlichkeit für G(x)+ G(y) = G(x+y) genügend groß ist (für n ˆ zufällig gewählte x, y ∈ Z2 , also G die Linearitätsbedingung (vgl. auch Lemma 7.10) für ˆ an wenigen Stellen die meisten Stellen erfüllt, dann kann man durch Modifikation von G eine lineare Funktion erhalten. Diese Aussage ist »intuitiv« richtig, der Beweis jedoch überraschend aufwändig, so daß wir hier nur das Resultat nennen. ˆ : Zn2 → Z2 eine Funktion mit der Eigenschaft, daß Lemma 7.11 Sei 0 ≤ δ ≤ 1/3. Sei G für zufällig unabhängig und gleichverteilte x, y ∈ Zn2 gilt: h i ˆ ˆ ˆ + y) ≥ 1 − δ . Pr G(x) + G(y) = G(x 2
ˆ sich δ -ähnlich sind. Dann gibt es eine lineare Funktion G : Zn2 → Z2 , so daß G und G Beweis: Der Beweis sprengt hier leider den Rahmen.
2
ˆa, Der Verifizierer ist in der Situation, daß der angebliche Beweis π drei Funktionen G ˆ b und G ˆ c enthält, die möglicherweise nicht linear sind. Der Verifizierer benutzt nun das G Lemma 7.11, um sicherzustellen, daß alle drei Funktionen δ-ähnlich zu linearen Funktionen sind. Danach kann er annehmen, daß tatsächlich drei lineare Funktionen G a , Gb und Gc im Beweis geliefert werden (da seine Fehlerwahrscheinlichkeit bei der Auswertung danach ˆ a . Für die beiden höchstens δ ist). Wir zeigen die Arbeitsweise des Verifizierers V für G anderen Funktionen erfolgt die Verifikation analog. Zunächst wählt V gleichverteilt zufällig und unabhängig zwei Werte x ∈ Z n2 und y ∈ Zn2 . ˆ a (x), Dafür benötigt er jeweils n Zufallsbits. Dann fragt er im Beweis die drei Werte G ˆ a (y) und G ˆ a (x + y) an. Falls G ˆ a (x) + G ˆ a (y) 6= G ˆ a (x + y), dann kann G ˆ a nicht liG near sein und V kann den ganzen Beweis verwerfen. In diesem Fall lehnt V die gesamte ˆ a (x) + G ˆ a (y) = G ˆ a (x + y), so ist zwar G ˆ a nicht zwangsläufig linear, Eingabe ab. Falls G aber nach Lemma 7.11 mit hoher Wahrscheinlichkeit δ-ähnlich zu einer linearen Funktion.
72
Algebra (huuhh!) und Zufall ˆ a nicht δ-ähnlich zu einer Wiederholung des Tests reduziert die Wahrscheinlichkeit, daß G linearen Funktion ist, auf einen beliebig kleinen Fehler. ˆa, G ˆ b und G ˆ c weiß V , daß jede der drei Funktionen Nach dem (wiederholten) Testen von G mit hoher Wahrscheinlichkeit δ-ähnlich zu einer linearen Funktion ist. Ab diesem Zeitpunkt kann der Verifizierer die entsprechenden linearen Funktionen mit konstanter Wahrscheinlichkeit korrekt auswerten. Dies funktioniert wie folgt. ˆ a . Daher wählt er ein Angenommen V benötigt den Wert Ga (z). Er hat nur Zugriff auf G n ˆ ˆ ˆ a δ-ähnlich zu Ga zufälliges x ∈ Z2 und berechnet Ga (z) = Ga (z − x) + Ga (x). Da G ist, so erhält er jeweils mit Wahrscheinlichkeit 1 − δ den korrekten Wert an den Stellen z − x und x. Obwohl die beiden Stellen stark korrelliert sind, ist die Wahrscheinlichkeit, daß beide Stellen korrekt evaluiert werden mindestens 1 − 2δ. Durch Wiederholung (neue Wahl von x) kann die Fehlerwahrscheinlichkeit beliebig reduziert werden. Insbesondere benötigen wir nur O(1) Wiederholungen, um den Fehler unter eine vorgegebene Schranke zu drücken. Da jede Wiederholung O(1) Bits aus dem Beweis benötigt, reichen insgesamt O(1) Bits aus.
Die Anzahl der verwendeten Zufallsbits ist O(n3 ) pro Wiederholung, da wir im Fall von Gc 3 für eine Zufallsvektor aus Zn2 n3 Bits benötigen.
Die oben beschriebene Sub-Verifikation zeigt, daß wir von nun an annehmen können, daß der Beweis die korrekten Werte von Ga , Gb und Gc enthält. Der Konsistenztest Bisher haben wir die Linearität der Funktionen im Beweis sichergestellt. Allerdings verbleibt noch die zweite Eigenschaft, die wir verifizieren müssen: Ga , Gb und Gc müssen durch den gleichen Vektor a bestimmt sein, wobei b = a ◦ a und c = a ◦ b.
Falls wir mit konstanter Fehlerwahrscheinlichkeit sicherstellen können, daß für die Koeffizienten a, b und c von Ga , Gb und Gc die Eigenschaften b = a ◦ a und c = a ◦ b gelten, so können wir mit konstanter Fehlerwahrscheinlichkeit die Existenz einer Nullstelle von f verifizieren, wie wir dies in Abschnitt 7.2.1 beschrieben haben.
Wir zeigen, wie wir b = a ◦ a mit konstanter Fehlerwahrscheinlichkeit verifizieren können. Der Test, daß c = a ◦ b verläuft wieder vollkommen analog. Wir interpretieren dazu b als n × n-Matrix. Unser Ziel ist es, die Gleichheit der beiden Matrizen a ◦ a und b anhand von konstant vielen Funtionswerten von Ga und Gb zu überprüfen. Seien r, s ∈ Zn2 . Dann gilt: Ga (r) · Ga (s) = =
n X i=1
X
! n X a i ri · aj sj j=1
a i a j ri sj
i,j
= Ga◦a (r ◦ s). Falls b = a◦a, so muß Ga (r)Ga (s) = Gb (r◦s) für alle r, s ∈ Zn2 gelten. Da Ga (r) = aT r, Ga (s) = aT s und Gb (r ◦ s) = rT bs (bei Interpretation von b als n × n-Matrix), ist diese Bedingung äquivalent zu aT r · aT r = rT bs oder rT (a ◦ a)s = r T bs. Die Bedingung
rT (a ◦ a)s = r T bs
(7.4)
bedeutet den Test zweier n × n-Matrizen mit Hilfe von zwei ausgewählten Vektoren r, s ∈ Zn2 . Da (7.4) äquivalent zu Ga (r)Ga (s) = Gb (r ◦ s) ist, können wir für festes r und s die Bedingung (7.4) durch konstant viele Funktionswerte, d.h., konstant viele Bits aus dem Beweis testen. Jetzt kommt wieder die Technik von Freiwalds ins Spiel:
7.3 Primzahltests
73
Lemma 7.12 Seien a ◦ a und b zwei n × n Matrizen über Z2 , so daß a ◦ a 6= b. Seien r und s zufällig gleichverteilt und unabhängig aus Zn2 gewählt. Dann gilt: 3 Pr rT (a ◦ a)s = r T bs ≤ . 4 Beweis:
2
Mit Hilfe von Lemma 7.12 können wir durch konstant viele Anfragen an den Beweis mit konstanter Wahrscheinlichkeit sicherstellen, daß b = a ◦ a. Wie erwähnt, funktioniert der Test, ob c = a ◦ b analog.
Damit haben wir die letzte notwendige Eigenschaft mit O(1) Anfragen an den Beweis und O(n3 ) Zufallsbits mit konstanter Wahrscheinlichkeit gesichert. Damit ist unser Verifizierer vollständig.
7.3 Primzahltests In diesem Abschnitt beschäftigen wir uns mit dem Problem, große Primzahlen zu finden. Solche Primzahlen benötigt man unter anderem in Public-Key-Schlüsselsystemem in der Kryptographie (RSA etc.). Wir bezeichnen mit P ⊂ N die Menge aller Primzahlen. Für n ∈ N definieren wir die beiden Mengen Zn und Z∗n durch: Zn := {0, 1, . . . , n − 1}
Zn := { x : 1 ≤ x ≤ n und ggT(x, n) = 1} Hierbei ist ggT(x, n) der größte gemeinsame Teiler von x und n. Wir nennen x und n teilerfremd, wenn ggT(x, n) = 1. Die Menge Zn ist eine Gruppe bezüglich der Addition modulo n, die Menge Z∗n eine Gruppe bezüglich der Multiplikation modulo n. (Für p ∈ P ist Zp mit der Addition und Multiplikation modulo p ein Körper). Die Elemente in Z n sind die kanonischen Repräsentanten der Restklassen bei der ganzzahligen Division durch n. Mit a mod b und a÷b bezeichnen wir den Rest bei der ganzzahligen Division von a durch b bzw. den ganzzahligen Quotienten. Wir schreiben a|b, falls a ein Teiler der Zahl b ist. Der Euklidische Algorithmus ist ein klassisches Verfahren zur Berechnung des ggT. Satz 7.13 Für natürliche Zahlen a > b > 0 liefert der Algorithmus von Euklid in Polynomialzeit Zahlen λ, µ ∈ Z mit ggT(a, b) = λa + µb. Beweis: Siehe etwa [2].
2
Da Z∗n eine Gruppe ist, besitzt jedes Element x ein multiplikatives Inverses x−1 . Dieses können wir in Polynomialzeit mit dem Algorithmus von Euklid berechen: Da ggT(x, n) = 1 liefert der Algorithmus von Euklid λ, µ mit 1 = λx + µn, also ist λx ≡ 1 (mod n). Dies heißt nichts anderes, als daß λ = x−1 .
7.3.1 Ein Pseudoprimzahltest Grundlage des einfachen Pseudoprimzahltests in diesem Abschnitt ist der berühmte Satz von Fermat:
74
Algebra (huuhh!) und Zufall Satz 7.14 (Satz von Fermat) Ist p ∈ P und x ∈ Z∗n , dann gilt: xp−1 ≡ 1 (mod p).
(7.5)
Wir nennen eine Zahl n ∈ N eine Pseudoprimzahl zur Basis x, falls xn−1 ≡ 1 (mod n).
(7.6)
Nach dem Satz von Fermat ist jede Primzahl auch eine Pseudoprimzahl. Der einfache Pseudoprimzahltest in Algorithmus 7.2 benutzt Gleichung (7.6) mit der Basis x = 2. Wir interpretieren eine Rückgabe von prim beim Aufruf P SEUDOPRIME (n) als erfolgreicher Test, daß n eine Primzahl ist. Algorithmus 7.2 Pseudo-Primzahlentest P SEUDOPRIME(n) Input: Eine natürliche Zahl n ∈ N 1 if n ≤ 1 oder (n 6= 2 und ggT(n, 2) 6= 1) then 2 return nicht prim 3 else 4 Berechne z := 2n−1 mod n 5 if z = 1 then 6 return prim 7 else 8 return nicht prim 9 end if 10 end if Der Algorithmus liefert möglicherweise ein falsches Ergebnis. Allerdings können Fehler nur in einem Fall auftreten, nämlich wenn die zu testende Zahl n keine Primzahl ist. Es sollte klar sein, daß man den Algorithmus in Polynomialzeit effizient implementieren kann, sofern man die »modulare Exponentiationen« 2 n−1 (mod n) effizient ausführen kann. Wir stellen hier kurz einen effizienten Algorithmus zur Berechnung von a b (mod n) vor, den wir später im Algorithmus von Miller und Rabin noch benötigen. Die Idee des modularen Exponentiationsalgorithmus (Algorithmus 7.3) ist recht einfach. Sei (bk , bk−1 , . . . , b1 , b0 ) die Binärrepräsentation von b mit bk 6= 0. Hier ist bk das höchstwertige Bit und b0 das niederwertigste Bit. Die Zahl b ist genau dann gerade, wenn b 0 = 0. Satz 7.15 Algorithmus 7.3 berechnet korrekt ab mod n. Falls a, b, n jeweils maximal β Bits in der Binärdarstellung haben, dann benötigt der Algorithmus O(β) arithmetische Operationen und O(β 2 ) Bitoperationen. Beweis: Wir zeigen durch Induktion, daß unmittelbar vor Ausführung der for-Schleife mit Wert i folgende Eigenschaften gelten: 1. c besitzt die Binärdarstellung (bk , bk−1 , . . . , bi+1 ) 2. d = ac mod n. Induktionsanfang i = k: Für i = k ist der Präfix (bk , . . . , bk+1 ) leer, was c = 0 entspricht. Ferner ist d = 1 = a0 mod n. Induktionsschritt i → i + 1: Seien c0 und d0 die Werte am Ende einer Iteration (also zu Beginn der nächsten Iteration) Dann wird der Wert c aktualisiert zu c := 2c + 1 falls b i = 1
7.3 Primzahltests
75
Algorithmus 7.3 Modulare Potenzierung zur Berechnung von a b mod n M ODULAR -E XPONENTATION(a, b, n) Input: Drei Zahlen a, b, n ∈ N Output: Der Wert ab mod n 1 Setze c := 0 und d := 1 2 Sei (bk , bk−1 , . . . , b1 , b0 ) die Binärdarstellung von b. 3 for i := k, k − 1, . . . , 1, 0 do 4 c := 2c 5 d := (d · d) mod n 6 if bi = 1 then 7 c := c + 1 8 d := (d · a) mod n 9 end if 10 end for 11 return d
und zu c := 2c falls bi = 0. Somit ist c zu Beginn der nächsten Iteration gemäß unserer Behauptung gesetzt. 0
0
Falls bi = 0, dann ist d = (d0 )2 mod n = (ac )2 mod n = a2c mod n = ac mod n wie 0 0 gewünscht. Falls bi = 1, so ist d = ((d0 )2 · a) mod n = (a2c · a) mod n = a2c +1 mod n = ac mod n, was erneut das gewünschte Ergebnis liefert. Beim Abbruch des Algorithmus ist i = −1, also c = b und d = ab mod n. Der Algorithmus ist also korrekt. Die Laufzeit ergibt sich aus der Beobachtung, daß die for-Schleife O(β)-mal durchlaufen wird und in jedem Durchlauf nur O(1) arithmetische Opertationen durchgeführt werden. 2
7.3.2 Der Miller-Rabin Primzahltest Der Miller-Rabin Primzahltest benutzt die Idee des einfachen Pseudoprimzahltests im letzten Abschnitt. Allerdings erhöht er seine Sicherheit durch zwei Techniken. Die erste Technik sollte offensichtlich sein: Man benutzt nicht nur 2 als Basis, sondern verschiedene zufällig ausgewählte Basen x. Die zweite Technik benutzt weitere Ergebnisse der Algebra/Zahlentheorie, die wir hier ohne Beweis nennen. Satz 7.16 Sei p ∈ P mit p > 2 und e ≥ 1. Dann hat die Gleichung x2 ≡ 1 (mod pe )
nur zwei Lösungen, nämlich x = 1 und x = −1.
(7.7) 2
Eine Zahl x heißt eine nichttriviale Wurzel von 1 modulo n, falls x2 ≡ 1 (mod n) aber x 6≡ 1 (mod n) und x 6≡ −1 (mod n). Satz 7.16 besagt, daß für n ∈ P \ {2} keine nichttriviale Wurzel von 1 modulo n existiert. Damit ergibt sich das folgende Korollar: Korollar 7.17 Falls eine nichttriviale Wurzel von 1 modulo n existiert, dann ist n keine Primzahl. 2 Der Primzahltest von Rabin und Miller berechnet mehrmals Werte x0 := au mod n in Anlehnung an den Pseudoprimzahltest. Dabei benutzt er zusätzlich Korollar 7.17 und testet,
76
Algebra (huuhh!) und Zufall Algorithmus 7.4 Hilfsroutine für den Primzahltest von Miller und Rabin W ITNESS(a, n) Input: Zwei Zahlen a, n ∈ N, wobei n ungerade ist 1 Berechne t ∈ N mit t ≥ 1 und u ∈ N, so daß n − 1 = 2t u 2 x0 := au mod n 3 for i := 1, 2, . . . , t do 4 xi := x2i−1 mod n 5 if xi = 1 und xi−1 6= 1 und xi−1 6= n − 1 then 6 return Ja 7 end if 8 end for 9 if xt 6= 1 then 10 return Ja 11 else 12 Nein 13 end if
ob durch iteratives Quadrieren von x0 eine nichttriviale Wurzel von 1 modulo n gefunden werden kann. Der eigentliche Algorithmus ist in Algorithmus 7.5 dargestellt. Er benutzt die »ZeugenRoutine« W ITNESS aus Algorithmus 7.4. Der Test W ITNESS(a, n) besteht aus einem aufgebohrten Test, ob an−1 ≡ 1 (mod n), was wir bereits im einfachen Pseudoprimzahltest benutzt hatten. Der Test wird überhaupt nur für ungerade n aufgerufen, da wir gerade n > 2 einfach als zusammengesetzte Zahlen erkennen und ausschließen können. Falls n ungerade ist, so können wir die gerade Zahl n − 1 schreiben als n − 1 = 2t u für t ≥ 1 und ungerades u. Diese Zerlegung wird zunächst von W ITNESS(a, n) berechnet. Dann gilt: an−1 ≡ a2
t
u
≡ (au )2
t
(mod n).
Daher können wir an−1 (mod n) dadurch berechnen, daß wir zuerst au (mod n) berechnen und dann das Ergebnis t mal quadrieren. i
Genau dies führt W ITNESS(a, n) durch. Beim iterativen Quadrieren erhält er x i ≡ a2 u (mod n) für i = 1, . . . , t. Diese Zahlen xi testet er dann, ob sie eine nichttriviale Wurzel von 1 modulo n sind. Falls er eine solche Wurzel findet, kann nach Korollar 7.17 n keine Primzahl sein und der Algorithmus kann mit Fug und Recht NICHT PRIM zurückliefern. Algorithmus 7.5 Primzahltest von Miller und Rabin M ILLER -R ABIN(n, s) Input: Zwei Zahlen n ∈ N und s ∈ N 1 if n = 1 oder (n > 2 und n ist gerade) then 2 return nicht prim 3 else 4 for j := 1, . . . , s do 5 Wähle a zufällig und gleichverteilt aus {1, . . . , n − 1}. 6 if W ITNESS(a, n) = Ja then 7 return nicht prim 8 end if 9 end forreturn prim 10 end if
7.3 Primzahltests Zuletzt prüft W ITNESS(a, n) noch, ob xt ≡ 1 (mod n), also ob an−1 ≡ 1 (mod n). Nach der Konstruktion ist klar, daß W ITNESS(a, n) nur in einem Fall ein falsches Ergebnis liefern kann, nämlich wenn a keine Primzahl ist. Primzahlen müssen alle Tests nach dem Satz von Fermat und Korollar 7.17 erfolgreich passieren. Wir nennen a ∈ {1, . . . , n − 1} einen Zeugen dafür, daß a nicht prim ist, falls W ITNESS(a, n) als Ergebnis Ja liefert. Satz 7.18 Falls n ∈ / P ungerade ist, so gibt es mindestens (n − 1)/2 Zeugen für diese Tatsache. 2 Satz 7.19 Sei n ∈ N und s ∈ N mit s ≥ 1. Die Wahrscheinlichkeit, daß der Algorithmus von Miller und Rabin bei Aufruf M ILLER -R ABIN(n, s) ein falsches Ergebnis liefert, ist höchstens 2−s . Beweis: Wir können uns auf den Fall beschränken, daß n ungerade mit n > 2 ist. Nach Satz 7.18 ist die Wahrscheinlichkeit, daß wir bei der zufälligen Wahl von a in Schritt 5 einen Zeugen auswählen, mindestens 1/2. Da der Algorithmus nur dann einen Fehler macht, wenn er in keiner der s Iterationen (und Aufrufe von W ITNESS(a, n)) einen Zeugen a gewählt hat, ist die Gesamtfehlerwahrscheinlichkeit nach oben durch 2 −s beschränkt. 2 Das Ergebnis von Satz 7.19 ist sehr stark. Falls wir s = 100 wählen, so ist die Fehlerwahrscheinlichkeit höchstens 2−100 , was für alle Anwendungen ausreichen sollte.
77
78
Abkürzungen und Symbole Abkürzungen O. B. d. A.
Ohne Beschränkung der Allgemeinheit
Symbole ∀ ∃ [a, b] [a, b) (a, b) |A| ∅ N Ω(g) O(g) R Θ(g)
der Allquantor der Existenzquantor das geschlossene Intervall { x ∈ R a ≤ x ≤ b } das halboffene Intervall { x ∈ R a ≤ x < b }, analog auch (a, b] das offene Intervall { x ∈ R a < x < b }
die Kardinalität der Menge A die leere Menge die Menge der natürlichen Zahlen, N := {0, 1, 2, . . .} Ω(g) := { f ∈ M | ∃c, n0 ∈ N : ∀n ≥ n0 : f (n) ≥ c · g(n) } O(g) := { f ∈ M | ∃c, n0 ∈ N : ∀n ≥ n0 : f (n) ≤ c · g(n) } die Menge der reellen Zahlen Θ(g) := O(g) ∩ Ω(g)
80
Komplexität von Algorithmen B.1 Größenordnung von Funktionen Sei M die Menge aller reellwertigen Funktionen f : N → R auf den natürlichen Zahlen. Jede Funktion g ∈ M legt dann drei Klassen von Funktionen wie folgt fest: • O(g) := { f ∈ M | ∃c, n0 ∈ N : ∀n ≥ n0 : f (n) ≤ c · g(n) } • Ω(g) := { f ∈ M | ∃c, n0 ∈ N : ∀n ≥ n0 : f (n) ≥ c · g(n) } • Θ(g) := O(g) ∩ Ω(g) Man nennt eine Funktion f von polynomieller Größenordnung oder einfach polynomiell, wenn es ein Polynom g gibt, so daß f ∈ O(g) gilt.
B.2 Berechnungsmodell Das bei der Laufzeit-Analyse verwendete Maschinenmodell ist das der Unit-Cost RAM (Random Access Machine). Diese Maschine besitzt abzählbar viele Register, die jeweils eine ganze Zahl beliebiger Größe aufnehmen können. Folgende Operationen sind jeweils in einem Takt der Maschine durchführbar: Ein- oder Ausgabe eines Registers, Übertragen eines Wertes zwischen Register und Hauptspeicher (evtl. mit indirekter Adressierung), Vergleich zweier Register und bedingte Verzweigung, sowie die arithmetischen Operationen Addition, Subtraktion, Multiplikation und Division [9]. Dieses Modell erscheint für die Analyse der Laufzeit von Algorithmen besser geeignet als das Modell der Turing-Maschine, denn es kommt der Arbeitsweise realer Rechner näher. Allerdings ist zu beachten, daß die Unit-Cost RAM in einem Takt Zahlen beliebiger Größe verarbeiten kann. Durch geeignete Codierungen können damit ausgedehnte Berechnungen in einem einzigen Takt versteckt werden, ferner sind beliebig lange Daten in einem Takt zu bewegen. Damit ist das Modell echt mächtiger als das der Turing-Maschine. Es gibt keine Simulation einer Unit-Cost RAM auf einer (deterministischen) Turing-Maschine, die mit einem polynomiell beschränkten Mehraufwand auskommt. Um diesem Problem der zu großen Zahlen vorzubeugen, kann man auf das Modell der Log-Cost RAM [9] zurückgreifen. Bei einer solchen Maschine wird für jede Operation ein Zeitbedarf angesetzt, der proportional zum Logarithmus der Operanden, also proportional zur Codierungslänge ist. Eine andere Möglichkeit, das Problem auszuschließen, besteht darin, sicherzustellen, daß die auftretenden Zahlen nicht zu groß werden, also daß ihre Codierungslänge polynomiell beschränkt bleibt. Diese Voraussetzung ist bei den hier vorgestellten Algorithmen stets erfüllt. Der einfacheren Analyse wegen wird daher das Modell der Unit-Cost RAM zugrundegelegt.
82
Komplexität von Algorithmen
B.3 Komplexitätsklassen Die Komplexität eines Algorithmus ist ein Maß dafür, welchen Aufwand an Ressourcen ein Algorithmus bei seiner Ausführung braucht. Man unterscheidet die Zeitkomplexität, die die benötigte Laufzeit beschreibt, und die Raumkomplexität, die Aussagen über die Größe des benutzten Speichers macht. Raumkomplexitäten werden in diesem Skript nicht untersucht. Die Komplexität wird in der Regel als Funktion über der Länge der Eingabe angegeben. Man nennt einen Algorithmus von der (worst-case-) Komplexität T , wenn die Laufzeit für alle Eingaben der Länge n durch die Funktion T (n) nach oben beschränkt ist. Die Komplexität von Algorithmen wird in dieser Arbeit als Funktion der Eckenzahl n und Kantenzahl m des eingegebenen Graphen angegeben. Diese Angabe ist detaillierter als die Abhängigkeit der Komplexität von der Eingabelänge: bei ecken- und kantenbewerteten Graphen ist deren Codierungslänge mindestens von der Größenordnung Ω(n + m). Besonders wichtig sind in diesem Zusammenhang die Klassen P und NP. Die Klasse P ist die Menge aller Entscheidungsprobleme, die auf einer deterministischen Turing-Maschine in polynomieller Zeit gelöst werden können. Entsprechend ist die Klasse NP definiert als die Menge aller Probleme, deren Lösung auf einer nichtdeterministischen Turing-Maschine in Polynomialzeit möglich ist. Man vergleiche dazu etwa [4]. Eine Transformation zwischen NP-Problemen heißt polynomielle Reduktion, wenn sie in polynomieller Zeit Instanzen zweier Probleme aus NP so ineinander überführt, daß die Antwort des Ausgangsproblems auf die Ausgangsinstanz dieselbe ist wie die Antwort des zweiten Problems auf die transformierte Instanz. Ein Problem heißt NP-vollständig, wenn jedes andere Problem aus NP polynomiell darauf reduziert werden kann. Der Reduktionsbegriff wird durch Einführen der Turing-Reduktion so erweitert, daß Reduktionen zwischen Optimierungsproblemen und Entscheidungsproblemen in NP erfaßt werden. Ein NP-Optimierungsproblem heißt dann NP-hart, wenn es von einem NP-vollständigen Entscheidungsproblem turing-reduziert werden kann. Ein wesentliches Resultat der Komplexitätstheorie besagt, daß NP-harte Optimierungsprobleme nicht in polynomieller Zeit gelöst werden können, es sei denn, es gilt P = NP. Dies ist der Grund, warum bei der Untersuchung von NP-harten Optimierungsproblemen auf exakte Lösungen verzichtet wird und stattdessen Näherungen in Betracht gezogen werden.
Mathematische Hilfsmittel Lemma C.1
(i) Für alle t ∈ R gilt et ≥ 1 + t mit Gleichheit nur für t = 0.
(ii) Für alle t, n ∈ R mit n ≥ 1 und |t| ≤ n gilt: n t2 t et 1 − ≤ 1+ ≤ et . n n (iii) Für alle t, n ∈ R≥0 gilt:
t 1+ n
n
t
≤e ≤
t 1+ n
n+t/2
.
84
Diskrete Wahrscheinlichkeit In diesem Abschnitt wiederholen wir kurz die grundlegendsten Begriffe aus dem Bereich der Wahrscheinlichkeitsrechnung. Für das Material im Skript genügt es, diskrete Wahrscheinlichkeitsräume zu betrachten.
D.1 Wahrscheinlichkeitsräume Definition D.1 (Wahrscheinlichkeitsraum) Ein (diskreter) Wahrscheinlichkeitsraum ist ein Paar (Ω, Pr), wobei Ω eine nichtleere abzählbare Menge und Pr: : Ω → R≥0 ein Wahrscheinlichkeitsmaß, d.h. eine Funktion mit X Pr [ω] = 1 ω∈Ω
ist.
Die Elemente in Ω heißen Elementarereignisse, eine Menge E ⊂ Ω ein Ereignis. Man setzt Pr auf die Ereignisse per X Pr [ω] Pr [E] := ω∈E
fort. 1 Ist Ω endlich und Pr [ω] = |Ω| für alle ω ∈ Ω, so nennen wir Pr die Gleichverteilung + auf Ω. Mit Ω bezeichnen wir die Menge aller Elementarereignisse mit strikt positiver Wahrscheinlichkeit: Ω+ := { ω ∈ Ω : Pr [ω] > 0 }.
Eigenschaft D.2 Aus Definition 2.1 folgt, daß ein Wahrscheinlichkeitsmaß folgende Bedingungen erfüllt:
(i) Für jedes Ereignis E ⊆ Ω gilt: 0 ≤ Pr [E] ≤ 1. (ii) Füreine P Menge { Ei : i ∈ I } von paarweise disjunkten Ereignissen gilt: S abzählbare Pr i∈I Ei = i∈I Pr [Ei ].
Definition D.3 (Bedingte Wahrscheinlichkeit) Die bedingte Wahrscheinlichkeit von E1 unter der Bedingung E2 mit Pr [E2 ] > 0 ist definiert durch: Pr [E1 ∩ E2 ] . (D.1) Pr [E1 |E2 ] := Pr [E2 ]
Die bedingte Wahrscheinlichkeit Pr [E1 |E2 ] entspricht der Wahrscheinlichkeit, daß das Ergebnis des Zufallsexperiments in E1 liegt, wenn bereits bekannt ist, daß es in E2 enthalten ist.
86
Diskrete Wahrscheinlichkeit Definition D.4 (Unabhängigkeit, k-Unabhängigkeit) Eine Kollektion { Ei : i ∈ I } von Ereignissen ist unabhängig, wenn für alle Teilmengen S ⊆ I gilt: " # Y \ Pr Pr [Ei ] . (D.2) Ei = i∈S
i∈S
Die Kollektion von Ereignissen heißt k -unabhängig, falls (D.2) für alle Indexmengen S ⊆ I mit |S| ≤ k gilt. Im Spezialfall k = 2 nennt man die Kollektion auch paarweise unabhängig. Eigenschaft D.5 Für eine Kollektion {E1 , . . . , Ek } von Ereignissen gilt # " k i−1 k \ Y \ Ej . Pr Ei | Ei = Pr i=1
i=1
j=1
D.2 Zufallsvariablen Definition D.6 (Zufallsvariable) Eine Zufallsvariable X ist eine Funktion X : Ω → R. Für x ∈ R bezeichnet Pr [X = x] die Wahrscheinlichkeit des Ereignisses { ω ∈ Ω : X(ω) = x }. Definition D.7 (Erwartungswert einer Zufallsvariablen) Der Erwartungswert E [X] von X ist definiert als E [X] =
X
x∈X(Ω+ )
x · Pr [X = x] ,
sofern die unendliche Summe existiert. Eigenschaft D.8 Seien X1 , . . . , Xk Zufallsvariablen und h : Rk → R eine lineare Funktion. Dann gilt: E [h(X1 , . . . , Xk )] = h(E [X1 ] , . . . , E [Xk ]).
Literaturverzeichnis [1] R. K. Ahuja, T. L. Magnanti, and J. B. Orlin, Networks flows, Prentice Hall, Englewood Cliffs, New Jersey, 1993. [2] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction to algorithms, 2 ed., MIT Press, 2001. [3] W. Feller, An introduction to probability theory and its applications, 3 ed., vol. 1, John Wiley & Sons, Inc., 1968. [4] M. R. Garey and D. S. Johnson, Computers and intractability (a guide to the theory of NP-completeness), W.H. Freeman and Company, New York, 1979. [5] M. Grötschel, L. Lovász, and A. Schrijver, Geometric algorithms and combinatorial optimization, Springer-Verlag, Berlin Heidelberg, 1988. [6] D. Jungnickel, Graphen, Netzwerke und Algorithmen, 2 ed., BI-Wissenschaftsverlag, 1990. [7] V. King, A simpler minimum spanning tree verification algorithm, Algorithmica 18 (1997), 263–270. [8] S. O. Krumke, Algorithmen und Datenstrukturen, Vorlesungsskript, http://www.zib.de/krumke, 2003. [9] C. M. Papadimitriou, Computational complexity, Addison-Wesley Publishing Company, Inc., Reading, Massachusetts, 1994. [10] W. Rudin, Principles of mathematical analysis, 3 ed., McGraw Hill, 1976. [11] M. Tarsi, Optimal search on some game trees, Journal of the ACM 30 (1983), 389–396.