Randomisierte Algorithmen Kapitel 2: Erste Beispiele Überblick Ein randomisierter Identitätstest Vergleich von Wörtern Ein randomisierter Quicksortalgorithmus Überblick Ein randomisierter Identitätstest Vergleich von Wörtern Ein randomisierter Quicksortalgorithmus 2.1 Aufgabe I I Gegeben: drei n × n Matrizen A, B, C ∈ Fn×n . Gesucht: Antwort auf die Frage, ob AB = C ist. F: Körper mit neutralen Elementen 0 resp. 1, Bits genannt. 2.2 Einfache deterministische Lösung I I Ausmultiplizieren bester bekannter Multiplikationsalgorithmus von Coppersmith und Winograd: 2.2 Einfache deterministische Lösung I I Ausmultiplizieren bester bekannter Multiplikationsalgorithmus von Coppersmith und Winograd: Θ(n2.376... ) Schritte 2.3 Randomisierter Algorithmus (Freivalds, 1977) 2.3 Randomisierter Algorithmus (Freivalds, 1977) hMit einem Bit“ ist einer der Werte 0 oder 1 gemeint.i ” r ← hVektor von n unabhängigen Zufallsbitsi x ← Br y ← Ax z ← Cr if (y 6= z) then return no else return yes fi Offensichtlicher Zeitbedarf O(n2 ). 2.4 Fingerabdrücke I I y = A(Br) Fingerabdruck von AB. z = Cr Fingerabdruck von C 2.5 Lemma Ist AB 6= C und r ein Vektor unabhängiger Zufallsbits, dann ist die Fehlerwahrscheinlichkeit des Algorithmus Pr [ABr = Cr] ≤ 1/2 . 2.6 Beweis I I I I I I Sei D = AB − C, also D 6= 0. Sei y = ABr und z = Cr. Dann gilt y = z genau dann, wenn Dr = 0. Sei d die erste Zeile von D. O.B.d.A. sei d = (d1 , . . . , dn ) nicht der Nullvektor und die Nichtnulleinträge von d seien gerade d1 , . . . , dk . Erster Eintrag im Produktvektor Dr ist dr. Untere Schranke für Wahrscheinlichkeit, dass dr 6= 0, ist auch untere Schranke für Wahrscheinlichkeit, dass Dr 6= 0. Suche obere Schranke für die Wahrscheinlichkeit, dass dr = 0. 2.6 Beweis (Fortsetzung) I dr = 0 genau dann, wenn genau dann, wenn Pk rk = (− i=1 k−1 X di ri = 0, also di ri )/dk i=1 I I I Man stelle sich vor, r1 , . . . , rk−1 seien bereits gewählt. Gleichung offensichtlich für höchstens einen der beiden möglichen Werte für rk richtig. Also ist diese Wahrscheinlichkeit höchstens 1/2. Mit Wahrscheinlichkeit größer gleich 1/2 ist also dr 6= 0 und damit auch Dr 6= 0. 2.7 Korollar I I Wenn AB = C ist, liefert Algorithmus 2.3 stets die richtige Antwort. Wenn AB 6= C ist, liefert Algorithmus 2.3 mit einer Wahrscheinlichkeit größer gleich 1/2 die richtige Antwort. 2.8 Wie kann man die Fehlerwahrscheinlichkeit verkleinern? I I Ziehe — wenn möglich — die Komponenten des Zufallsvektors aus einer größeren Menge. Führe k unabhängige Wiederholung des Algorithmus durch und produziere nur dann am Ende die Antwort yes, wenn jeder Einzelversuch diese Antwort geliefert hat. Pr [Y1 = yes Q ∧ Y2 = yes ∧ · · · ∧ Yk = yes] = ki=1 Pr [Yi = yes] Überblick Ein randomisierter Identitätstest Vergleich von Wörtern Ein randomisierter Quicksortalgorithmus 2.9 Aufgabe I I I I I Gegeben: Zwei Datenbestände“ in Form von Bitfolgen ” a1 · · · an und b1 · · · bn . Gesucht: Antwort auf die Frage, ob die beiden Bitfolgen gleich sind. Anwendung: Vergleich räumlich weit entfernter großer Datenmengen P P Sind a = ni=1 ai 2i−1 und b = ni=1 bi 2i−1 gleich? Wieviele Bits muss man wohl übertragen, um mit Wahrscheinlichkeit 1 − 1/n sicher sein zu können, dass a = b ist? 2.11 Algorithmus hÜberprüfung, ob Bitfolgen a1 · · · an und b1 · · · bn gleich sindi p ← hPrimzahl kleiner oder gleich n2 ln n2 i hzufällig gleichverteilt aus diesen ausgewählti P a ← Pni=1 ai 2i−1 b ← ni=1 bi 2i−1 if (a mod p = b mod p) then return yes else return no fi 2.12 Satz Bei zufälliger gleichverteilter Wahl einer Primzahl p kleiner oder gleich n2 log n2 ist 1 Pr [Fp (a) = Fp (b) | a 6= b] ∈ O . n 2.13 Satz (Chebyshev) Für die Anzahl π(n) der Primzahlen kleiner oder gleich n gilt: 7 n 9 n ≤ π(n) ≤ 8 ln n 8 ln n Es ist also π(n) ∈ Θ(n/ ln n). 2.14 Lemma Die Anzahl k verschiedener Primteiler einer Zahl kleiner oder gleich 2n ist höchstens n. 2.15 Beweis (von Satz 2.12) I I I I I I Algorithmus 2.11 liefert genau dann eine falsche Antwort, wenn c 6= 0 ist und von p geteilt wird. Da c ≤ 2n ist, hat es nach dem vorangegangenen Lemma höchstens n verschiedene Primteiler. Es sei t die obere Schranke des Intervalls, aus dem Primzahl gewählt wird. Nach Satz 2.13 gibt es dort π(t) ∈ Θ(t/ ln t) Primzahlen. Die Wahrscheinlichkeit Pr [Fp (a) = Fp (b) | a 6= b], ein p zu wählen, das falschen Antwort führt, ist also zu einer n höchstens O t/ ln t . Für t = n2 ln n2 ergibt sich eine obere Schranke in O(1/n). 2.16 Pattern Matching I I I Gegeben: Text x = x1 · · · xn und kürzeres Suchmuster y = y1 · · · ym . Gesucht: Antwort auf die Frage, ob y in x vorkommt. Bezeichne x(j) das Teilwort xj · · · xj+m−1 (Länge m). Frage: Ist für ein 1 ≤ j ≤ n − m + 1 das zugehörige x(j) = y ? 2.17 Idee x(j + 1) = m X xj+1+i−1 2i−1 i=1 m−1 1 1X = xj+1+i−1 2i + xj+1+m−1 2m−1 (xj − xj ) + 2 2 i=1 ! m−1 1 X = xj+i 2i − xj + xj+m 2m−1 2 i=0 ! m 1 X = xj+i−1 2i−1 − xj + xj+m 2m−1 2 i=1 = 1 (x(j) − xj ) + xj+m 2m−1 . 2 2.18 Algorithmus hÜberprüfung, ob Bitfolge y1 · · · ym in x1 · · · xn vorkommti hAusgabe: erstes j, wo das der Fall ist, oder −1 sonst.i p ← hPrimzahl kleiner oder gleich n2 m ln n2 mi hzufällig gleichverteilt aus diesen ausgewählt.i P i−1 y ← Pm y 2 mod p i=1 i m i−1 z ← i=1 xi 2 mod p for j ← 1 to n − m do if (y = z) then return j herste Stelle, an der Übereinstimmung“i ” fi z ← (z − xj )/2 + xj+m 2m−1 mod p od return −1 hy kommt sicher nicht in x vor i 2.19 Satz Algorithmus 2.18 liefert höchstens mit Wahrscheinlichkeit O(1/n) eine falsche Antwort. 2.20 Beweis I I I Sei wieder t die obere Schranke des Intervalls, aus dem Primzahlen gewählt werden. Nach Satz 2.13 gibt es dort π(t) ∈ Θ(t/ ln t) Primzahlen. Wahrscheinlichkeit Pr[Fp (y ) = Fp (x(j)) | y 6= x(j)], ist höchstens O I I I m t/ ln t , da |y − x(j)| höchstens m verschiedene Primteiler besitzt. Die Wahrscheinlichkeit für falsche Antwort, weil an irgendeiner der O(n) Stellen der Test versagt, ist höchstens O t/nm . ln t Wählt man t = n2 m ln n2 m, ergibt sich eine obere Schranke in O(1/n). Überblick Ein randomisierter Identitätstest Vergleich von Wörtern Ein randomisierter Quicksortalgorithmus 2.21 Annahme Alle Eingaben seien paarweise verschieden. Übung: Was tun, wenn mehrere Elemente mit gleichem Sortierschlüssel auftreten? (Und zwar sogar so, dass die relative Reihenfolge solcher Elemente erhalten bleibt!) 2.22 Algorithmus proc R[1 . . . n] ← RandQuickSort(S[1 : n]) hEingabe: ein Feld S[1 : n] paarweise verschiedener Zahleni hAusgabe: ein Feld R[1 : n] die Zahlen aus S sortierti hZwischenablage in Feldern S1 und S2 i i ← random(1, n) hgleichverteilt Zahl aus [1 . . . n]i y ← S[i] j1 ← 1; j2 ← 1; for i ← 1 to n do if S[i] < y then S1 [j1 ] ← S[i]; j1 ← j1 + 1 fi if S[i] > y then S2 [j2 ] ← S[i]; j2 ← j2 + 1 fi od return RandQuickSort(S1 [1 : j1 −1])·y ·RandQuickSort(S2 [1 : j2 −1]) 2.23 Eigenschaften I I Algorithmus 2.22 liefert immer die korrekte Ausgabe Auswahl der y hat Einfluß auf die Laufzeit (selbst bei festgehaltener Eingabefolge). I I I Wird immer der kleinste Wert als Pivotelement gewählt, so ergibt sich eine quadratische Laufzeit. Wird immer der Median gewählt, ist die Laufzeit Θ(n log n). Die Laufzeit dieses Algorithmus ist also eine Zufallsvariable. 2.24 Notation I I I I Nun soll der Erwartungswert der Laufzeit bestimmt werden. Xij : Zufallsvariable Xij = 1, falls R[i] und R[j] miteinander verglichen werden Xij = 0, falls nicht Beachte: Indizes in der Resultatliste Gesuchter Erwartungswert ist gleich " n # n X XX X Xij = E [Xij ] E i=1 j>i I I i=1 j>i pij : Wahrscheinlichkeit für Vergleich von R[i] und R[j], also E [Xij ] = 1 · pij + 0 · (1 − pij ) = pij . Die pij sind nicht alle gleich! (Indizierung in R!) 2.26 Satz Der Erwartungswert der Laufzeit von RandQuickSort für Eingaben der Länge n ist in O(n log n). 2.27 Beweis (1) I I Seien i und j (1 ≤ i < j ≤ n) beliebig aber fest. Betrachte binäre Bäume mit den zu sortierenden Zahlen als Knoten, die durch je eine Ausführung von RandQuickSort wie folgt rekursiv festgelegt sind: I I I Die Wurzel des Baumes ist das zufällig gewählte Pivotelement y . Der linke Teilbaum ergibt sich rekursiv nach der gleichen Regel gemäß der Ausführung beim Aufruf RandQuickSort(S1 [1 : j1 − 1]) und analog der rechte gemäß der Ausführung beim Aufruf RandQuickSort(S2 [1 : j2 − 1]). 2.27 Beweis (2) Es gilt: (V) Zwei Elemente werden genau dann miteinander verglichen, wenn das eine (direkter oder indirekter) Vorgänger des anderen ist, also das andere im linken oder rechten Unterbaum des einen ist. Bei einem In-Order-Durchlauf des Baumes ergäbe sich die sortierte Reihenfolge der Werte. 2.27 Beweis (3) I I I Interessante Reihenfolge: Beginne bei der Wurzel, besuche nacheinander absteigend auf jedem Niveau jeweils von links nach rechts alle Knoten. Irgendwann wird zu ersten Mal ein Element R[k] angetroffen, für das i ≤ k ≤ j ist. Zeige: 1. R[i] und R[j] werden genau dann miteinander verglichen, wenn k tatsächlich i oder j ist. 2. Jedes der Elemente R[i], . . . , R[j] ist gleichwahrscheinlich das erste in der gewählten Besuchsreihenfolge und es sind j − i + 1 Elemente. I Da in genau 2 Fällen (k ∈ {i, j}) R[i] und R[j] miteinander verglichen werden, ist pij = 2/(j − i + 1). 2.27 Beweis (4a) zu 1. Beachte: Alle Elemente R[i], . . . , R[j] befinden sich in dem Teilbaum mit R[k] als Wurzel. zu 2. Läge ein Element R[m], i ≤ m ≤ j außerhalb des Teilbaumes, dann gölte nämlich für den spätesten gemeinsamen Vorgänger x: R[m] < x < R[k] oder R[k] < x < R[m], je nachdem, ob R[m] links ” außerhalb“ oder rechts außerhalb“ liegt. ” zu 3. Es wäre also auch x aus dem Bereich R[i], . . . , R[j] und käme in der Besuchsreihenfolge vor R[k] (da es ja ein Vorgänger ist) im Widerspruch zur Festlegung von R[k]. 2.27 Beweis (4b) 1. (Fortsetzung) 1.1 Es sei nun k ∈ {i, j}, etwa k = i. Dann liegt R[j] in einem Unterbaum von R[i], also werden die beiden wegen der Überlegung (V) miteinander verglichen. 1.2 Es sei k ∈ / {i, j}. Da R[i] < R[k], liegt es im linken Unterbaum, und analog R[j] im rechten Unterbaum von R[k]. Wegen Überlegung (V) werden also R[i] und R[j] nicht miteinander verglichen. 2. Dieser Punkt sollte klar sein. 2.27 Beweis (5) Also: " E n X X # Xij = i=1 j>i n X X E [Xij ] i=1 j>i = n X n X n n−i+1 X X 2 2 = j −i +1 k j=i+1 i=1 k=2 i=1 n X n X ≤ 2 i=1 k=1 n-te harmonische Zahl: Hn = Pn 1 = 2nHn . k 1 k=1 k = ln n + Θ(1). 2.28 I I Manche randomisierten Algorithmen liefern immer die richtige Antwort. =⇒ Las Vegas Algorithmen (sofern . . . ) Manche randomisierten Algorithmen liefern manchmal eine falsche Antwort. =⇒ Monte Carlo Algorithmen Zusammenfassung 1. Randomisierte Algorithmen enthalten eine Zufallskomponente. 2. Das führt im Allgemeinen dazu, dass — bei festgehaltener Eingabe — z.B. die Laufzeit eine randomisierten Algorithmus eine Zufallsvariable ist. 3. Manche randomisierten Algorithmen liefern immer das richtige Ergebnis. 4. Manche randomisierten Algorithmen liefern unter Umständen ein falsches Ergebnis. Dann ist man im Allgemeinen an kleinen Fehlerwahrscheinlichkeiten interessiert.