Randomisierte Algorithmen

Werbung
Randomisierte Algorithmen
Vorwort
Diese Mitschrift wurde in der Vorlesung „randomisierte Algorithmen“ bei Univ-Prof. Herrn
Dietzfelbinger von Martin Aumüller angefertigt. Diese Vorlesung wurde im Wintersemester
2007/2008 an der TU Ilmenau gehalten. Diese Mitschrift gewährt keine Garantie für Korrektheit, für Verbesserungen oder Kritik stehe ich gern unter [email protected]
zur Verfügung.
3
Inhaltsverzeichnis
Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1 Einführung und Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1 Beispiel: Identität von Polynomprodukten
1.2 Beispiel: Min-Cut-Algorithmus . . . . . . .
1.2.1 Analyse des Min-Cut-Algorithmus . .
1.3 Verifikation von Matrixprodukten . . . . .
1.4 Randomisiertes Quicksort . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . 7
. . 9
. . 9
. 11
. 12
. .. .. ... .. .. .. .. .. .. ...
17
.. .. .. .. .. .. ... .. .. .. .. .. .. .. ... .. .. .. .. .. .. ...
17
3 Modellierung und Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.1 Modell, Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Typen von randomisierten Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
24
.. .. .. ... .. .. .. .. .. .. .. ... .. .. .. .. .. .. ...
25
2 Grundlagen der Wahrscheinlichkeitsrechnung
2.1 Grundbegriffe
4 Randomisierte Suche
4.1 Suche mit wenigen Zufallsbits . . . . .
4.1.1 Zweifach unabhängige Suche . .
4.2 Suche in angeordneten linearen Listen
4.3 Mediansuche bzw. „k-Selection“ . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
28
29
.. .. .. ...
33
.
.
.
.
.
.
.
.
.
.
33
33
36
36
38
6 Algebraische Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
6.1
6.2
6.3
6.4
41
41
42
43
5 Randomisierte Algorithmen für Probleme aus der Zahlentheorie
5.1 Fakten aus der Zahlentheorie . . . . . . . . .
5.2 Quadratwurzel mod p, Quadratwurzelziehen
5.3 Der Miller-Rabin-Primzahltest . . . . . . . .
5.3.1 Der Fermat-Test . . . . . . . . . . . . . .
5.3.2 Nichttriviale Quadratwurzeln der 1 . .
Der Satz von Schwartz-Zippel . .
Identität von Polynomen . . . . .
Polynomdeterminanten . . . . . .
Perfekte Matchings auf bipartiten
..
.
..
..
..
.
.
.
.
.
... .. .. .. .
... .. .. .. .
... .. .. .. .
Graphen . . .
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Kapitel 1
Einführung und Beispiele
Essentiell für randomisierte Algorithmen sind Zufallszahlengeneratoren. Dabei liefert der Aufruf
von RAND-NUM(k) eine Zufallszahl im Intervall {0, 1, , k − 1}. Wichtig dabei ist, dass es sich
nur um Pseudo-Zufallszahlen handelt. Dabei wird ein zufälliger Startwert(„seed “) genutzt und
dann deterministisch die „Zufallszahl“ bestimmt. Dies soll aber nicht Thema dieser Vorlesung
sein.
Definition 1.1. (Randomisierter Algorithmus)
Idealisierend kann man sagen: Ein Algorithmus/Programm führt echte Zufallsexperimente
durch (z.B. das Werfen einer Münze mit dem Resultat 0/1 bzw. Werfen eines k-seitigen Würfels). Eine Eingabe x bestimmt den Rechenweg und/oder das Ergebnis resA(x) (entspricht einer
Struktur) nicht mehr eindeutig. Die Rechenzeit (bzw. Schrittzahl) ist eine Zufallsvariable
tA(x), dabei kann man den Erwartungswert E(tA(x)) bestimmen.
Wozu benötigt man randomisierte Algorithmen, wenn die Ergebnisse schwanken und nicht
eindeutig festgelegt werden können?
An vielen Beispielen sieht man, dass viele Probleme z.Z. nicht mit deterministischen Algorithmen effizient gelöst werden können. Man erhofft sich von randomisierten Algorithmen einen
Effizienzgewinn in Bezug auf Zeit, Platz und z.B. Approximationsgüte. Weiterhin spielt es
eine wichtige Rolle, um worst-case-Inputs zu vermeiden.
Beispiel 1.2. (randomisiertes Quicksort)
Für alle Inputs x ist E(tA(x)) = O(n log n). Dies steht im Kontrast zu „normalem“ Quicksort,
bei dem es Inputs gibt mit Laufzeit Ω(n2) verursachen.
1.1 Beispiel: Identität von Polynomprodukten
Frage: Ist (x4 + 4 x3 + 6 x2 + 4 x + 1)(x4 − 4 x3 + 6 x2 − 4 x + 1) = (x2 − 1)4?
Allgemein:
•
•
Input: f1(x), , fs(x), g1(x), , gt(x)
Frage: Ist f1(x) · · fs(x) = g1(x) · · gt(x)
Der naive Ansatz ist logischerweise beiden Seiten auszumultiplizieren und danach zu vergleichen.
Dafür ist jedoch der Aufwand von Interesse. Wir definieren:
deg(a0 + a1 x + + an xn) = n für an 0
Wenn wir f1(x) · f2(x) berechnen wollen mit Graden d1 bzw. d2 erreichen wir einen Aufwand
von O(d1 · d2). Wenn wir nun
d f 4 d(f1(x) + + d(fs(x)))
betrachten, sind die Kosten für das Ausmultiplizieren nun O(d2f ) bzw. O(d2g) für die Polynome
g1(x), , gt(x). Wie können wir diesen quadratischen Aufwand verbessern?
Wir definieren:
h(x) 4 f (x) − g(x)
7
8
Einführung und Beispiele
Klar ist, dass
f (x) ≡ g(x) ⇔ h(x) ≡ 0 (Nullpolynom)
Außerdem gilt:
h(x) ≡ 0 ⇒ h(a) = 0 ⇒ f (a) = g(a)∀a ∈ R oder a ∈ N
und
deg(h(x)) ≤ max {d g , d f } = : dh
Wenn wir es nicht mit dem Nullpolynom zu tun haben, d.h. h(x) 0, dann ist
|{a ∈ R|h(a) = 0}| ≤ deg(h(x)) ≤ dh
was äquivalent zu
|{a ∈ R|f (a) = g(a)}| = |{a ∈ R|f (a) = g(a)}|
ist.
Algorithmus 1.1.1
Input: f1(x), , fs(x), g1(x), , gt(x)
P
P
1. Berechne d f = 1≤i≤s d(fi(x)) und d g = 1≤i ≤t d(gi(x)) und dh = max {d f , d g }
•
2. Wähle zufällig eine Zahl a ∈ {0, 1, , 2 · dh − 1}.
3. Berechne f (a) = f1(a) · . · fs(a) und g(a) = g1(a) · · gt(a). Der Aufwand dafür ist O(dh)
Multiplikationen.
4. Ausgabe:
Resultat:
•
0 falls f (a) = g(a)
1 falls f (a) g(a)
nur einfache Berechnungen werden ausgeführt
•
schnelle Laufzeit: O(dh)
•
falls f (x) ≡ g(x), dann ist unsere Ausgabe immer 0 (a ist egal).
Wie verhält sich unser Algorithmus:
•
falls f (x) g(x), d.h. h(x) 0:
|{a ∈ R|a < 2 · dh , h(a) = 0}|
2 · dh
dh
≤
2 · dh
1
=
2
P („Ausgabe 0“) =
Dies ist nicht zufriedenstellend.
Ein Ausweg daraus ist, den Bereich größer zu wählen, z.B. {0, , z · dh − 1}. Das führt zu einer
1
Fehlerschranke von ≤ z . Besser ist dieser Ansatz:
1. for l = 1 to c do
a. b 4 Algo1.1.1(f1, , fs , g1, , gt)
b. if b = 1 then Ausgabe „nicht identisch“
2. Ausgabe „identisch“
Analyse:
•
•
Zeit: O(c · dh)
f (x) ≡ g(x) ⇒ Ausgabe „identisch“
9
1.2 Beispiel: Min-Cut-Algorithmus
•
f (x) g(x) ⇒
P (Ausgabe „identisch“) = c · P (b = 0)
1
1
· ·
=
2
2
c
1
= c
2
Wenn wir z.B. c = 100 wählen, besitzen wir schon eine Wahrscheinlichkeit für das richtige
Ergebnis von
1
1
< 30
100
2
10
Wenn wir nun den Aufwand der naiven Implementierung mit unserem randomisierten Algorithmes für dh = 10000 vergleichen, erhalten wir naiv etwa 108 Multiplikationen gegebenüber
100 · 104 = 106 Multiplikationen bei unserem randomisierten Algorithmus. Dies entspricht auf
einem PC idealisiert den Unterschied zwischen „in ein paar Sekunden berechnet“ zu „benötigt ein
paar Minuten“.
1.2 Beispiel: Min-Cut-Algorithmus
Gegeben sei ein ungerichteter Graph G = (V , E). O.B.d.A sei dieser zusammenhängend, sonst
müssten wir unsere Betrachtungen auf den Zusammenhangskomponenten durchführen. Ein
Schnitt in G sind C ⊆ E mit S ⊆ V und (x, y) ∈ C ⇒ x ∈ S , y S. Also ist (V , E − C) unzusammenhängend. Wir suchen einen Schnitt mit |C | = min {|C ′||C ′ ist Schnitt in G}, also ein Schnitt
mit der geringsten Anzahl von Kanten. Für den Algorithmus ist es von Bedeutung, dass wir
Schlingen (d.h. Kanten der Form e ∈ E und |e| = 1). Parallele Kanten bleiben im folgenden
bestehen.
Algorithmus 1.2.1
1. Wähle Kante e = (i, j) zufällig.
2. Verschmelze i, j zu einem Superknoten (d.h. wir führen eine Kontraktion der beiden
Knoten zu einem Knoten i ′ durch, der die Kanten zu anderen Knoten behält).
Dies wiederholen wir genau (n − 2)-mal. Danach sind nur noch 2 Superknoten vorhanden und
wir haben einen Schnitt gefunden, der V in S und V − S teilt. Die Ausgabe ist C = E ∩ (S ×
(V − S)).
Es lässt sich leicht feststellen, dass die gelieferten Ergebnisse nicht optimal sind, d.h. es
wird nicht garantiert der minimale Schnitt gefunden. Können wir aber abschätzen, wie nah
unsere gefundenen Schnitten an dem tatsächlichen minimalem Schnitt liegen?
1.2.1 Analyse des Min-Cut-Algorithmus
Definition 1.3.
mc(G): = min {|C ||C Schnitt in G} = : k
Sei c0 Schnitt in G mit |c0| = k, d.h. c0 ist ein gesuchter minimaler Schnitt. Folgende Fakten
sind leicht einzusehen:
•
•
(V ,E − c0) hat genau zwei Zusammenhangskomponenten. Gäbe es mehr als zwei Zusammenhangskomponenten, dann könnte man eine Kante aus c0 entfernen und die Zahl der
Komponenten sinkt um 1, ist aber immer noch > 2 ⇒ |c0| ist nicht minimal.
Falls G Mehrfachkanten besitzt. kann zwischen 2 über mehrere Kanten verbundene
Zusammenhangskomponenten nicht eine Kante im Schnitt liegen, weil man diese aus dem
Schnitt entfernen könnte und so |c0| minimieren könnte.
10
Einführung und Beispiele
Für einen optimalen Schnitt gilt als, dass durch den Schnitt in G zwei Zusammenhangskomponenten übrig bleiben und alle Kanten zwischen diesen beiden Komponenten sind im Schnitt.
Unser Wunsch für den Algorithmus wäre es, wenn er den Schnitt c0 finden würde. Dies ist äquivalent damit, dass unser Algorithmus nie zufällig eine Kante aus c0 wählt.
Wir definieren dafür ein Ereignis Ei = {in Runde i wird keine Kante aus c0 gewählt}. Dann
gilt:
Pr(Algorithmus gibt c0 aus) = Pr(E1 ∩ E2 ∩ ∩ En−2)
= Pr(E1) · Pr(E2|E1) · · Pr(En−2|E1 ∩ E2 ∩ ∩ En−3)
=Pr(E1 ∩E2)
Angenommen, es ist E1 ∩ E2 ∩ ∩ Ei−1 eingetreten, d.h. in Runde 1, , i − 1 wurde keine Kante
aus c0 gewählt. Können wir eine Abschätzung für
Pr(Ei |E1 ∩ E2 ∩ ∩ Ei−1) ≤ ?
finden, d.h. wie wahrscheinlich ist es, dass in Runde i eine Kante aus c0 gewählt wird.
Wir wissen, dass |c0| = k gilt, wieviele Kanten sind noch da? Dabei hilft uns eine wichtige
Beobachtung: Jeder Schnitt c in Gi−1 zerlegt auch G. Daraus können wir schlussfolgern,
dass folgendes gilt:
mc(Gi−1) ≥ k
und daraus folgt, dass deg(T ) ≥ k für jeden (Super-)Knoten T in Gi−1. Damit folgt, dass Gi−1
mindestens
k · (n − i + 1)
2
Kanten besitzt, denn Gi−1 hat n − (i − 1) Knoten. Nun können wir unsere Abschätzung vornehmen:
|c0|
Pr(Ei |E1 ∩ E2 ∩ ∩ Ei−1) ≤
k(n − i + 1)/2
k
=
k(n − i + 1)/2
2
=
(n − i + 1)
Damit können wir nun leicht bestimmen, wie groß die Wahrscheinlichkeit ist, dass in Runde i
eine Kante e gewählt wurde, die nicht in c0 liegt.
2
n−i+1
n−i−1
=
n−i+1
Pr(Ei |E1 ∩ E2 ∩ ∩ Ei−1) = 1 −
Damit gilt:
P (E1 ∩ E2 ∩ ∩ En−2) ≥
n−2 n−3 n−4 n−5
3 2 1
·
·
·
· · · ·
n
n−1 n−2 n−3
5 4 3
Wir sehen leicht, dass sich viele Terme untereinander kürzen lassen und wir die Abschätzung
vereinfachen können zu
2
P (E1 ∩ E2 ∩ ∩ En−2) =
n(n − 1)
2
> 2
n
Lemma 1.4.
Pr(Algorithmus gibt c0 aus) ≥
2
n2
Diese Wahrscheinlichkeit ist natürlich sehr gering. Können wir sie weiter verbessern?
11
1.3 Verifikation von Matrixprodukten
Algorithmus 1.2.2
Wiederhole Algorithmus 1.2.1 z-mal mit den Resultaten C1, , Cz. Wähle aus allen
Schnitten denjenigen mit der geringsten Kardinalität C ∗ aus. Gib C ∗ aus.
Auch diesen Algorithmus wollen wir noch kurz analysieren. Es gilt:
Pr(|C ∗| > mc(G)) ≤ Pr((C1 C0) ∧ (C2 C0) ∧ ∧ (Cz C0))
= Pr(C1 C0) · Pr(C2 C0) · · Pr(Cz C0))
z
2
≤ 1− 2
n
Mit z =
n2
2
erhalten wir die Wahrscheinlichkeit für die falsche Ausgabe durch:
Pr(|C ∗| > k) ≤
2
1− 2
n
≤ e−1
1
=
e
n2
2
und damit ist die Wahrscheinlichkeit
schon relativ hoch.
Bekanntermaßen gilt:
Pr(C ∗ ist minimaler Schnitt) ≥ 1 −
∀x ∈ R: 1 + x ≤ ex
und damit für y > 0:
Mit t = c ·
n2
2
1
≈ 0.632
e
(1 + x) y ≤ exy
· ln n und einer Konstante c können wir nun noch eine Abschätzung tätigen:
2
Pr(|C | > k) ≤ 1 − 2
n
∗
c· n2 ·ln n
2
< e−c·ln n =
1
nc
Wir können also durch die Wahl der Konstanten c die Wahrscheinlichkeit einer falschen Ausgabe
des Algorithmus verringern. Es bleibt zu sagen, dass es schnelle deterministische Algorithmen
für dieses Problem existieren, die auf Algorithmen bzgl. maximaler Flüsse basieren. Aber durch
„Tuning“ sind randomisierte Algorithmen (wie der 1.2.2) die schnellsten bekannten Min-CutAlgorithmen.
1.3 Verifikation von Matrixprodukten
Wir rechnen hierfür im Z p = {0, , p − 1}, mit p prim. Dieser stellt bekanntlich einer endlichen
Körper dar. Besonders gibt es also hinsichtlich der Multiplikation ein Inverses. Gegeben sind im
folgenden 3 (n, n)-Matrizen A, B, C über Z p. Wir fragen uns, ob A · B = C gilt. Die naive
Lösung wäre, A · B zu berechnen und das Ergebnis mit C zu vergleichen. Dafür ist der Aufwand
grob mit O(n3) Multiplikationen im Z p abzuschätzen. Geht es auch einfacher? Klar ist, dass für
D=A·B −C
gilt, dass
und genauso für v = (v1, , vn)T ∈ Znp :
A·B =C ⇔D=0
(A · B) v = C v ⇔ D v = 0
Damit können wir folgenden Algorithmus formulieren:
12
Einführung und Beispiele
Algorithmus 1.3.1
1. Wähle v1, , vn ∈ Z p zufällig
2. Berechne u = A · (B · v) und w = C · v (Rechenzeit ist Θ(n2))
3. Ausgabe:
0 falls u = w
1 falls u w
Das Verhalten ist im Falle A · B = C klar, dann ist die Ausgabe 0. Sei nun A · B C, also D 0.
Dann gibt es i, j0 mit di, j0 0. Für v1, , v j0 −1, v j0 +1, , vn beliebig gibt es v j0 ∈ Z p mit
di,1 · v1 + + di,j0 −1 v j0 −1 + di,j0 · v j0 + + di,nv n = 0
und daraus folgt für v zufällig:
Pr(D v = 0) ≤
also
1
p
p(Ausgabe 0) ≤
1
p
1.4 Randomisiertes Quicksort
Gegeben sei ein Feld A[1 n]. Dies enthält Zahlen b1, ., , bn.
Zur Vereinfachung sei b1, , bn verschieden und die Aufgabe ist es, die Zahlen so zu sortieren dass eine sortierte Folge (a1, , an)
ausgegeben wird mit a1 < a2 < < an und (a1, , an) stellt eine Permutation von {b1, , bn } dar.
Ein paar wiederholende Worte zu Quicksort:
•
•
Prozedur qs(l,r): Array A[l r] sortieren mit 1 ≤ l ≤ r ≤ n. Dazu wird ein Pivotelement t
zufällig aus A[l r] gewählt.
qs(l,r) nutzt die Prozedur partition, diese arrangiert A[l r] so um, dass
◦
Pivotelement in A[p] steht mit l ≤ p ≤ r
◦
in A[l p − 1] Einträge < als Pivotelement, wenn p − 1 > l, dann muss qs(l, p − 1)
noch ausgeführt werden
◦
in A[p + 1 r] Einträge > als Pivotelement, wenn p + 1 < r, dann muss qs(p + 1,r)
ausgeführt werden
Der Gesamtaufruf von Quicksort lautet qs(1,n). Klar ist, dass pro Aufruf von Partition das
Pivotelement mit r − l anderen Elementen verglichen wird. Es ergibt sich also ein Zeitaufwand
von O(r − l).
Wenn wir uns den Ablauf des Partitionsvorgangs genauer ansehen, erzeugt der Quicksortaufruf einen (gedachten) Binärbaum, wobei jeweils das Pivotelement Wurzel ist und linker
Teilbaum der Aufruf qs(l,p − 1) wird und rechter qs(p + 1,r). Jeder Schlüssel ai kommt also entweder als Wurzel (Pivotelement) vor oder ist ein Blatt des Aufrufbaums.
Abbildung 1.1. Ablauf eines Quicksort-Aufrufs
13
1.4 Randomisiertes Quicksort
Es bleibt zu erwähnen, dass es maximal (n + 1) viele leere Blätter gibt.
Wie können wir die Laufzeit nun genau abschätzen?
Laufzeit =
O(n)
organisatorischer Aufwand für n QS-Aufrufe
+ O(Anzahl der Vergleiche in Partition)
Partition in qs(l,r) kostet Zeit O(r-l)
Die Anzahl der Vergleiche in allen Partitionsaufrufen wollen wir im folgenden mit C bezeichnen,
C stellt eine Zufallsvariable dar. Wie können wir E(C) (den Erwartungswert der Zufallsvariable
C) bestimmen?
X
C =
#Knoten im Unterbaum mit Wurzel ai
=
1≤i≤n
X
X
1≤i≤n 1≤ j ≤n, j i
Xi,j
mit
Xi, j =
1 falls Knoten a j echter Nachfolger von ai ist
0 sonst
Intuitiv betrachtet, ist ai genau dann ein Vorgänger von aj wenn ai Pivotelement wurde und aj
dabei in A[l r] lag.
X
Xi, j
C =
1≤i, j ≤n,i j
!
X
E(C) = E
Xi,j
1≤i, j ≤n,i j
X
=
E(Xi,j )
1≤i, j ≤n,i j
Dies ist durch die Linearität des Erwartungswertes möglich. Nun gilt:
E(Xi,j ) = Pr(Xi,j = 1)
= Pr(a j echter Nachfahr von ai)
Betrachten wir nun den Fall, dass die Zahlen sortiert die Form a1, a2, , ai , , aj , , an
annehmen (Fall i < j). Anfangs seien {ai , , a j } im selben Teilarray. Dabei erzeugen qs-Aufrufe, bei denen das Pivotelement-Element nicht in {ai , , aj } liegt, ein Teilarray bei denen alle
Elemente von {ai , , aj } im gleichen Teilarray liegen. Irgendwann wird nun ein Pivot-Element
in {ai , , a j } gewählt. Wir unterscheiden dabei 3 Fälle:
1. ak wird als Pivotelement gewählt mit i ≤ k ≤ j. Dann liegt ai in einem anderen Teilbaum
als aj und ai ist nicht Vorfahr von aj .
2. a j wird Pivotelement. Dann ist ai intuitiverweise nicht Vorfahr von a j .
3. ai wird Pivotlement. Dann ist ai echter Vorfahre von a j .
Die Wahrscheinlichkeit, dass ai Pivotelement wird, ist gegeben durch
Für den Fall, dass j > i gilt, ist
1
j −i+1
E(Xi, j ) = Pr(ai Vorfahr von a j )
1
=
j −i+1
Für den zweiten Fall, dass i < j gilt, ist analog
E(Xi,j ) =
1
i−j +1
14
Einführung und Beispiele
Damit können wir nun endlich den Erwartungswert unserer Zufallsvariable C abschätzen:
E(C) =
X
1≤i,j ≤n,i j

