Probabilistische Algorithmen, Wahrscheinlichkeitsverstärkung und Recycling von Zufallszahlen nach Uwe Schöning, Perlen der Theoretischen Informatik Schriftliche Ausarbeitung im Rahmen des Hauptseminares Informatik, ZAIK Arbeitsgruppe Faigle/Schrader im WS 2008/2009 Erstellt von Andreas Palm (Prüfungsnr. 80531, Matrikelnummer 4328663) Algorithmen werden meist an deren Laufzeit oder Speicherbedarf gemessen, da diese beiden Ressourcen ganz offensichtlich begrenzt sind. Es gibt jedoch weitere Ressourcen die beschränkt sind, so zum Beispiel Zufallszahlen. Auf den meisten Systemen stehen diese nur in begrenzter Anzahl pro Zeiteinheit zur Verfügung. Daher sollten Zufallszahlen ebenfalls sparsam verwendet werden. Wie man die Nutzung von Zufallszahlen len einschränken kann und wie sich das hier vorgestellte Verfahren auf die Fehlerwahrscheinlichkeit auswirkt, auswirkt werde ich im Folgenden erläutern. Probabilistische Algorithmen Das Ergebnis von probabilistischen Algorithmen ist vom Zufall abhängig. Diese AlgoAlgo rithmen benötigen daher stochastisch unabhängige und gleichverteilte Zufallszahlen, wobei die Menge von der Fehlerwahrscheinlichkeit abhängt. Übertragen auf das Turingmaschinenmodell maschinenmodell hat jede Konfiguration also mehrere NachfolgekonfiguratioNachfolge nen die mit gleicher Wahrscheinlichkeit angenommen werden. Bei einer Eingabe wird die Entscheidung des Algorithmus zu einer Zufallsvariablen. Es sind die beiden Entscheidungen „akzeptiere“ und „verwerfe“ bzw. 1 und 0 möglich, die jedoch vom Zufall beeinflusst sst werden. Daher definieren wir: Ein Ei Wort gilt als akzeptiert, wenn der prob. Algorithmus mit einer Schwellenwert-Wahrscheinlichkeit Wahrscheinlichkeit größer als die Entscheidung „akzeptiere“ bzw. 1 ausgibt. Anstatt kann auch jeder andere Wert 0,1 festgelegt werden. erden. Zur Unterscheidung verschiedener probabilistischer Algorithmen definieren wir: Eine Sprache liegt in der Komplexitätsklasse (probabilistic polynomial time), falls es einen polynomial zeitbeschränkten probabilistischen Algorithmus gibt und einen Schwellenwert , so dass gerade aus allen akzeptierten Wörtern besteht. Eine speziellere Art von Algorithmen sind solche mit einer einer Wahrscheinlichkeitslücke. Sie akzeptieren mit einer Wahrscheinlichkeit für und mit WahrscheinWahrschein lichkeit für .. Zwischen den beiden Grenzwerten besteht also eine Lücke . Wir definieren: Eine Sprache liegt in der Klasse (bounded-error (bounded probabilistic bilistic polynomial time), falls es einen ei polynomial zeitbeschränkten probapro bilistischen Algorithmus gibt, einen Schwellenwert und eine Wahrscheinlichkeitslücke , so dass der Algorithmus die oben formulierte Bedingung erfüllt (d.h. für kein Eingabewort liegt die AkzeptierwahrAk scheinlichkeit im Bereich , ) und so dass gerade aus allen (im obigen Sinne) akzeptierten Wörtern besteht. Einen solchen Algorithmus nennen wir -Algorithmus. Für einen Sonderfall aus definieren wir: Eine Sprache liegt in der Klasse (random polynomial),, falls es einen -Algorithmus Algorithmus gibt, wobei für die zugehörigen Konstanten und gilt: 2. Ein -Algorithmus Algorithmus akzeptiert ein Wort der Sprache also mit gleicher WahrWahr scheinlichkeit wie ein -Algorithmus, Algorithmus, der -Algorithmus Algorithmus wird ein Wort , das nicht in der Sprache liegt, aber mit Wahrscheinlichkeit 0 akzeptieren. Diese Situation entspricht einer nichtdeterministischen Maschine. Es folgt: und " und . Bisher haben wir in erster Linie die Akzeptier-Situation Akzeptier betrachtet. Wenn wir gleiche Bedingungen an das Verwerfen bei stellen, so erhalten wir eine Komplexitätsklasse mit Fehlerwahrscheinlichkeit 0. Wir definieren: Eine Sprache liegt in der Klasse (zero error probabilistic polynomial time) genau dann, wenn und gilt. (Mit anderen Worten -). Wahrscheinlichkeitsverstärkung Das Ziel der Wahrscheinlichkeitsverstärkung ist es einen Algorithmus mit nur polynomialem Zeitaufwand so umzuformen, dass Wörter der Sprache „fast immer“ und andere Wörter „fast nie“ akzeptiert werden. Anders gesagt möchten wir die Fehlerwahr wahrscheinlichkeit verringern. Betrachten wir zunächst einen -Algorithmus: Algorithmus: Gibt der Algorithmus „akzeptieren“ aus, so können wir sicher sein, dass die Aussage korrekt ist. Bei der Aussage „verwerfe“ ist eine Fehlerwahrscheinlichkeit größer 0 vorhanden. Führen wir den Algorithmus nun mehrfach hintereinander aus, so lautet das Gesamtergebnis „akzeptiere“ wenn mindestens ein Einzelergebnis „akzeptiere“ lautet. Das GesamtGesamt ergebnis lautet somit nur dann „verwerfe“, wenn alle Einzelergebnisse „verwerfe“ „verw lauten. Die Wahrscheinlichkeitslücke hat sich somit vergrößert. Die Wahrscheinlichkeit, dass der Algorithmus nicht „akzeptiere“ ausgibt, obwohl die Eingabe in der Sprache liegt, liegt beträgt 1 . Nach Ausführungen beträgt die WahrWahr % '( scheinlichkeit also nur noch #1 $ . Um eine Fehlerwahrscheinlichkeit von 2 zu erreichen können wir wie folgt berechnen: #1 $% & 2'( ) '( *+,-#'$ Ω . /. ( Im Fall eines -Algorithmus Algorithmus ist die Wahrscheinlichkeitsverstärkung etwas komplizierter. Bei einem BPP-Algorithmus BPP Algorithmus muss beiden Aussagen misstraut werden. Wir haben kein sicheres Kriterium für oder ,, können aber bei mehrfacher Wiederholung des Algorithmus eine Häufung eines der beiden Ergebnisse beobachten. Dies ist vergleichbar mit einem Bernoulli-Experiment: Bernoulli Experiment: Ein ZufallsexZu periment wird -mal wiederholt. Es hat eine Erfolgswahrscheinlichkeit von 0 (mit 0 für und 0 für ). Die Fehlerwahrscheinlichkeit ist somit 9% 1 2 4 ⋅ 6 7 ∙ #1 6$%'7 3 7:; wobei 6 . Um erneut eine Fehlerwahrscheinlichkeit von 2'( zu erhalten erhalten wir (mit Hilfe der Schranke von Chernoff) . - / ∙ =. < Für beide Klassen, und , ergibt sich somit ein linearer Zusammenhang zwischen und =, wenn wir eine exponential-kleine Fehlerschranke wählen. Recycling von Zufallszahlen Wenn wir nun davon ausgehen, dass wir einen probabilistischen Algorithmus >#?$mal ausführen müssen um eine Fehlerwahrscheinlichkeit von 2'Ω#@$ zu erhalten, so werden >#A?$ Zufallsbits benötigt, unter der Annahme, dass der Algorithmus A Zufallsbits benötigt. Unser offensichtliches Ziel ist es, diese Anzahl zu reduzieren indem wir bereits verwendete Zufallszahlen so „recyclen“, dass sie erneut verwendet werden können. Für den Recyclingvorgang verwenden wir universelles Hashing. Aus einer Klasse B von Hashfunktionen wählen wir zufällig eine Funktion ℎ, die A verbrauchte Zufallsbits zu D A Bits macht. Die D neuen Bits werden dann mit A D „echten“ Zufallsbits wieder auf A Bits ergänzt. Dieser Vorgang kann iteriert werden. Diese neue Folge von A Zufallsbits bezeichnen wir im Folgenden als „Pseudozufallszahlen“. Als Klasse von Hashfunktionen wählen wir die Menge an Hashfunktionen ℎ mit Parameter E, F 0, 0 1. Dabei sei 0 eine Primzahl 2G mit Bitlänge >#A$. Die Hashfunktion ℎH,I,J #$ laute dann #E F$ KL 0. Wir benötigen jedoch nur D Bits, weshalb wir die Hashfunktion erweitern zu M#E F$ KL 0N KL 2O . Dies hat jedoch zur Folge, dass die Klasse B ihre Gleichverteilung verliert und nicht mehr universal ist, wir können jedoch zeigen, dass B „fast universal“ ist: Eine Klasse B von Hashfunktionen von P0,1QG nach P0,1QO heißt fast universal, falls für alle , R P0,1QG mit ≠ R gilt: Prℎ#$ ℎ#R$ & V W . Für unseren Fall können wir zeigen: Prℎ#$ ℎ#R$ 1 Prℎ#$ X ∧ ℎ#R$ X ZP;,QV 1 0 1 1 Pr#E F$ KL 0 [ ∧ #ER F$ KL 0 [\ & 0 ∙ O ∙ 2 0 ^ ];,H' ] &. 0 1 1 1 1 1 1/ ∙ O & O G O 2 0 2 0 2 2 Definition: Seien _,_′ Wahrscheinlichkeitsverteilung auf einer endlichen Menge a. Wir sagen, _ und _′ sind sich ähnlich bis auf eine Schranke , falls für jede Teilmenge b a gilt: |_#b$ _\ #b$| & . Somit ist eine Verteilung _ fast gleichverteilt, wenn _ einer Gleichverteilung ähnlich ist und es bleibt zu zeigen, dass wir mit B eine solche Ähnlichkeit erreichen können. Dabei hilft uns das „Leftover Hash Lemma“: Sei b eine beliebige Teilmenge von P0,1QG mit |b| 2d . Sei B eine fast universale Klasse von Hashfunktionen von P0,1QG nach P0,1QO . Es gelte A e > D und es sei g #e D$ ∕ 2. Dann ist die Verteilung von Mℎ, ℎ#$N fast gleichverteilt ( auf der Menge B × P0,1QO ) bis auf die Schranke 1 ∕ 2j . Das Lemma lässt sich gut in zwei Teilen beweisen: 1. Die Kollisionswahrscheinlichkeit ist AkMℎ , ℎ # $N Mℎ , ℎ # $Nl. Dies ist gleich |m| ⋅ Aℎ# $ ℎ# $ und lässt sich anhand der Definitionen nach oben hin wie folgt abschätzen: |m| ⋅ .V W n/ & .1 o/ ⋅ |m|V . 2. Indirekter Beweis der Aussage: Sei _ eine Verteilung auf einer endlichen Menge a. Wenn die Kollisionswahrscheinlichkeit von _ höchstens #1 2p $/|a| ist, dann ist _ fast gleichverteilt auf a mit Schranke p. Angenommen, _ ist nicht fast gleichverteilt mit Schranke p. Dann gibt es nach Definition eine Teilmenge r von a mit s_#r$ Sei nun v > p, so dass _#r$ |t| |u| |t| |u| s > p. v. Bei zufälliger und unabhängiger Wahl von L , L ist die Wahrscheinlichkeit für L L mindestens |t| für L , L r und mindestens |u|'|t| für L , L r. Damit ist die Kollisionswahrscheinlichkeit mindestens w#t$|t| #'w#t$$|u|'|t| |u| |t| |u|'|t| mit einem Minimum für |r| x- x- was einen Widerspruch zur Voraussetzung ergibt, da durch v > p gilt: yzx |u| > yz{ . |u| |u| , Betrachten wir nun das Verhalten eines -Algorithmus | unter Verwendung unserer „Pseudozufallszahlen“, die wir im Folgenden mit , , … , @ bezeichnen. Sei F# $F# $ … F#@ $ die Bitfolge, die wir erhalten, wenn wir den Algorithmus ?-mal ausführen und sei F#7 $ ~ 1, | Fg3 [EeeDXEℎe 7 E?Xg0 3gA . 0, | Fg3 [EeeDXEℎe 7 gA3A | habe eine Fehlerwahrscheinlichkeit zwischen und . Es gilt also: z 2 3 & Pr|#$ 1 & 4 ⇒ 3 1 1 & Pr|#$ 0 & 4 3 1 1 & Pr|#$ 1 & 3 ⇒ 4 2 3 & Pr|#$ 0 & 3 4 Würden wir für den Algorithmus immer neue Zufallszahlen verwenden, so erhielten wir eine Ausgabe F F … F@ . Es gilt also zu zeigen, dass sich die Verteilung der F#7 $ der der F7 bis auf eine Schranke ähneln. Wir beweisen per Induktion: Für alle 3 0 ähnelt die Verteilung von F# $ … F#7 $ℎ7y der Verteilung (bis auf eine Schranke ), die wir erhalten, wenn wir die ersten 3 Bits unabhängig voneinander mit Wahrscheinlichkeit 0 als 1 und mit Wahrscheinlichkeit 1 0 als 0 wählen; ℎ wird unter Gleichverteilung aus B gezogen, dann folgt ein Zufallswort, das unter Gleichverteilung aus P0,1QG gezogen wird. 30 Wir müssen nur die Verteilung von ℎ betrachten. Die Schranke ; 0, da wir es in diesem Fall mit echter Gleichverteilung zu tun haben. 31 Um zu zeigen, dass F# $ℎ einer in der Behauptung beschriebenen Verteilung bis auf eine Schranke ähnlich ist, reicht es auch zu zeigen, dass F# $ℎℎ# $ einer Verteilung ähnelt, bei der das erste Bit gemäß der #0, 1 0$-Verteilung gezogen wird, ℎ zufällig aus B und die letzten D Bits zufällig aus P0,1QO . Weil zufällig ist, ist F# $ gemäß #0, 1 0$ verteilt. Wir müssen also zeigen, dass ℎℎ# $ annähernd (auf B × P0,1QO ) gleichverteilt ist. Für stehen uns noch 0 ∙ 2G bzw. #1 0$ ∙ 2G , also mindestens 2G /4 viele Wahlmöglichkeiten zur Verfügung. Das Leftover Hash Lemma ist gültig, wenn wir e A 2 setzen und nennt uns als Schranke 3>1 2'j 2'#d'O$/ 2'#G'O'$/ Es gelte die Behauptung für 3 1, das heißt, die Verteilung von F# $ … F#7' $ℎ ähnelt einer korrekten Verteilung bis auf eine Schranke 7' . Zu zeigen ist, dass die Verteilung von F# $ … F#7 $ℎ7y der korrekten Darstellung F … F7 ℎX ähnelt. Wieder genügt es zu zeigen, dass F# $ … F#7 $ℎℎ#7 $ der Verteilung von F … F7 ℎ ähnelt, wobei die F unabhängig #0, 1 0$ verteilt sind, ℎ gleichverteilt aus B und gleichverteilt aus P0,1QO gezogen wird. Seien ,,B Zufallsvariablen, so dass die Verteilungen und sich bis auf eine Schranke p ähneln. beschreibe eine Transformation, so dass #$ und B sich bis auf die Schranke p ähneln. Betrachten wir nun die Ähnlichkeit zwischen B und #$: |Pr #$ b Pr B b| & |Pr #$ b Pr #$ b| |Pr #$ b Pr B b| & |Pr #$ b Pr #$ b| p & |Pr ' #b$ Pr ' #b$| p & p p B und #$ sind sich also bis auf die Schranke p p ähnlich. F# $ … F#7' $ℎ7 Setzen wir nun: F … F7' ℎX B F … F7' F7 ℎ und definieren die Transformation durch: #F … F7' ℎX$ F … F7' F#X$ℎℎ#X$. Dann ergibt sich: #$ F … F7' F#$ℎℎ#$ und #$ F# $ … F#7' $F#7 $ℎℎ#7 $. und sind sich nach Induktionsvoraussetzung bis auf die Schranke 7' ähnlich. Aus dem Fall 3 1 wissen wir auch, dass sich #$ und B bis auf die Schranke ähnlich sind und es folgt somit, dass sich #$ und B bis auf die Schranke 7 7' 3 ähneln. Für 3 ? folgt also, dass die Verteilung von F# $ … F#@ $ einer korrekten #0, 1 0$Verteilung bis auf die Schranke ? ?/2#G'O'$/ ähnlich ist. Wenn wir nun D A 2? 2 festlegen, so erhalten wir als Schranke 2'Ω#@$ , was gut genug ist um die @ Fehlerwahrscheinlichkeit von 2'Ω#@$ zu erhalten. Dies lässt sich leicht wie folgt zeigen: Sei eine korrekte #0, 1 0$-Verteilung und _ eine Verteilung die ähnlich ist bis auf die Schranke . Sei b die Menge der 0-1-Folgen der Länge ? mit nicht mehr als ?/2 vielen Einsen in der Folge. Dann können wir abschätzen: Aw #b$ & A #b$ ∑7:;M@7N07 #1 0$@'7 & 2'Ω#@$ ⇒ 2'Ω#@$ . @/ Betrachten wir als Letztes, wie viele Zufallszahlen wir mit diesem Verfahren benötigen, wenn wir den Algorithmus ?-mal durchführen möchten. Wir erinnern uns, dass wir ohne Recycling >#A?$ viele Zufallsbits benötigten. Zu Beginn benötigen wir A viele Zufallsbits als Ausgangsbasis. Außerdem benötigen wir für jede weitere Ausführung A D neue Zufallsbits und müssen ℎ zufällig aus B auswählen. Die Primzahl 0 zur Bildung der Hashfunktionen ℎH,I,J hat eine Bitlänge von >#A$, so dass wir zur Auswahl von h >#A$ viele Zufallsbits benötigen. Es ergibt sich also: A #A D$#? 1$ >#A$. Soeben haben wir festgelegt, dass A D >#?$ gilt und benötigen somit insgesamt >#A ? $ viele Zufallsbits, was eine deutliche Verbesserung darstellt.