Effiziente Algorithmen Randomisierte Algorithmen Bloom-Filter Wir wollen einmal ein Wörterbuch erstellen. Dann schlagen wir sehr oft darin nach, ob es gegebene Wörter enthält. Das Wörterbuch enthalte w1 , . . . , wn . Wieviel Platz benötigen wir dafür? 371 Effiziente Algorithmen Randomisierte Algorithmen Universelles Hashing Definition Es sei H eine nicht-leere Menge von Funktionen U → {1, . . . , m}. Wir sagen, daß H eine universelle Familie von Hashfunktionen ist, wenn für jedes x, y ∈ U , x 6= y folgendes gilt: 1 |{ h ∈ H | h(x) = h(y) }| ≤ |H| m 372 Effiziente Algorithmen Randomisierte Algorithmen Theorem Es sei H eine universelle Familie von Hashfunktionen U → {1, . . . , m} für das Universum U und S ⊆ U eine beliebige Untermenge. Wenn x ∈ U , x ∈ / S und h ∈ H eine zufällig gewählte Hashfunktion ist, dann gilt |S| E |{ y ∈ S | h(x) = h(y) }| ≤ . m Beweis E |{ y ∈ S | h(x) = h(y) }| = X y∈S X |{ h ∈ H | h(x) = h(y) }| |S| ≤ Pr[h(x) = h(y)] = |H| m y∈S 373 Effiziente Algorithmen Randomisierte Algorithmen Satz Sei x ∈ U beliebig, H eine universelle Familie von Hashfunktionen U → {1, . . . , m} und k eine beliebige Zahl aus {1, . . . , m}. Dann gilt Pr[h(x) = k] = 1/m, falls h zufällig aus H. Beweis Nehmen wir an, es gibt ein y mit h(y) = k. Dann setze S = {y} und wende das letzte Theorem an: |S| E |{ y ∈ S | h(x) = h(y) }| ≤ . m Hier folgt daraus Pr[h(x) = k] ≤ 1/m. Wenn es kein y mit h(y) = k gäbe, dann wäre Pr[h(x) = k] = 0. Das geht aber nicht, denn m X k=1 Pr[h(x) = k] = 1. 374 Effiziente Algorithmen Randomisierte Algorithmen Eine universelle Hashfamilie Sei U = {0, . . . , p − 1}, wobei p eine Primzahl ist. Es sei ha,b (x) = ((ax + b) mod p) mod m. Wir definieren H = { ha,b | 1 ≤ a < p, 0 ≤ b < p} Theorem H ist eine universelle Familie von Hashfunktionen. 375 Effiziente Algorithmen Randomisierte Algorithmen Es seien x, y ∈ {0, . . . , p − 1}, x 6= y. Wir wollen zunächst zeigen, daß die Funktion f : (a, b) 7→ (ax + b mod p, ay + b mod p) für a, b ∈ {0, . . . , p − 1} injektiv und somit auch bijektiv ist. (ax + b mod p, ay + b mod p) = (a′ x + b′ mod p, a′ y + b′ mod p) ⇔(ax + b − b′ mod p, ay + b − b′ mod p) = (a′ x mod p, a′ y mod p) ⇔(b − b′ mod p, b − b′ mod p) = ((a′ − a)x mod p, (a′ − a)y mod p) ⇔(a′ − a)x mod p = (a′ − a)y mod p ⇔ a′ = a ∧ b′ = b 376 Effiziente Algorithmen Randomisierte Algorithmen Nach wie vor gelte x, y ∈ {0, . . . , p − 1}, x 6= y. Für wieviele Paare (a, b) haben cx := ax + b mod p und cy := ay + b mod p den gleichen Rest modulo m? Wir haben auf der letzten Folie bewiesen, daß sich für jedes Paar (a, b) ein eindeutiges Paar (cx , cy ) ergibt. Für ein festes cx gibt es nur p+m−1 p−1 ⌈p/m⌉ − 1 = −1≤ m m viele mögliche Werte von cy mit cx ≡ cy mod m und cx 6= cy . Weil p verschiedene Werte für cx existieren, gibt es insgesamt höchstens p(p − 1)/m Paare der gesuchten Art. |{ h ∈ H | h(x) = h(y) }| p(p − 1)/m 1 ≤ ≤ |H| p(p − 1) m 377 Effiziente Algorithmen Randomisierte Algorithmen Min-Cut Einfacher Algorithmus: Kontrahiere zufällige Kanten, bis nur zwei Knoten übrig. Mit Wahrscheinlichkeit Ω(n−2 ) ein Min-Cut. Verwende Amplifizierung. √ Verbesserung: Zwei Kontraktionssequenzen bis etwa n/ 2 Knoten bleiben, dann rekursiv. 378 Effiziente Algorithmen Randomisierte Algorithmen 379 Treaps 4 313 3 13 1847 317 2 10 22 4588 1748 332 1 5 11 16 8985 4254 6569 1234 7 12 14 18 4434 8473 1263 1262 6 8 15 17 20 4904 6606 5562 5592 2189 9 19 21 9978 8596 5376 Effiziente Algorithmen Randomisierte Algorithmen 380 Skip-Lists head 1 3 5 6 7 9 11 13 15 17 19 tail Effiziente Algorithmen Randomisierte Algorithmen ENDE 381