1 1 1
0 2 3 4

 1 0 1 1
 2
 1 1 2 13

0 2
= 
 3 2
0




=
2
Sym m etrie
·
1
|j − i| + 1

1
n
1
2
1
2
0





(Die Summe der Einträge dieser Matrix)





1
1
1
1
1
·2+ ·1
(n − 1) + (n − 2) + (n − 3) + +
4
n−1
n
2
3
= 2 · (n (Hn − 1) − (n − 1) + (Hn − 1))
= 2 · ((n + 1)(Hn − 1) − (n − 1))
Folgerung 1.5. Die erwartete Anzahl von Vergleichen von randomisiertem Quicksort auf n
Inputs beläuft sich auf
2((n + 1)(Hn − 1) − (n − 1))
Dies lässt sich mit
2 · O(n log n)
abschätzen.
Um diese Abschätzung zu erläutern, nutzen wir eine leichte Abschätzung:
Abbildung 1.2.
15
1.4 Randomisiertes Quicksort
Es gilt:
Z
n
1
dx
x 1
1
1 1 1
1
1
1
≤
1+
+ +
+
+
+
2
2
2 2 3
2 n−1 n
ln(n) =
1
1. Trap ez
1
1 1
+ + +
n
2 3
1
1
= Hn −
+
2 2n
1
+
=
2
−
1
2·n
Man kann auch noch zeigen, dass
lim Hn − ln n ≈ 0.577 = γ
n→∞
Wobei γ die Eulersche Konstante darstellt. Zusammenfassend gilt für große n:
E(C) =
≈
=
=
2((n + 1)(Hn − 1) − (n − 1))
2 · n(ln n + γ − 1) − 2 · n + O(log n)
2 · n · ln n − (4 − 2 · γ) · n + O(log n)
(n · log n) ·
(2 · ln n)
− 2.86 · n + O(log n)
≈1.38 (Quicksortkonstante)
Satz 1.6. Die erwartete Anzahl von Vergleichen bei Quicksort auf n Inputs kann durch
(2 · ln 2) · n · log n − 2.86 · n + O(log n)
für große n abgeschätzt werden.
Kapitel 2
Grundlagen der Wahrscheinlichkeitsrechnung
Als Grundlage dient folgendes PDF:
plate/startIA/ktea/Lehre/ra/ws07/elemw.pdf
http://www.tu-ilmenau.de/fakia/fileadmin/tem-
2.1 Grundbegriffe
Definition 2.1. Ein Wahrscheinlichkeitsraum ist ein Paar
P (Ω, p) wobei Ω eine endliche
oder abzählbar unendliche Menge ist und p: Ω → [0, 1] mit
w∈Ω p(w) = 1. p bezeichnen wir
auch als Verteilung.
Bemerkung 2.2. Für jedes A ⊆ Ω ist die Reihe
eindeutigen Wert.
P
w ∈A
pw absolut und konvergiert gegen einen
Beispiel 2.3.
1. Werfen eines Würfels: Ω = {1, , 6}, p(1) = = p(6) = 6 . Münzwurf: Ω = {0, 1} mit p(0) =
1
p(1) = 2 .
1
2. Werfen zweier Würfel und die Summe der Augenzahlen ist das Resultat. Diesmal gibt es
gewisse Äquivalenzen, z.B. ist der Wurf einer 6 und einer darauffolgenden 1 gleich dem
Wurf von 5 und 2. Nun gilt:
•
p(2) = 36 , p(3) = 36 , p(4) = 36 , , p(7) = 36 , , p(12) = 36
1
2
3
6
1
3. Die uniforme Verteilung ist definiert auf endlichen Ω. Dann gilt:
p(w) =
1
,w∈Q
|Ω|
Die Sprechweise „wähle w aus Ω zufällig“ weißt immer auf eine uniforme Verteilung
hin.
4. Würfeln, bis die erste 6 kommt. Ω1 = {(a1, , ak , 6)|k ≥ 0, a1, , ak 6} und p1((a1, , ak ,
k+1
1
.
6)) = 6
Weitere Beispiele sind im PDF nachzulesen.
Weiter ist für eine Zufallsvariable X: „die Verteilung von X“ ist ein neuer Wahrscheinlichkeitsraum:
•
•
ΩX = {X(w)|w ∈ Ω}
pX (α) = Pr(X = α) oder auch Pr(X −1({α})).
Wesentliche Ungleichungen
•
Markov:
Pr(Z ≥ t) ≤
E(Z)
(Z ≥ 0)
t
17
18
Grundlagen der Wahrscheinlichkeitsrechnung
•
verallgemeinerte Markov-Ungleichung: Wenn X Zufallsvariable und wenn X ⊆
Def(f ) und f (x) ≥ 0 monoton stets, E(f (x)) ist definiert
Pr(X ≥ t) ≤
laut Wikipedia:
E(f (X))
f (t)
Pr(f (X) ≥ t) ≤
•
E(f (X))
t
Jensensche Ungleichung:
Sei f eine konvexe Funktion. Bei konvexen Funktionen existiert zu einem Punkt (x0,
f (x0)) ein α mit f (x0) + α(x − x0) ≤ f (x). D.h. die Tangente an einem Punkt liegt immer
unterhalb des Funktionsgraphen. Sei X eine Zufallsvariable mit X ⊆ D, D Intervall und
f : D → R. Es gilt:
f (E(X)) ≤ E(f (X))
Beweis.
Sei x0 4 E(X). x0 liegt auch in dem Intervall D. Weil f konvex ist, existiert α mit
f (x0) + α(x − x0) ≤ f (x), x ∈ D
Daraus folgt nun:
f (x0) + α(X − x0) ≤ f (X)
Durch die Monotonie des Erwartungswertes gilt:
E(f (x0) + α(X − x0) ≤ E(f (x))
f (x0) + α · E(X) − α · x0 ≤ E(f (x))
f (x0)=f (E(X))
•
Cauchy-Schwarzsche-Ungleichung:
Dies ist äquivalent zu:
|E(X · Y )| ≤
p
E(X 2) · E(Y 2)
E(X · Y )2 ≤ E(X 2) · E(Y 2)
Beweis.
Für λ ∈ R definiere f (λ) = E((X + λY )2). Es gilt:
E((X + λY )2) = E(X 2) + 2 · λ · E(X · Y ) + λ2 · E(Y 2)
Dies stellt nun ein quadratisches Polynom in λ dar.
1. Fall: E(Y 2) = 0 ⇒ Y = 0 (d.h. Y (ω) = 0 für alle ω mit pω > 0). Daraus folgt aber
nun E(X · Y ) = 0.
2. Fall: E(Y 2) > 0. Dann ist f (λ) wirklich eine quadratische Funktion. Dies bedeutet
wiederum, dass f (λ) eine Parabel ist und da E(Y 2) > 0 hat diese Parabel in
Minimum. Wir differenzieren f (λ):
f ′(λ) = 2 · E(X · Y ) + 2 · λ0 · E(Y 2)
Dies setzen wir 0 und sehen:
λ0 = −
und es gilt:
f (λ0) = E(X 2) + 2 ·
−
E(X · Y )
E(Y 2)
E(X · Y )
E(Y 2)
· E(X · Y ) +
E(X · Y )2
· E(Y 2) ≥ 0
E(Y 2)2
19
2.1 Grundbegriffe
Daraus folgt nun:
E(X 2) · E(Y 2) − E(X · Y )2 ≥ 0
•
Beispiel 2.4. (Markov-Ungleichung)
1. f (x) = eax ⇒
2. f (x) = xk für k ≥ 0, X ≥ 0.
Spezialfall: k gerade, k ∈ N
E(ea·X )
et
E(X k
Pr(X ≥ t) ≤
tk
Pr(ea·X ≥ et) ≤
Pr((X − E(X))k ≥ tk) ≤
denn:
auf
E((X − E(X))k)
tk
Z 4 (X − E(X))2, Z ≥ 0
z
z
k
2
also:
Pr(|X − E(X)| ≥ t) ≤
E((X − E(X))k)
tk
für k = 2 ist dies die Chebychev-Ungleichung, für k ≥ 4 die verallgemeinerte Chebychev-Ungleichung.
Weiter ging es auf dem Wiederholungsblatt mit bedingten Wahrscheinlichkeiten und Unabhängigkeit.
Kapitel 3
Modellierung und Transformation
In diesem Kapitel werden keine konkreten Algorithmen vorgestellt, sondern es geht um die theoretischen Grundlagen der Modellierung von randomisierten Algorithmen. Dafür werden wir die
aus der Vorlesung „Algorithmentheorie“ bekannte Registermaschine.
3.1 Modell, Grundbegriffe
Ein paar kurze Fakten zur Registermaschine:
•
•
•
•
es existiert ein Programm mit Zeilen B0, , Bl−1
der Befehlszeiger steht am Anfang auf 0
den Speicher stellen die Register R0, R1, dar
der Befehlssatz besteht aus arithmetischen Befehlen, Speicherbefehlen und Sprungbefehlen
Definition 3.1. (Konfiguration einer Registermaschine)
Aus dem Befehlszählerstand und dem Speicherinhalt können wir eindeutig den Zustand der
Registermaschine wiederherstellen. Die Konguration einer Registermaschine ist ein Tupel
κ = (Z , α)
mit α: N → N und α(i) ist der Inhalt von Register Ri. Nur endliche viele α(i) sind dabei nicht 0.
Die Menge von Kongurationen ist definiert durch
κM = {κ|κ ist Konfiguration von M }
Bemerkung 3.2. κM ist abzählbar unendlich.
Definition 3.3. (Nachfolgekonfiguration)
κ ⊢M k ′ ⇔ in κ gestartet, geht M in einem Schritt in Konfiguration k ′ über.
Wir führen zusätzlich, um den Anforderungen der Vorlesungsalgorithmen gerecht zu werden, den
Befehl RANDOM ein. Die Semantik von „Random“ ist einfach beschrieben:
Nach dem Schritt steht in R0 einer der Zahlen ∈ {0, , < R0 > − 1}. Jede mit Wahrschein1
lichkeit < R > . Wenn < R0 > = 0 gilt, dann gibt es keine Änderung und wenn < R0 > = 1, dann
0
ist < R0 > danach den Wert 0. Der Befehlszähler wird um eins erhöht.
Die Relation ⊢M wird erweitert auf RRAM (Registermaschine mit Befehl „Random“).
Definition 3.4. (Nachfolgekonfiguration bei RRAM)
κ ⊢M κ ′ , auch wenn der in κ aktuelle Befehl „Random“ ist und κ ′ eine der α(0) möglichen
Nachfolgekonfigurationen ist.
Definition 3.5. (Übergangswahrscheinlichkeiten)
21
22
Modellierung und Transformation
Die Übergangswahrscheinlichkeit von der Konfiguration κ in einem Schritt zur Konfiguration
κ ′ zu gelangen ist definiert durch

′

 undefiniert , es gilt nicht κ ⊢ κ
1
, falls κ = (Z , α), aktueller Befehl in κ ist Random , α(0) ≥ 1, κ ⊢M κ ′
Pκ,κ ′ =
α(0)


1
, sonst
Für eine Registermaschine M und einen Input x gibt es eine Startkonfiguration
κ0 4 init(x)
Wir können alle Berechnungen, die sich daraus ergeben, in einem Berechnungsbaum darstellen. Dabei gibt es bei den jeweiligen Random-Befehlen Verzweigungen mit α(0) Kindern.
Alle anderen Befehle für zu einer eindeutigen Nachfolgekonfiguration. Jede Berechnung ist dabei
ein Weg im Baum.
Definition 3.6. Eine Konfigurationenfolge κ0, κ1, , κt heißt legale Teilberechnung, falls
κ0 ⊢ κ1 ⊢ ⊢ κt. Sie heißt eine legale Berechnung falls zudem κt eine Haltekonfiguration ist,
d.h. der Befehlszähler ist ≥ l. Wir bezeichnen legale Teilberechnung mit ϕ. Es gilt:
P ϕ = Pκ0,κ1 · Pκ1,κ2 · · Pκt−1,κt
Wenn in ϕ genau u Random-Befehle vorkommen, mit r1, , ru jeweils Alternativen, dann ist
Y 1
Pϕ =
ri
1≤i≤u
Definition 3.7. (Bestandteile eines randomisierten Algorithmus)
Ein Algorithmus A besteht aus:
•
M, eine randomisierte Registermaschine
•
O, eine Menge von Outputs
•
Out: κM → O, transformiert eine Haltekonfiguration zu einem Output
•
I, eine Menge von Inputs
•
In: I → κM, transformiert einen Input x in eine Startkonfiguration
Definition 3.8. Für einen Algorithmus A = (M , I , O, In, Out) und einen legalen Input x ∈ I sei:
ΩA,x 4 {ϕ|ϕ ist legale und vollständige Berechnung von M, ϕ = (κ0, , κt), κ0 = In(x)}
Wichtig ist, dass ΩA,x von x abhängt. Jeder Input hat also seinen eigenen Wahrscheinlichkeitsraum.
Bemerkung 3.9. ΩA,x ist abzählbar, da die Menge der Konfigurationen abzählbar ist und
ΩA,x ist eine Teilmenge aller Sequenzen von κM . κM war abzählbar.
Lemma 3.10.
X
ϕ∈ΩA,x
Beweis. (Idee)
Betrachte
Pϕ ≤ 1
ΩA,x,t = {ϕ|ϕ partielle legale Berechnung, ϕ = (κ0, , κs), s ≤ t, k0 = In(x)}
Man kann zeigen (formal mit Induktion über t):
X
ϕ∈ΩA,x,t
Pϕ = 1
23
3.1 Modell, Grundbegriffe
Sei
Ω∗A,x,t = {ϕ|ϕ ist legale Berechnung von M auf x mit Länge ≤ t} ⊆ ΩA,x,t
Daraus folgt dann, dass
X
ϕ∈Ω∗
A,x,t
P ϕ ≤ 1 ⇒t→∞
X
ϕ∈ΩA,x
Pϕ ≤ 1
P
Bemerkung 3.11. Es gilt
ϕ∈ΩA,x < 1, wenn (eine Teilmenge von) Berechnungen nicht
halten. Wir legen betrachten nur Algorithmen A mit
X
Pϕ = 1
ϕ∈ΩA,x
Beispiel 3.12. Ein randomisiertes Programm:
1. R0 ← 2
2. RANDOM
3. IF R0 = 0 goto 0
Der Berechnungsbaum dafür ist leicht aufzustellen. Wir sehen, dass der „linkeste“ Weg nie
stoppt → erzeugt einen unendlichen Berechnungsweg. Müssen wir diesen Algorithmus ausschließen? Es gilt:
X
1 1 1
+ + +
Pϕ =
2 4 8
ϕ∈ΩA,x
= 1
Es gibt also Algorithmen, die in unserem Berechungsmodell liegen, obwohl sie unendliche
Berechnungswege besitzen.
Definition 3.13. (Wahrscheinlichkeitsraum für die Analyse randomisierter Algorithmen)
Unser Wahrscheinlichkeitsraum ist
ΩA,x , (P ϕ) ϕ∈ΩA,x)
Definition 3.14.
Wenn A = (M , I , O, In, Out) ein randomisierter Algorithmus ist, dann definieren wir die
Rechenzeit:
tA,x((κ0, , κt)
4
t
∈ΩA ,x
Wir schreiben auch:
tA(x)
Dabei sollte man vorsichtig sein, denn es handelt sich um eine Zufallsvariable wobei das Argument ϕ unterdrückt wird. Analog kann man auch den Speicherplatz SA(x) definieren. Dies
wird an gegebener Stelle nachgereicht.
Definition 3.15. Erwartete Rechenzeit von A auf x:
tA,x = EA,x(tA,x)
Definition 3.16. (Worst-Case-Rechenzeit)
tˆA(x) 4 sup {tA,x(ϕ)|ϕ ∈ ΩA,x }
Man sollte dabei nicht Maximum schreiben, da es unendliche Berechnungen geben könnte und
die mit dem Maximum nicht „erwischt“ werden.
24
Modellierung und Transformation
Wie üblich ist die Inputmenge in Größenklassen eingeteilt.
Definition 3.17. Für n ∈ N definiere
T̂A(n)
4
TA(n) = sup {t¯A(x)|x ∈ I , size(x) = n}
sup {tA,x(ϕ)|size(x) = n, ϕ ∈ ΩA,x } = sup {tˆA(x)|x ∈ I , size(x) = n}
Definition 3.18. Sei A = (M , I , O, In, Out) ein randomisierter Algorithmus. Das
A auf x ist die folgende Zufallsgröße:
Resultat von
resA,x((κ0, , κt)) 4 Out(κt)
für eine Haltekonfiguration κt. Wir schreiben dafür meistens
A(x) für resA,x
mit
A(x): ΩA,x → O
3.2 Typen von randomisierten Algorithmen
Sei f : I → O eine Funktion und A = (M , I , O, In, Out) ein randomisierter Algorithmus.
Definition 3.19. (Fehlerwahrscheinlichkeit)
errA,f (x) = PrA,x(f (x) ∈[0,1]
heißt die
fest
A(x)
Z ufal lsgröße
Fehlerwahrscheinlichkeit von A bzgl. f auf x.
)
Kapitel 4
Randomisierte Suche
In diesem Kapitel beschäftigen uns Themen wie „Suche mit wenigen Zufallsbits“, „Suchen in
Listen“ und „Median einer Folge“.
4.1 Suche mit wenigen Zufallsbits
Sei A eine beliebige Grundmenge. Wir betrachten eine Menge B ∅ mit B ⊆ A. Unser Ziel ist
es nun ein x ∈ B zu finden. Als Grundlage dafür haben wir den Test „ist ein x in B?“ gegeben.
Eine naive Taktik ist nun x1, x2, in A zufällig zu wählen und zu testen, ob xi ∈ B, bis ein Element von B gefunden wurde. Ein geeignetes Kostenmaß ist dabei die Anzahl der Runden T . Sei
|B |
nun ρ = |A| (die Dichte von B in A). Da diesem Experiment eine geometrische Verteilung
zugrunde liegt ist die erwartete Rundenanzahl
E(T ) =
1
ρ
Wir führen noch ein zusätzliches Kostenmaß ein, die Anzahl von Zufallsbits. Für einen Versuch ist dies etwa ⌈log |A|⌉ Zufallsbits. Die erwartete Anzahl von Zufallsbits ist nun etwa
E(T ) · ⌈log |A|⌉ =
⌈log |A|⌉
ρ
Dies kann sehr groß werden, wenn ρ klein ist. Ein Ziel dieses Abschnitts ist es zu zeigen, dass
O(log |A|) Zufallsbits reichen. Der Trick dafür heißt zweifach unabhängige Suche.
4.1.1 Zweifach unabhängige Suche
Annahme: A hat algebraische Struktur. Dafür betrachten wir A = {0, 1, , |A| − 1}. Sei nun p ≥
|A| eine Primzahl, wobei ein Satz aus der Zahlentheorie sagt, dass ein solches p existiert mit p <
2 · |A|. Sei nun A ′ 4 Z p und B ⊆ A ′. Nun gilt
ρ′ =
|B | ρ
≥
|A ′| 2
Wähle nun r, s aus A zufällig. Die Kosten dafür in „Zufallsbits“ sind 2 · ⌈log |A|⌉ Bits. Teste nun
∈ A. Teste nun, ob diese in B sind. Eine kleine Komplix1, x2, wobei xi 4
r·i+s
Körp erarithm etik in A
kation dabei ist, wenn r = 0 gewählt wird, denn dann gilt xi = s. Im Fall r = 0 setzen wir nun als
Reperatur r = 1.
Algorithmus Paarweise unabh. Suche
1. Wähle r, s ∈ A zufällig
2. falls r = 0 dann setze r = 1
3. i:= − 1
4. repeat
i = i + 1;
5. until x ∈ B
25
26
Randomisierte Suche
6. return x
Analyse der Korrektheit
Weil r 0, gilt {r · 0 + s, r · 1 + s, r · 2 + s, , r · (p − 1) + s} = Z p.Das bedeutet, dass irgendwann ein Element von B gefunden wird (wir hatten als Voraussetzung, dass B ∅).
Analyse der Laufzeit
Für betrachten dabei die Korrektur im Fall r = 0 nicht. Sei nun
1 , falls Xi ∈ B
Yi 4
,0≤i< p
0 , falls Xi B
Für i j ist Xi und Xj unabhängig und daher sind Yi , Y j unabhängig.
Beweis. Um zu zeigen, dass Xi und X j unabhängig sind, muss folgendes gelten:
Pr(Xi = x ∧ Xj = y)
|{(r,s)|r·i+s=x∧r· j +s= y }|
1
= 2
p2
p
= Pr(Xi = x) ·
1
p
Pr(X j = y)
|{(r,s)|r·i+s= y})
p
1
= 2=p
|A|2
p
denn auf der rechten Seite finden wir ein Gleichungssystem, das genau eine Lösung hat.
Für 1 ≤ k ≤ p sei Zk: = Y0 + + Yk−1. Was bedeutet Zk = 0? Es gilt
Zk = 0 ⇔ die ersten k Tests sind erfolglos.
Unser Ziel ist nun Pr(Zk = 0) nach oben abzuschätzen.
Lemma 4.1.
E(Zk) = k · ρ
Var(Zk) = k · ρ(1 − ρ)
Beweis. Es gilt:
E(Zk) =
=
=
=
X
0≤i<k
X
0≤i<k
X
0≤i<k
X
E(Yi)
Pr(Yi = 1)
Pr(Xi ∈ B)
ρ
0≤i<k
Var(Zk) =
=
=
=
=
=
X
= k·ρ
|B |
= k·
|A|
Var(Yi) (wegen paarweiser Unabhängigkeit)
0≤i<k
X
E((Yi − E(Yi))2)
0≤i<k
X
ρ · (1 − ρ)2 + (1 − ρ) · (0 − ρ)2
0≤i<k
X
0≤i<k
X
0≤i<k
X
0≤i<k
E((Yi − ρ)2)
ρ(1 − ρ)((1 − ρ) + ρ)
ρ(1 − ρ)
= k · ρ · (1 − ρ)
27
4.1 Suche mit wenigen Zufallsbits
Nun können wir mit der Chebychew-Ungleichung folgendes schlussfolgern:
Pr(Zk = 0) ≤ Pr(|Z − E(Zk)| ≥ E(Zk))
Var(Zk)
≤
t2
k · ρ(1 − ρ)
=
(k · ρ)2
1−ρ
=
k·ρ
Die Wahrscheinlichkeit, dass die ersten k Runden erfolglos sind, ist also kleiner bzw. gleich
1−ρ
k·ρ
1
Für k ≥ ρ ist der Nenner ≥ 1, also erhält man eine echte Schranke. Wie sieht es nun mit der
erwarteten Rundenzahl aus?
X
Pr(Rundenzahl ≥ k)
E(#Rundenzahl) =
k ≥1
≤ 1+
= 1+
= 1+
X
k ≥2
p
X
1−ρ
(k − 1) · ρ
1−ρ
(weil p = |A|)
(k − 1) · ρ
k=2
p
1−ρ X 1
ρ
k−1
k=2
1−ρ
= 1+
H p−1
ρ
1−ρ
= 1+
ln p
ρ
log |A|
= O
ρ
Unschön dabei ist der log |A|-Faktor. Eine Verbesserung erreichen wir aber, in dem wir den
Algorithmus modifizieren. Wir nutzen 2 Suchen, zweifach unabhängig, die quasiparallel
ablaufen.
Algorithmus modifizierte zweifach unabhängiges Suchen
1. Wähle r1, r2, s1, s2 ∈ A = Z p zufällig (4 · log⌈log |A|⌉ Zufallsbits)
2. Falls r1 = 0, setze r1 = 1. Falls r2 = 0, setze r2 = 1
3. repeat
i=i+1
x1 = r1 · i + s1
if x1 ∈ B, return x1
x2 = r2 · i + s2
if x2 ∈ B,return x2
4. until false (Endlosschleife)
Die Korrektheit ist klar.
Analyse Laufzeit
Sei Xi(1) 4 r1 · i + s1 und Xi(2) = r2 · i + s2 und äquivalent dazu
(
(l)
1 falls Xi(l) ∈ B
Yi 4
0 sonst
(l)
Zk
4
Y0(l) + + Yk−1
(l)
28
Randomisierte Suche
mit l ∈ {1, 2}. Nun gilt:
Pr(Runden 1, , k erfolglos) = Pr(Zk = 0 ∧ Zk = 0)
(2)
(1)
Dies ist unabhängig, also gilt:
(2)
(1)
Pr(Zk = 0) · Pr(Zk = 0) ≤
1− ρ
k·ρ
2
Für die erwartete Rundenzahl gilt nun:
X
Pr(es gibt mehr als k Runden)
E(Rundenzahl) =
k ≥1
k−1 Runden erfolglos
(
2 )
1−ρ
min
≤ 1+
,1
(k − 1) · ρ
k ≥2
2
X X
1
1+
≤ 1+
(k − 1)ρ
1
1
X
2≤k ≤⌊ ρ ⌋+2
1
1
≤ 2+ + 2
ρ ρ
≤ 2+
1
1
+
ρ ρ2
k ≥⌊ ρ ⌋+3
X
1
k ≥⌊ ρ ⌋+3
X
1
k ≥⌊ ρ ⌋+3
Z ∞
1
(k − 1)2
Z k −1
dt
2
k −2 t
dt
1
1
+ ·
ρ ρ2 ⌊ 1 ⌋+1 t2
ρ ∞
1
1
1
1
1
1
= 2+ + 2 · −
= 2+ + 2 · 1
ρ ρ
t ⌊ 1 ⌋+1
ρ ρ ⌊ ⌋+1
≤ 2+
ρ
ρ
1
1
≤ 2+ + 2 · ρ
ρ
ρ
1
= 2 1+
ρ
1
= O
ρ
1
1
Die erwartete Anzahl von Tests ist dann ≤ 4 1 + ρ = O ρ .
In den Notizen findet man noch eine schärfere Abschätzung über die Chebychev-CantelliUngleichung.
4.2 Suche in angeordneten linearen Listen
Für einen Suchschlüssel x, soll der Zeigeger auf das Listenelement xi ≥ x, i minimal sein. OBdA
sei der letzte Schlüssel xn in der Liste ein Wächterelement, d.h. xn = ∞. Wir wissen, dass bei
einer deterministischen Suche die Anzahl der Vergleiche im schlechtesten Fall n ist. Im Durchn
schnitt müssen wir 2 Vergleiche durchführen. Wir wollen diese Vergleichsanzahl durch einen
randomisierten Algorithmus verringern. Eine technische Voraussetzung dabei ist, dass wir auf
zufällige Listenelemente zugreifen können, also direkt auf den Zeiger.
Idee. Wähle ein Listenelement x zufällig. Wir führen eine Fallunterscheidung durch:
1. x = x j
2. Wenn x > x j : Starte Suche bei x j
3. Wenn x < x j : Suche von Anfang
Idee. Wähle zufällig Einträge xi1, xi2, , xil. Wir werden dabei l später festlegen. Finde unter
xi1, , xil das größte Element, das kleiner als x ist und starte Suche dort.
29
4.3 Mediansuche bzw. „k-Selection“
Die Korrektheit des Algorithmus ist intuitiv klar. Von Interesse ist der Zeitbedarf bzw. die
Anzahl der Vergleiche.
Beweis. Sei Y1 = #Vergleiche in 1. Phase ≤ 1 + 2 · L (2 Vergleiche pro xi j ). Wir definieren nun
Y2 4 #Vergleiche in Phase 2 außer den letzten Vergleich
Für uns von Interesse ist der Erwartungswert E(Y ).
Pr(Y2 ≥ j) = Pr(die j Elemente vor Ziel xk wurden in Phase 1 nicht gewählt)
l
n−j
=
n
l
j
= 1−
n
< e
− j ·L
n
Daraus erhalten wir nun
X
E(Y2) =
j ≥1
X
<
Pr(Y2 ≥ j)
e
−j ·l
n
j ≥1
−l/n
e
1 − e−l/n
1
= l/n
e −1
l
1
es gilt: (el/n > 1 + ) <
n
1 + l/n − 1
n
=
l
=
n
Wir haben insgesamt im erwarteten Fall 1 + 2l + 1 + l . Wann wird 2 · l +
n
l
minimal?
n
0 = 2− 2
l
q n
l =
2
Die Anzahl der Vergleiche im erwarteten Fall ergibt sich zu
√
4+2· 2·n
√
in O( n ). Dies ist natürlich besser als O(n) im deterministischen Fall.
4.3 Mediansuche bzw. „k-Selection“
Gegeben sei eine Menge von Elementen S = {a1, , an }.
Definition 4.2. a ∈ S hat Rang k, falls |{i|ai ≤ a}| = k. Der
n
⌈ 2 ⌉.
Die deterministische Situation für diese Probleme:
•
•
Sortieren O(n log n)
geht in O(n) Vergleichen.
Randomisiertes Quickselect
Median ist das Element von Rang
30
Randomisierte Suche
Die Zahlen a1, , an in Array A[1 n]. Wähle t ∈ {1, , n} zufällig (das Pivotelement). Sei
x 4 A[t]. Partitioniere, so dass A[1 p − 1] < x und A[p + 1 n] > x. Wie finden wir damit das kt kleinste Element.
1. Fall: p = k, dann ist x das Element mit Rang k
2. Fall: p > k: Rekursion mit k und A[1 p − 1]
3. Fall: p < k: Rekursion mit k − p und A[p + 1 n]
Die erwartete Anzahl von Vergleichen ist grob: n + 2 + 4 + 8 + < 2 · n. Die exakte Analyse ist
etwas komplizierter. Wir wollen uns primär einen anderen Algorithmus betrachten.
Wir kümmern uns ab hier nur noch um die Mediansuche. Die gezeigten Techniken sind aber
auch für k-Selection benutzbar.
Idee. Finde a ∈ S, a ≤ Median, und b ∈ S, b ≥ Median. Doppelte Partitionierung nun und wir
sortieren den Zielbereich zwischen a und b. Wirbrauchen dafür folgendes: Rang(b)-Rang(a)
n
sollte dafür nicht zu groß sein (unbedingt: o log n ). Die Kosten für das Partitionieren beläuft
n
n
n
sich auf O(n) (später interessiert uns auch die Konstante). Es gilt: A[u] = a und A[v]=b. Wie
finden wir geeignete a und b? Wir nutzen dafür Random Sampling, eine Grundtechnik in den
randomisierten Algorithmen. Wähle L 4 n3/4. Aus Einfachheitsgründen soll n1/4 ∈ N. Wähle L
Elemente aus A zufällig: B = {b1, , bl }. Dies kann auch eine Multimenge sein. Wir sortieren
√
n3/4
n3/4
n3/4
diese Menge in O(n3/4 · log n) = o(n). Wähle in S Elemente vom Rang 2 − 1/4 = 2 − n
n
√
n3/4
a
bzw. 2 + n . Der vollständige Algorithmus ist hier zu finden.
b
Laufzeitanalyse.
•
•
•
B sortieren benötigt O(n3/4log n) = o(n)
A[u + 1 v − 1] sortieren: O(n3/4 · log n) = o(n)
Partitionierung: Wir vergleichen zuerst mit a (n Vergleiche), nur falls > a mit b verglei1
3
chen ( ≤ 2 · n + O(n3/4) Vergleiche). Insgesamt: 2 n + O(n3/4) Vergleiche. Die Konstante
1.5 ist die beste bekannte konstante für Selection.
Zur Analyse benötigen wir einiges mathematisches Werkzeug. Sei Pr(Fall 1) = Pr(A1 ∪ A2)
n
n
wobei A1 = {u > 2 } und A2 = {v < 2 }. Die genaue Darstellung von Fall 1 bzw. Fall 2 kann im
Algorithmus 4.1 nachgelesen werden. Nun sei
Pr(A1) = Pr(bL/2− √n liegt oberhalb des Medians)
Wir nehmen nun an, dass A aufsteigend sortiert wäre, d.h. a1a2 a n a n +1 an. Damit können
2
2
wir die Wahrscheinlichkeit des Ereignisses A1 weiter abschätzen.
√
Pr(A1) = Pr(Folge b1, , bL trifft erste Hälfte {a1, , a n } weniger als L/2 − n − mal)
2
Wir definieren nun neue Zufallsvariable Xi.
(
1 falls A[ji] ∈ {a1, , a n }
2
Xi =
0 sonst
Sei nun X = X1 + + XL. Nun berechnen wir den Erwartungswert:
m 4 E(X) =
Wir wollen nun eine Abschätzung für
Pr(X ≤
L
2
L √
− n) ≤ ?
2
gewinnen. Dafür fehlt uns noch etwas „Handwerkszeug“.
Einschub. Grundlagen der Wahrscheinlichkeitstheorie, Chernoff-Hoeffding-Schranke.
31
4.3 Mediansuche bzw. „k-Selection“
Sei X1, , Xn 0-1-wertig, unabhängig und pi = Pr(Xi = 1). Sei X = X1 + + Xn und m 4
E(X). Wir wollen nun eine Abschätzung für Pr(X ≥ m · (1 + δ)) ≤ ? finden.
Pr(X ≥ (1 + δ) · m) = Pr(et·X ≥ et(1+δ)·m)
E(et·X )
≤ t(1+δ)·m
e
!
Y
t·X
t·X
i
E(e ) = E
e
(4.1)
1≤i≤n
=
=
=
Y
E(et·Xi)
1≤i≤n
Y
1≤i≤n
Y
1≤i≤n
(Einschub: 1 + x ≤ ex) ≤
Y
(pi · et + (1 − pi) e0)
(1 + pi(et − 1))
e pi(e
t
−1)
1≤i≤n
(p1 + + pn)(et −1)
= e
t
= eE(X)(e −1)
t
= em(e −1)
Also:
t
E(et·X ) ≤ em(e −1)
(4.2)
Kombiniere nun (4.1) und (4.2):
t
em(e −1)
et(1+δ)·m
Dies gilt für jedes beliebige t > 0. Wähle t so, dass die rechte Seite möglichst klein wird. Minimiere et − 1 − (1 + δ)t. Daraus können wir schlussfolgern, dass
Pr(X ≥ (1 + δ)m) ≤
t = ln(1 + δ)
den Ausdruck minimiert.
Pr(X ≥ (1 + δ)m) ≤
eδ
(1 + δ)1+δ
m
Das ist die erste Form der Chernoff-Hoeffding-Gleichung. Es gilt:
Pr(X ≥ (1 + δ) · m) ≤ e−δ
2
·m/3
, 0 ≤ δ ≤ 1.8
ist die zweite Form der Chernoff-Hoeffding-Schranke. Ohne Beweis, sei auch der zweite Teil der
Chernoff-Hoeffding-Schranke erwähnt:
m m
e−δ
−δ 2/2
Pr(X ≤ (1 + δ) · m) ≤
≤
e
(1 − δ)1−δ
für alle δ zwischen 0 und 1. Kommen wir nun zu unserer Analyse des Algorithmus zurück.
n3/4/2
2
L √
Pr X ≤ − n ≤ e−δ /2
2
wobei
n3/4 √
L √
− n =
− n
2
2
!
√
n
= m 1 − 3/4
n /2


2
= m · 1 − 1/4 
n
δ
32
Randomisierte Suche
Weiter gilt:
e
−δ 2/2
n3/4/2
=
e
2
n
−√
1/4
= e−·n
Dies ist für gorße n winzig klein. Pr(A2) ≤ e−n
schlussfolgern, dann
1/4
lässt sich analog einsehen. Wir können also
Pr(Fall 1) ≤ 2 · e−n
Wir wollen nun Fall 2 betrachten.
n3/4/2
1/4
Pr(Fall 2 ∧ nicht Fall 1) ≤ ?
Wir führen 2 Ereignisse B1 und B2 ein.
n
B1: v − > D · n3/4
2
n
B2: − n > D · n3/4
2
Ein Ereignis davon muss eintreten.
Pr(Fall 2 ∧ nicht Fall1) ≤ Pr(B1) + Pr(B2)
n
Wir betrachten wieder nur B1 und B2 ergibt sich dann analog.Falls v > 2 + D · n3/4 gilt, dann ist
√
der Rang n3/4 + n in b1, , bL {a1, a2, , a n +D·n3/4}. Sunten ist der Bereich des Arrays
2
n
A[1 2 + D · n3/4]
Pr(B1) = Pr(A[j1], , A[jl] trifft Sunten weniger als n/2 + D · n3/4 − mal)
Wir führen wieder Zufallsvariablen ein:
Xi =
1 falls A[ji] ∈ Sunten
0 sonst
n
=
mit X = X1 + + XL und m 4 E(X) = L · 2 n


m
2
L √
Pr X ≤ + n  ≤ e−δ /2
2
+ D · n3/4
L
2
+D·
√
n.
m(1−δ)
Ein Wert für D von
5
2
((D −1)(
√
n ))2
·m
= e
−
= e
−(D −1)2 ·n/2·(
2·m2
√
n3/4
+D n )
2
→große n 0
ist z.B. gut.
Bemerkung 4.3. Sortieren mit Random Sampling?
Gegeben sei Array A[1 n]. Wähle L Samples, sortiere: b1 ≤ b2 ≤ ≤ bL. Für jedes x in A:
•
•
finde i mit bi ≤ x ≤ bi+1
alle diese x bilden ein Fach Bi.
Der Aufwand ist hier höher als im Medianfall: n · log(L) Vergleiche (mit binärer Suche). Sortiere
dann jedes Fach separat (z.B. mittels Mergesort). Mit Hoeffding
kann man zeigen, dass alle Bi
√
etwa gleich groß sind (bei vernünftiger Wahl von L, z.B. n ). Für einen Prozessor erhält man
dafür kaum Vorteile (normales Quicksort ist schneller). Wenn man L Prozessoren besitzt, kann
jeder Block auf einem Prozessor
gerechnet werden und damit L Blöcke gleichzeitig sortiert
n log n
werden in Gesamtzeit O
.
L
Kapitel 5
Randomisierte Algorithmen für Probleme
aus der Zahlentheorie
Begleitend dazu, sei auf das Skript zu diesem Kapitel unter http://www.tuilmenau.de/fakia/fileadmin/template/startIA/ktea/Lehre/ra/ws07/zahlentheorie-fakten.pdf verwiesen. Beginnen werden wir mit den Themen randomisiertes „Quadratwurzelnziehen modulo p“
und „Primzahltest bzw. Primzahlerzeugung“.
5.1 Fakten aus der Zahlentheorie
Als bekannt vorausgesetzt wird die Division mit Rest: x = q · m + r mit Rest r, wobei r =
x mod m. Zusätzlich sei Z∗m = {0, , m − 1} gegeben. Für beliebiges m ist dies ein Ring, für eine
Primzahl m ein endlicher Körper.
Lemma 5.1. (Bezout)
1. n, m teilerfremd ⇒ ∃x, y: x · m + y · n = 1
2. ∃x, y: x · m + y · n = ggT(n, m)
Beweis und Beispiel dazu im Skript.
Lemma 5.2.
ggT(a, m) = 1 ⇔ ∃b: a · b mod m = 1
Beweis. Folgt fast direkt aus der zweiten Aussage von Bezout.
∗
Für uns ist nun Z∗m = {a|1 ≤ a < m, ggT(a, m) = 1}. Als Beispiel sei Z21
= {1, 2, 4, 5, 8, 10, 11,
13, 16, 17, 19, 20}. Diese Zahlen haben modulo 21 immer ein Inverses.
Satz 5.3. (kleiner Satz von Fermat)
Sei m eine Primzahl, a ∈ Z∗m. Dann gilt:
am−1mod m = 1
Hierbei sei noch die schnelle Exponatiation genannt. Der Kern dabei ist die folgende Vorgehensweise:

 (ak/2 mod m)2 mod m
k gerade



(k −1)/2
2
mod m) · a) mod m k ungerade
ak mod m = ((a

a
k=1


1
k=0
Die Rekursionstiefe ist dabei die Bitanzahl des Exponenten. Für gerade k benötigen wir eine
Mulitplikation. Für ungerade k müssen wir zusätzlich noch mit a multiplizieren.
5.2 Quadratwurzel mod p, Quadratwurzelziehen
Betrachten wir das Beispiel p = 13.
33
34
Randomisierte Algorithmen für Probleme aus der Zahlentheorie
a
1 2 3 4 5 6 7 8 9 10 11 12
a mod 13 1 4 9 3 12 10 10 12 3 9 4 1
2
Tabelle 5.1.
Leicht zu sehen ist, dass jede Quadratzahl 2-mal vorkommt. Dies ist jedoch nicht überrap−1
schend, da a2 mod p = p2 − 2p a + a2 mod p = (p − a)2 mod p ist. Es gibt genau 2 viele Quadratzahlen, da für jedes b maximal zwei Werte a mit a2 mod p = b existieren können. (Die Gleichung X 2 = b hat in einem Körper Z p maximal zwei Lösungen).
Definition 5.4. QR p 4 {a2 mod p|1 ≤ a < p} ist der
quadratische Rest.
Es stellen sich nun mehrere Fragen:
1. Wie erkennt man Quadratwurzeln modulo p? (leicht)
2. Quadratwurzelziehen: Zu b ∈ QR p, finde a mit a2 mod p = b. (randomisiert)
Behauptung. p ungerade Primzahl, a ∈ Z p∗, dann:
1. a(p−1)/2 mod p ∈ {1, p − 1}, dabei spielt p − 1 die Rolle der − 1 in Z p
2. a ∈ QR p ⇔ a(p−1)/2mod p = 1.
Aus 2. ergibt sich dabei sofort der Test: „Ist a ∈ QR p?“.
Beweis.
1. Nach dem kleinen Satz von Fermat gilt für c 4 a(p−1)/2mod p:
c2 mod p = a p−1mod p = 1
Es gibt nur zwei Zahlen in Zp∗ mit d2 mod p = 1, nämlich d = 1 und d = p − 1. Also ist c ∈
{1, p − 1}.
2. wird nachgereicht
Quadratwurzelziehen.
1. (einfach) p + 1 ist durch 4 teilbar. (z.B. bei p = 19). Wenn ein b gegeben ist, und dieses b
p+1
ist ein quadratischer Rest modulo p. Dann ist (b 4 mod p)2mod p = b
p −1
(b 2 mod p) · b = 1 · b = b, denn b ∈ QR p ist ein quadratischer Rest.
p+1
2
mod p =
2. p − 1 ist durch 4 teilbar. (z.B. p = 17). Dafür ist kein deterministischer Algorithmus
bekannt für das Quadratwurzelziehen mit Laufzeit poly(log p).
Algorithmus.
•
Input: a, p
1. Teil:
•
Finde b ∈ Z∗p − QR p (quadratischer Nichtrest):
•
repeat
◦
b: = Zufallszahl in {2, , p − 1}
until (b
p −1
2
2. Teil.
mod p) = p − 1 (erwartete Anzahl von Versuchen ist höchstens 2).
•
Konstruktion der Quadratwurzel:
•
Schreibe 2 (p − 1) = u · 2k, u ungerade, k ≥ 1.
1
gerade
35
5.2 Quadratwurzel mod p, Quadratwurzelziehen
•
Berechne Folge s0, , sk , gerade Zahlen mit
k −i
au·2
•
•
•
s 4 0;
· bsi mod p = 1
for i 4 2 to k do
k −i
· bs/2 mod p = 1 then s 4 s/2
◦
if au·2
◦
else s: = 2 +
s
return a
u+1
2
p−1
2
· bs/2 mod p (das ist eine Quadratwurzel modulo p).
Siehe auch Algorithmus 5.5 aus dem Skriptfragment zur Vorlesung. Die Laufzeit des ersten Teils
ist O(log p) (erwartete Multiplikationen und ≤ 2 Schleifendurchläufe). Im zweiten Teil kann die
Anzahl der Multiplikationen mit O(k · (log p)) = O((log p)2) angeben. Zu zeigen ist noch: es wird
Folge s0, , sk berechnet mit
k −i
au·2 · bsi mod p = 1 ∧ si gerade
Falls die Behauptung stimmt ist die Ausgabe a(u+1)/2 · bsk/2 mod p. Dabei gilt
2
a(u+1)/2 · bsk/2 mod p = a · (au · bsk) mod p
= a · 1 mod p
= a
Wir müssen nun also nur noch die Behauptung beweisen.
Beweis. (Induktion über i)
Sei i = 0:
k
au·2 · bs0 = a
= a
= 1
p −1
2
p −1
2
· b0 mod p
mod p
a ∈ QR p. Das galt nach dem Eulerkriterium.
Sei i > 0: Nach Induktionsvoraussetzung ist die Behuaptung richtig für i.
si k −(i+1)
· b 2 mod p
f 4 au·2
Was passiert, wenn wir f quadrieren?
f 2 mod p =
= 1
k −i
au·2
· bsi mod p
Dafür gibt es zwei Fälle, f = 1 oder f = − 1.
1. Fall: f = 1:
si+1 = si/2
⇒
u·2k −(i+1) si+1
a
·b
mod p = f
= 1
2. Fall: f = − 1:
si+1 = si/2 +

a
u·2k −(i+1)
·
b
si+1
p −1
bsi/2 ·b 2

mod p =
f·
φ−1
2
b
p −1
2
≡−1 m o dp,b QR p
= ( − 1)( − 1) mod p
= 1
!
mod p
36
Randomisierte Algorithmen für Probleme aus der Zahlentheorie
Noch zu zeigen: si gerade. Beweis durch Widerspruch. Annahme si ist ungerade. Dann folgt:
!
au·2
k −(i+1)
·
bsi +1
mod p = 1
quadratischer Rest kein quadratischer R est
Das ist allerdings ein Widerspruch. Quadratischer Rest und kein quadratischer Rest wird nicht
zu einem quadratischen Rest führen.
Bemerkung 5.5. Zentral im Algorithmus ist Finden von b ∈ Z∗p − QR p. Für p ≡ 5 mod 8, z.B.
p = 5, 13, 29, 37, : 2 ∈ Z∗p − QR p. Problematisch sind nur z.B. p = 17, 41, . Für n = p · q gibt es
kein (randomisiertes) effizientes Verfahren für Quadratwurzeln mod n bekannt.
Die Laufzeit ist beschränkt durch log p Schleifendurchläufe (jedesmal eine schnelle Exponentiation) ⇒ Anzahl Multiplikationen mod p: O((log p)2) und O((log p)4) Bitoperationen. Ein
alternativer Algorithmus für Quadratwurzelnziehen (randomisiert) läuft in O((log p)) Multiplikationen.
5.3 Der Miller-Rabin-Primzahltest
Ein Primzahltest soll im Idealfall für eine beliebige natürlich Zahl n bestimmen können, ob n
prim ist oder nicht. Die Ausgabe lautet „ja“(0) bzw. „nein“(1). Der erste Algorithmus, der wirklich ein wichtiger Algorithmus für den Primzahltest war, war 1977 der Algorithmus von
Solovay/Strassen bzw. 1978 dann Miller Rabin (beide randomisiert). Die zentralen Eigenschaften lauten wie folgt:
1. n prim ⇒ Ausgabe 0
1
2. n zusammengesetzt ⇒ Pr(Ausgabe 0) ≤ 2
Randomisierte Primzahltester spielen in der Kryptographie eine zentrale Rolle. Der Primzahltest ist dabei „leicht“ und sehr effizient. Schwierig ist es jedoch, eine Zahl n in Faktoren zu zerlegen (dies ist einfach gesagt die Sicherheitsgrundlage für das RSA-System). Im Jahre 2002
erschien eine Arbeit von Agarwal, Kayal, Saxena, die einen deterministischen Algorithmus vorschlug. Die Laufzeit des Algorithmus war auf typischen Inputs O((log n)4) Multiplikationen (was
nicht unbedingt effizient für große Testzahlen ist).
5.3.1 Der Fermat-Test
Hierfür benötigen wir wieder den kleinen Satz von Fermat. Dieser besagt folgendes:
n prim, 1 ≤ a < n ⇒ an−1 mod n = 1
Wir können diese Betrachtung „umdrehen“:
an−1mod n 1 ⇒ n nicht prim
Diese Aussage führt uns leider nicht zu Faktoren (was typisch ist für Primzahltests). a
bezeichnen wir in diesem Fall als Fermat-Zeuge. Wenn wir a = 2 betrachten, dann ist
a340 mod 341 ≡ 1, wobei 341 = 11 · 31. Wir sehen also, dass allein mit a = 2 alle Primzahlzahlen
bis 341 korrekt klassifiziert werden können.
Fakt. n keine Primzahl, ggT(a, n) > 1 ⇒ an−1 mod n 1.
Dies ist leicht einzusehen, in dem wir annehmen, dass an−1 mod n = 1. Dies ist äquivalent zu
!
n−2
a· a
mod n mod n
Inverses zu a
37
5.3 Der Miller-Rabin-Primzahltest
Daraus folgt, dass a ∈ Z∗m = {a|a teilerfremd zu n}. Daraus folgt der gewünschte Widerspruch,
denn nach Voraussetzung sind a und n nicht teilerfremd.
Die zentrale Idee im Fermat-Test ist es, die F-Zeugen zufällig zu suchen. Wir kommen auf
den folgenden Algorithmus:
1. Wähle a zufällig aus {2, , n − 2};
2. if an−1 mod n 1
then return 1;
else return 0;
Die Laufzeit ist genau eine schnelle Exponentiation: ≤ 2 log n Multiplikationen. Die Fehlerwahrscheinlichkeit verhält sich wie folgt:
•
•
Ausgabe 1: Algorithmus hat F-Zeugen gefunden ⇒ n nicht prim. Daher gilt:
n Primzahl ⇒ Ausgabe ist 0.
Falls n zusammengesetzt:
Pr(Ausgabe 0) =
Wieviele solcher F-Lügner gibt es nun?
#(F-Lügner in {2, , n − 2})
n−3
Auf jeden Fall gilt folgendes:
Pr(Ausgabe 0) ≤
Wie groß kann das werden?
(n − 3) − |Zn − Z∗n | − 1
n−3
Lemma 5.6. Wenn G eine endliche Gruppe ist und H ist eine Untergruppe von G, dann ist
|H | ein Teiler von |G|. Insbesondere: Wenn H echte Untergruppe von G ist, dann gilt |H | ≤
1
|G|.
2
Beobachtung. Ln = {a ∈ Z∗n |a F-Lügner} ist Untergruppe von Z∗n.
Dies kann einfach durch das Untergruppenkriterium gezeigt werden: Wenn G eine endliche
Gruppe mit neutralem Element 1 ist und A eine Teilmenge von G, derart dass
1. 1 ∈ A
2. A unter der Gruppenrelation G ist abgeschlossen, d.h., für a, b ∈ A gilt auch immer a, b ∈
A
dann ist A eine Untergruppe von G.
Wende dies nun auf Ln an. Ln ⊆ Z∗n und 1 ∈ Ln dann gilt
•
a, b ∈ Ln ⇒ an−1 mod n = 1, bn−1 mod n = 1, folgt (a b)n−1 ≡ an−1 · bn−1 = 1 · 1 ≡ 1(mod n)
Satz 5.7. Wenn n ≥ 3 eine ungerade zusammengesetzte Zahl ist derart, dass es mindestens
einen F-Zeugen a ∈ Z∗n gibt, dann liefert der Fermat-Test auf Eingabe n mit Wahrscheinlichkeit
1
größer als 2 die korrekte Antwort 1.
Beweis. Nach Voraussetzung und Beobachtung ist Ln eine echte Untergruppe von Z∗n. Daraus
folgt, dass die Kardinalität von Ln eine echter Teiler von |Z∗n | = ϕ(n). Daraus folgt, dass
Daraus folgt der Satz.
1
1
|Ln | ≤ |Z∗n | = · ϕ(n)
2
2
Um die Fehlerwahrscheinlichkeit weiter zu verbessern, können wir den Fermat-Test unab1
hängig wiederholen und senken somit die Fehlerwahrscheinlichkeit auf ≤ 2l . Dies wird dann
auch als „iterierter Fermat-Test“ bezeichnet.
38
Randomisierte Algorithmen für Probleme aus der Zahlentheorie
Wie gut ist dieser Test nun wirklich? Es gibt ungerade Zahlen n, die zusammengesetzt
sind und Ln = Z∗n. D.h. dann für alle a ∈ Z∗n ist an−1mod n = 1. Solche Zahlen n heißen Carmichael-Zahlen. Die kleinste Carmichael-Zahl ist 561 = 3 · 11 · 17. Weitere sind z.B. 1105 und
1729. Es gibt auch viel größe Carmichael-Zahlen, z.B. 651693055693681 = 72931 · 87517 · 102103
ϕ(n)
eine Charmichael-Zahl mit n > 0.99996. Dafür ist der Wiederholungstrick dann nicht mehr
anwendbar.
Bemerkung. Wenn n zufällig gewählt ist, dann ist
Pr(n Carmichael-Zahl)
sehr klein. Aber n kann natürlich von einem Gegner gewählt werden und deswegen darf ein
Primzahltest auch bei Carmichael-Zahlen nicht versagen.
Lemma 5.8. Wenn n eine Carmichael-Zahl ist, dann ist n keine Primzahlpotenz.
Beweis. indirekt. Annahme: n ist Carmichael-Zahl und n = pl, p prim und l ≥ 2.
Sei nun
a: = pl−1 + 1
Wir zeigen: a ∈ Z∗n ist ein F -Zeuge (also ist n keine Carmichael-Zahl). Sei nun
an−1 (mod n) ≡ (pl−1 + 1)n−1 (mod n)
n − 1 (n−1)(l−1)
n − 1 2(l−1)
+ +
(mod n)
p
≡ 1 + (n − 1)pl−1 +
p
n−1
2
≥n
n = pl teilt p2(l−1), , p(n−1)(l−1)
≡ 1 + (n − 1)pl−1 mod n
≡ 0 mod n
1
≥n
denn sonst wäre
pl−1(pl − 1) mod n = 0
d.h. n = pl teilt pl−1(pl − 1), d.h. p teilt pl − 1 geht nicht.
Folgerung. Jede Carmichael-Zahl n lässt sich als n = n1 · n2 schreiben, wo n1 und n2 teilerfremde ungerade Zahlen ≥ 3 sind.
5.3.2 Nichttriviale Quadratwurzeln der 1
Wir hatten schon folgendes: Wenn p Primzahl und 1 ≤ a < p mit a2 mod p = 1, dann ist a ∈ {1, −
1}. Das sind die trivialen Quadratwurzeln der 1. Wenn a ∈ Z∗p und a2 mod n = 1 mit a {1,
− 1} folgt daraus, dass n keine Primzahl ist. Zum Beispiel ist 112 mod 15 = 1 und damit ist 15
keine Primzahl. Artjukov hat 1966 dann folgendes vorgeschlagen:
n − 1 = u · 2k , k ≥ 1
Sei nun b0 = au mod n, b1 = au·2 mod n, , bk = au·2 mod n. Man sieht nun:
k
an −1
bi+1 = b2i mod n
Daraus können wir sehr leicht nichttriviale Quadratwurzeln finden (Wir quadrieren eine Zahl {1, − 1} und erhalten vielleicht ein Zahl ∈ {1}). Weiter auf dem Arbeitsblatt dazu, ab Seite 21.
Dies ist die Grundlage für den Miller-Rabin-Primzahltest, der in den Aufzeichnungen gefunden
werden kann.
39
5.3 Der Miller-Rabin-Primzahltest
Beobachtungen. Der Zeitaufwand entspricht dem Fermat-Test, also einer Potenzierung
an−1 ≤ 2 · log n Multiplikationen. Wenn die Ausgabe 1 ist, so ist a ein A-Zeuge und damit folgt,
dass n keine Primzahl ist. Wenn n eine Primzahl ist, dann ist die Ausgabe definitiv 0. Es verbleibt noch:
Sei n ≥ 3 zusammengesetzt. Zeige:
Pr(Ausgabe ist 0) ≤
1
2
Bemerkung. Es gilt sogar, dass die Wahrscheinlichkeit ≤
Beweis erfolgen.
1
4
ist, aber dafür müsste ein anderer
A
A
Beweis. Methode: Wir zeigen, dass LA
n = {a|a A-Lügner} ⊆ Bn , Bn ist echte Untergruppe von
∗
Zn.
i
a ist dabei ein A-Lügner, falls für bi = au·2 mod n b0 = 1 ist oder in {b0, , bk−1} kommt die
− 1 vor. Wir unterscheiden nun 2 Fälle.
1. n ist keine Carmichael-Zahl. Daraus folgt nun aber sofort, dass ∃b ∈ Z∗n mit bn−1 mod n F
n−1
1. Wir behaupten nun, dass LA
mod n = 1}. Dies folgt sofort.
n ⊆ Ln = {a|a
2. Sei n eine Carmichael-Zahl. Sei
i
i0 = max {i|0 ≤ i < k, es existiert a ∈ Z∗n mit au·2 mod = − 1}
Klar ist, dass bk = 1 ist für alle a ∈ Z∗n. Eine − 1 muss existieren, da n − 1 ∈ Z∗n. Also gibt
es einen maximalen Index i0, der für ein a nun − 1 ist. Sei nun BnA = {a ∈
i0
Z∗n |au·2 mod n ∈ {1, − 1}}.
A
Behauptung: LA
n ⊆ Bn .
A
Sei a ∈ Ln . Dann gilt
i0
a. au mod n = 1 ⇒ au·2 mod n = 1. Also ist a auch in LA
n.
i
i
b. in {au·2 mod n|0 ≤ i < k} kommt − 1 vor. Also ist au·2 mod n = − 1 ⇒ j ≤ i0. Wenn
i0
j = i0, dann ist a ∈ BnA. Wenn j < i0, dann ist au·2 mod n =
i0 − j
j
au·2 mod n)2
i0 − j
mod n = ( − 1)2
= 1.
Weitere Behauptung:
BnA ist Untergruppe von Z∗n
i0
i0
Klar ist, dass die 1 in BnA liegt. Seien a, b ∈ BnA ⇒ {au·2 mod n, bu·2 } ⊆ {1, − 1} ⇒
i0
(a b)u·2 mod n ∈ {1 · 1, 1 · ( − 1), ( − 1) · 1, ( − 1) · ( − 1)} ⊆ {1, − 1}
und damit ist a b ∈ BnA. Eine weitere Behauptung: BnA ist echte Teilmenge von Z∗n.
Wir hatten unsere Spalte i0 betrachtet (die am weitesten rechts stehende bi0 = − 1).
Wir behaupten nun, dass in diesesr Spalte auch ein Element existiert, dass weder 1 noch
− 1 ist. Weil n eine Carmichael-Zahl ist, kann man n = n1 · n2 schreiben, mit n1, n2 teilerfremd. Der chinesische Restsatz hat folgende Aussage:
Wenn n = n1n2 mit n1, n2 teilerfremd und 0 ≤ a1 < n1, 0 ≤ a2 < n2, dann existiert genau
ein a mit 0 ≤ a < n, so dass
a mod n1 = a1
a mod n2 = a2
i0
Wir nehmen a mit au·2 mod n = − 1. Nun wünschen wir uns
a1
a2
4
4
a mod n1
1
Nach dem chinesischen Restsatz gibt es nun b mit b mod n1 = a1 und b mod n2 = 1. Wir
nehmen nun an, dass
i0
bu·2 mod n = 1
40
Randomisierte Algorithmen für Probleme aus der Zahlentheorie
Dann folgt damit, dass erst recht gilt:
i0
bu·2 mod n1 = 1
Aber:
i0
i0
mod n1
bu·2 mod n1 = au·2
1
i0
= au·2 mod n1
= −1
Das ist ein Widerspruch. Dann versuchen wir es mit
i0
bu·2 mod n = − 1
Dann gilt
i0
Aber wir wissen bereits:
bu·2 mod n2 = − 1
i0
bu·2 mod n2 = 1
i0
Also ist bu·2 weder 1 noch − 1. Und damit ist BnA „nur“ eine echte Teilmenge von Z∗n.
Daraus folgt dann die gewünschte Aussage.
Unser Fazit ist also:
n zusammengesetzt, dann Pr(Augabe 0) ≤
|BnA | − 2 1
<
2
Z∗n
Und als Fakt sei nochmal erwähnt, dass die Wahrscheinlichkeit sogar nur
1
4
beträgt.
Wir wollen uns nun noch etwas mit der Primzahlerzeugung beschäftigen. Wir wollen dabei
eine zufällige Primzahl in [m, 2m) finden. Der native Ansatz ist logisch. Wir wählen eine ungerade Zahl n in [m, 2m) zufällig, bis der Miller-Rabin-Test bei k Wiederholungen die Primeigen1
schaft von n verifiziert (mit Wahrscheinlichkeit 4k ). Dieser Algorithmus ist natürlich sehr naheliegend. Wie sieht die erwartete Anzahl der Schleifendurchläufe aus? Die Frage ist, wieviele
Primzahlen zwischen m und 2m existieren.
m
E(#Schleifendurchläufe) ≤
#Primzahlen in [m,2m)
m · 3 ln (2m)
(Primzahlsatz, siehe Aufzeichnungen) ≤
m
≤ 3 · ln(2m)
= O(log m)
Wie hoch ist die Wahrscheinlichkeit, dass eine zusammengesetzte Zahl als Primzahl ausgegeben
wird? Wir überlegen uns zuerst, dass
Pr(p wird ausgegeben|PZ wird ausgegeben) =
Nun ist
Pr(Ausgabe ist keine Primzahl) ≤
1
#PZ in [m,2m)
1
4k
Das ist wahr, aber mit unseren Kenntnissen ist dies nicht zu rechtfertigen. Was wir beweisen
können, ist dass
E(#Schleifendurchläufe)
log m
Pr(Ausgabe ist keine Primzahl) ≤
=O
4k
4k
Kapitel 6
Algebraische Methoden
6.1 Der Satz von Schwartz-Zippel
Siehe herumgegebenes Blatt.
6.2 Identität von Polynomen
Wir betrachten hierbei multivariate Polynome, z.B:
17 · X12 · X22 · X45 − 23 · X25 + 6 − 19 · X32 · X52
mit Variablen X1, , Xn und Koeffizienten aus Körper K. Der Grad eines Terms ist:
a · X1l1 · · Xnln: l1 + + ln
Der Grad eines Polynoms ist der Maximalgrad der Terme, z.B.
max {10, 5, 0, 4} = 10
Die Aufgabe ist nun, für gegebenes f1, , fr und g1, , gs fragen wir uns, ob für
f = f1 · · fr , g = g1 · · gs
f = g gilt?
Beispiel 6.1. f ist gegeben durch
und g mit
(X1 − 1), (X2 − 1), , (Xn − 1), (X1 + 1), , (Xn + 1)
X12 − 1, X22 − 1, , Xn2 − 1
Wenn man dies sich kurz anschaut, sieht dass f = g gilt. Ein nativer Ansatz würde dies durch
Ausmultiplizieren lösen. Dies führt uns im schlimmsten Falle zu 2n Termen, dies ist exponentiell!
Wir gehen randomisiert so vor: Wähle S ⊆ K , |S | < ∞. Wähle Ka = (a1,
(uniform) zufällig und berechne
, an) aus S n rein
b = f1(a
K ) · f2(aK ) · · fr(aK ), c = g1(aK ) · · gs(aK )
und geben 1 aus, falls b c und 0 aus, falls b = c. Sei nun d = max {deg(f1) +
deg(g1) + + deg(gs)}. Die Menge S soll nun die Größe |S | ≥ 2d haben.
Behauptung. Wenn f = g ist, dann folgt Ausgabe 0. Wenn f g ist, dann
Pr(Ausgabe 0) ≤
41
d
1
≤
|S | 2
+ deg(fr),
42
Algebraische Methoden
Für die Analyse benötigen wir ein kleines Hilfsmittel (aus Kapitel 6.1). Wir wissen: Wenn ein
Polynom
f (X) = anX n + an−1 X n−1 + + a1 X + a0
mit an 0 über einem Körper k existiert, so hat das Polynom maximal n Nullstellen.
Satz 6.2. Wenn f ein Polynom mit n Variablen X1, , Xn und Grad d ≥ 0 ist, und S ⊆ K, so
besitzt f in S n höchstens d · |S |n−1 Nullstellen.
Wenn wir (a1, , an) ∈ S n zufällig wählen:
Pr(f (a1, , an) = 0) ≤
d · |S |n−1
d
=
|S |n
|S |
Den Beweis für den Satz findet man im Material. Diese Schranke ist optimal.
Sei f (X1, , Xn) = (X1 − 1)(X1 − 2) · · (X1 − d) mit K = Z p. Die Nullstellen von f in Z p ist
(i, a2, , an)
Davon gibt es genau d · p
viele.
Wir wollen nun die Analyse für f g und „Algorithmus gibt 0 zurück“ betrachten. Sei h 4
f − g. Wenn f g, dann ist h nicht das Nullpolynom. Der Grad von h kann dabei nicht größer
sein als d. Daraus folgt nun:
n−1
deg(h)
|S |
1
≤
2
Wir haben also einen Monte-Carlo-Algorithmus mit einseitigem Fehler.
Pr((a1, , an) ist Nullstelle von h) ≤
6.3 Polynomdeterminanten
Sei M eine Matrix, deren Einträge Polynome sind.

f11 M = fm1 f1m
fmm
mit fij = fij (X1, , Xn) sind multivariate Polynome.
Als Beispiel sei die Vandermonte-Matrix erwähnt.

1 X1 X12

 1 X2 X22
V (X1, , Xn) =
 2
1 Xm Xm


X1m−1
m−1
Xm





Wir fragen uns nun, ob die Determinante von M 0 ist. (Also das Nullpolynom). Die Determinante berechnet sich durch
X
Y
fi·σ(i)
sign(σ) ·
σ ∈Sn
1≤i≤m
Der Algorithmus für die Überprüfung, ob eine Determinante einer Matrix das Nullpolynom ist,
geht wie folgt:
•
•
S ⊆ K mit |S | ≥ 2d. d ist eine Abschätzung für deg(det(M )). Immer gilt: n · max
{deg(fij )}
Wähle a = (a1, , an) ∈ S n zufällig.
43
6.4 Perfekte Matchings auf bipartiten Graphen
•
berechne:

det(M (a)) = det
f11(a)
f1m(a)
fm1(a)
fmm(a)


Mit Gauß-Elimination über K können wir diese Determinante dann berechnen. Resultat ist als
s = det(M (a)) und falls s = 0: Ausgabe 0, sonst Ausgabe 1. Das Verhalten ist ähnlich zu 6.2:
•
•
det(M ) = 0 ⇒ Ausgabe 0
det(M ) 0: Polynom vom Grad ≤ d ⇒ Pr(Ausgabe 0) ≤ |S | ≤ 2 .
d
1
6.4 Perfekte Matchings auf bipartiten Graphen
Sei G = (U , V , E) mit |U | = |V | = n. Wir wollen auf diesem Graphen ein bipartites Matching
berechnen. Möglichst perfekt. Wir nutzen dafür die Edmonds-Matrix:


f11 f1n
MG = 
fn1 fnn
mit
0
(ui , v j ) E
fij =
Xij (ui , v j ) ∈ E
Wir betrachten einen lustigen Fakt:
Die Determinante von MG ist genau dann nicht 0, wenn G ein perfektes Matching besitzt.
Warum gilt das? Wir wissen, dass
det(MG) =
X
σ∈Sn
sign(σ)
Y
fiσ(i)
1≤i≤n
Das ist genau dann 0, wenn ein Term existiert, der keinen Faktor 0 enthält. Das ist genau
dann, wenn
∃σ ∈ Sn: (ui , vσ(i)) ∈ E , 1 ≤ i ≤ n ⇔ G hat perfektes Matching
Wie testen wir nun auf perfektes Matching? Sei p > 2 n Primzahl. Wähle aij aus Körper {0, ,
p − 1} zufällig, 1 ≤ i, j ≤ n. Berechne nun MG(a11 , , ann)
mit
MG(a11 , , ann) = (bij )1≤i,j ≤n
bij =
aij (ui , v j ) ∈ E
0 (ui , v j ) E
und s = det(MG(a11 , , ann)) über Z p. Falls s = 0 ist, so geben wir 0 zurück. Falls s
geben wir Ausgabe 1 zurück. Die Luafzeit ist dabei O(n3).
Das Verhalten ist wie folgt:
•
G hat kein perfektes Matching ⇒ Ausgabe ist 0.
0 ist,
•
G hat perfektes Matching ⇒ (det(MG) 0) Pr(Ausgabe 0) ≤
•
es gibt einen randomisierten Algorithmus mit Laufzeit O((log n)3) ⇒ Determinantenberechnung
•
es ist kein deterministischer Algorithmus mit Laufzeit (log n)O(1) für dieses Problem
bekannt.
n
p
1
≤2
Konstruktion von perfekten Matchings in allgemeinen (nicht bipartiten) Graphen auf Parallelrechnern:
Herunterladen