Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung 1. Motivation 2. Laufzeit von Algorithmen 3. Paradigmen des Algorithmenentwurfs 4. Ausgewählte Datenstrukturen 5. Anwendungsgebiet: Algorithmische Geometrie 5.1 Motivation 5.2 Das Sweep-Line-Verfahren 5.3 Andere Ansätze 6. Randomisierte Algorithmen 6.1 Motivation / Einordnung 6.2 Skip-Listen 6.3 Weitere Beispiele 6.4 Ein randomisierter Primzahltest 16/1 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Fahrplan • • • ein einführendes Beispiel Modellierung randomisierter Algorithmen Typen von randomisierten Algorithmen 16/2 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Beispiel: ein randomisiertes Kommunikations-Protokoll • es gibt zwei Rechner R1 und R2 mit Datenbanken, welche anfangs einen identischen Inhalt haben der Inhalt der Datenbanken ändert sich dynamisch, wobei angestrebt wird, daß beide Datenbanken identisch bleiben von Zeit zu Zeit soll überprüft werden, ob das wirklich so ist • • Ziel: ein geeignetes Kommunikations-Protokoll ... es sollten möglichst wenige Bits übertragen werden (/* Korrektheit der übertragenen Bits *) 16/3 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Randbedingungen • • • ... es handelt sich um eine relativ große Datenbank, bspw. eine Gen-Datenbank n bezeichnet die Größe der Datenbank der Datenbank in Bits wenn einige Terabytes an Daten gespeichert werden, ist es realistisch n gleich 1016 zu setzen also x = x[1]x[2] ... x[n] und y = y[1]y[2] ... y[n] mit n = 1016, wobei x und y den Datenbankinhalt von R1 und R2 bezeichnen 16/4 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Standardidee Schritt 1: R1 sendet den kompletten Inhalt x seiner Datenbank an R2 Schritt 2: R2 vergleicht den Inhalt y seiner Datenbank mit x; falls x = y, wird „gleich“ ausgegeben; sonst wird „ungleich“ ausgegeben ... es sind offenbar 1016 Bits zu übertragen 16/5 Hinweis: deterministisch geht das nicht besser !!! Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Randomisierte Variante Schritt 1: R1 wählt zufällig eine Primzahl p mit p ≤ n2 und berechnet h(x) = dec(x) mod p (/* wobei jede Primzahl ≤ n2 dieselbe Wahrscheinlichkeit hat, ausgewählt zu werden ist */) Schritt 2: R1 sendet bin(p) und bin(h(x)) an R2 Schritt 3: R2 berechnet h(y) = dec(y) mod p; falls h(x) = h(y), wird „gleich“ ausgegeben; sonst wird „ungleich“ ausgegeben 16/6 Hinweis: dec(x) = x[1]2n-1 + ...+ x[n]20, wobei n = 1016 gilt Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Eigenschaft 1: Kommunikationsaufwand Schritt 1: R1 wählt zufällig eine Primzahl p mit p ≤ n2 und berechnet h(x) = dec(x) mod p (/* (/* wobei jede Primzahl ≤ n2 dieselbe Wahrscheinlichkeit hat, ausgewählt zu werden ist */) Schritt 2: R1 sendet bin(p) und bin(h(x)) an R2 ... es sind die Binärdarstellung zweier Zahlen ≤ n2 = 1032 zu übertragen es sind ≤ 2⎡log(n2)⎤ Bits (/* ≤ 256 Bits */) zu übertragen !!! Hinweis: 2⎡log(n2)⎤ = 4 ⎡log(n)⎤ = 4 ⎡log(1016)⎤ = 4*16 ⎡log(10)⎤ = 256 16/7 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Eigenschaft 2: Qualität des Protokolls Schritt 3: R2 berechnet h(y) = dec(y) mod p; falls h(x) = h(y), wird „gleich“ ausgegeben; sonst wird „ungleich“ ausgegeben Fall 1: es wird „ungleich“ ausgegeben Æ korrekte Ausgabe Fall 2: es wird „gleich“ ausgegeben Æ möglicherweise inkorrekte Ausgabe (/* „Kollision“ */) ... es interessiert, die Wahrscheinlichkeit dafür, daß im Fall 2, fälschlicherweise „gleich“ ausgegeben wird 16/8 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Fehlerabschätzung für Fall 2 eine Kollision tritt auf, falls • x≠y • dec(x) mod p = dec(y) mod p, d.h. die Primzahl p teilt die Zahl w = |dec(x) - dec(y)| Fakt 1: es gibt n2 / ln(n2) viele Primzahlen ≤ n2 (/* falls n ≥ 9 */) Fakt 2: die Zahl w hat höchstens n - 1 Primfaktoren Fehlerwahrscheinlichkeit: Anzahl der Primfaktoren von w ≤ ln(n2)/n ≤ 100/1016 = 1/1014 Anzahl der Primzahlen ≤ n2 16/9 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Verbesserung des randomisierten Protokolls wähle unabhängig k zufällige Primzahlen ≤ n2 mache k Läufe des Protokolls Æ „gleich“ wird ausgegeben, falls jeder Lauf „gleich“ liefert Æ ansonsten wird „ungleich ausgegeben“ Fehlerwahrscheinlichkeit: ≤ (ln(n2)/n)k = (1/1014)k Hinweis: für k = 10 ergibt sich eine Fehlerwahrscheinlichkeit ≤ 1/10140 Hinweis: offenbar ist 10*256 << 1016 16/10 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Zwischenfazit • • • um Effizienz zu gewinnen, verzichtet man auf die Korrektheit des Protokolls • kennt jedoch die Wahrscheinlichkeit dafür, daß ein Fehler gemacht wird statt der richtigen Daten verwendet man sogenannte „Fingerprints“ um die Fehlerwahrscheinlichkeit zu verringern, wird das Protokoll mehrfach, unabhängig voneinander wiederholt 16/11 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung randomisierte Algorithmen • • ein durch zufällige Entscheidungen gesteuerter Algorithmus • man erlaubt dem Algorithmus von Zeit zu Zeit eine Münze zu werfen und abhängig vom Ergebnis zu entscheiden, wie weiter gearbeitet wird Qualitätskriterien • Laufzeit (/* Länge der Berechnungen */) • Grad der Korrektheit (/* Zuverlässigkeit */) 16/12 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Generelle Anforderung An randomisierte Algorithmen stellt man die Anforderung, daß sie mit hoher Wahrscheinlichkeit auf jeder Eingabe korrekt und effizient laufen, also daß sie in jeder Situation relativ zuverlässig sind. ... das Verhalten eines randomisierte Algorithmus stellt ein „einziges“ Zufallsexperiment dar 16/13 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Einfache Modellierung es sei A der betrachtete Algorithmus und w die aktuelle Eingabe • A wählt zufällig eine der möglichen Berechnungen C1, ..., Cm aus und verarbeitet die Eingabe w entsprechend das Zufallsexperiment der Arbeit von A auf der Eingabe w kann als Wahrscheinlichkeitsraum (SA,w,Wahr) modelliert werden, mit: • • SA,w = { C1, ..., Cm } Wahr ist Wahrscheinlichkeitsverteilung über SA,w 16/14 Hinweis: das kann man auch relativ einfach verallgemeinern Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Berechnungsbaum für A bei Eingabe w ... C1 Cm C2 ... man kann sich A auch als Menge von deterministischen Algorithmen A1, ..., Am vorstellen, wobei bei Eingabe von w zufällig ein Algorithmus Ai ausgewählt wird 16/15 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Zeitkomplexität von A auf w es bezeichne Time(Ci) die Länge der Berechnung Ci es sei Z: SA,w Æ N eine Zufallsvariable mit Z(Ci) = Time(Ci) m E-TimeA(w) = E[Z] = Σ i=1 m = Σ i=1 Wahr({Ci}) * Z(Ci) Wahr({Ci}) * Time(Ci) 16/16 Hinweis: falls die Ci gleichwahrscheinlich sind, ist das genau das arithmetische Mittel Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Zeitkomplexität von A (/* allgemein */) ... eine Funktion, die angibt, welche Laufzeit für alle Eingaben einer bestimmten Länge im schlimmsten Fall zu erwarten ist E-TimeA(n) = max { E-TimeA(w) | w hat die Länge n } 16/17 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Zuverlässigkeit von A auf w es sei Q: SA,w Æ { 0, 1 } eine Zufallsvariable mit Q(Ci) = 1, falls Ci das korrekte Resultat für w berechnet 0, sonst m ErfolgA(w) = E[Q] = Σ i=1 = Σ Wahr({Ci}) * Q(Ci) Wahr({Ci}) Q(Ci) = 1 FehlerA(w) = 1 - ErfolgA(w) = Σ Wahr({Ci}) Q(Ci) = 0 16/18 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Zuverlässigkeit von A (/* allgemein */) ... eine Funktion, die angibt, welche Fehlerwahrscheinlichkeit für alle Eingaben einer bestimmten Länge im schlimmsten Fall zu erwarten ist FehlerA(n) = max { FehlerA(w) | w hat die Länge n } 16/19 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Beispiel: Randomisiertes Kommunikationsprotokoll Schritt 1: R1 wählt zufällig eine Primzahl p mit p ≤ n2 und berechnet h(x) = dec(x) mod p (/* wobei jede Primzahl p mit 1 Schritt 2: R1 sendet bin(p) und bin(h(x)) an R2 Schritt 3: R2 berechnet h(y) = dec(y) mod p; falls h(x) = h(y), wird „gleich“ ausgegeben; sonst wird „ungleich“ ausgegeben 16/20 Hinweis: dec(x) = x[1]2n-1 + ...+ x[n]20 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung es sei n die Länge der beiden Binärstrings x und y • SPro,(x,y) = { Cp | p ∈ Prim(n2) } • Wahr ist die Gleichverteilung auf SPro,(x,y), d.h. Wahr({Cp}) = 1/|Prim(n2)| für alle Cp ∈ SPro,(x,y) 16/21 Hinweis: Prim(n2) bezeichnet die Menge aller Primzahlen Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung es sei n die Länge der beiden Binärstrings x und y ... die Kommunikationkomplexität ist immer gleich E-TimePro(n) = max { E-TimePro(w) | w hat die Länge n } ≤ 4 ⎡log(n)⎤ 16/22 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung es sei n die Länge der beiden Binärstrings x und y, wobei x ≠ y gilt es sei Q: SPro,(x,y) Æ { 0, 1 } eine Zufallsvariable mit Q(Cp) = ... 1, falls p eine „gute“ Primzahl für die Eingabe (x,y) ist 0, falls p eine „schlechte“ Primzahl für die Eingabe (x,y) ist es gibt immer nur höchstens n - 1 Primzahlen p ∈ Prim(p2), so daß p eine „schlechte“ Primzahl für die Eingabe (x,y) ist, d.h. obwohl x ≠ y ist, wird das Ergebnis „gleich“ ausgegeben 16/23 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung es sei n die Länge der beiden Binärstrings x und y, wobei x ≠ y gilt ErfolgPro(w) = E[Q] = Σ Wahr({Cp}) * Q(Cp) p ∈ Prim(n2) = 1/|Prim(n2)| * Σ Q(Cp) p ∈ Prim(n2) = 1/|Prim(n2)| * Σ Q(Cp) p ist „gut“ ≥ 1/|Prim(n2)| * (|Prim(n2)| - (n - 1) ) = 1 - (n -1 )/ |Prim(n2)| FehlerPro(w) = 1 - ErfolgPro(w) ≤ (n-1) / |Prim(n2)| 16/24 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Typen von randomisierten Algorithmen betrachten ausschließlich Algorithmen für Entscheidungsprobleme • ein Entscheidungsproblem Π ... ist eine allgemeine Ja/Nein-Frage mit einer Reihe von unspezifizierten Parametern • eine Instanz eines Entscheidungsproblems Π ... entsteht, indem die Parameter spezifiziert werden Ein Algorithmus ist ein Lösungsalgorithmus für das Entscheidungsproblems Π, wenn er die zugehörige Ja/Nein-Frage stets korrekt beantwortet. 16/25 Hinweis: das kann man auch relativ einfach verallgemeinern Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Typen von randomisierten Algorithmen man unterscheidet prinzipiell zwei Typen • Las Vegas-Algorithmen (/* machen keine Fehler */) • Monte Carlo-Algorithmen (/* können Fehler machen */) 16/26 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Las Vegas-Algorithmen • mögliche Ausgaben des Algorithmus A bei Eingabe w • A(w) = „ja“ bzw. A(w) = „nein“ • A(w) = „?“ (/* weiß nicht */) • Anforderungen • falls „ja“ bzw. „nein“ ausgegeben wird, so ist die Antwort auf die zugehörige Ja/Nein-Frage korrekt • Wahr( A(w) ∈ { „ja“,“nein“ } ) ≥ ½ ... durch eine wiederholte Anwendung des Algorithmus kann, die Wahrscheinlichkeit dafür, daß der Algorithmus das Ergebnis „?“ liefert, „beliebig“ klein gemacht werden 16/27 Algorithmik Kap. 6: Randomisierte Algorithmen Motivation / Einordnung Monte Carlo-Algorithmen mit einseitigem Fehler • mögliche Ausgaben des Algorithmus A bei Eingabe w • A(w) = „ja“ • A(w) = „nein“ • Anforderungen • falls „nein“ ausgegeben wird, so ist die Antwort auf die zugehörige Ja/Nein-Frage korrekt • Wahr( A(w) = „ja“ ) ≥ ½, falls die korrekte Antwort „ja“ ist • Wahr( A(w) = „nein“ ) = 1, falls die korrekte Antwort „nein“ ist ... durch eine wiederholte Anwendung des Algorithmus kann, die Wahrscheinlichkeit dafür, daß der Algorithmus fälschlicherweise das Ergebnis „ja“ liefert, „beliebig“ klein gemacht werden 16/28