Wahrscheinlichkeitstheorie für Hashtables
Transcription
Wahrscheinlichkeitstheorie für Hashtables
Etwas Wahrscheinlichkeitstheorie für den Hausgebrauch 1 Hash-Beispiel Elementarereignisse Ω Ereignisse: Teilmengen von {0..m − 1}Key E42 = {h ∈ Ω : h(4) = h(2)} Hash-Funktionen Ω px =Wahrscheinlichkeit von x ∈ Ω. ∑x px = 1 ! 1 ph = m−|Key| px = |Ω| P [E ] = ∑x ∈E px P [E42 ] = m1 Zufallsvariable (ZV) X0 : Ω → R X = | {e ∈ M : h (e ) = 0 } | 0-1-Zufallsvariable (Indikator-ZV) I : Ω → {0, 1} | Erwartungswert E[X ] = ∑y ∈Ω py X (y ) E[X ] = |M m Linearität des Erwartungswerts: E[X + Y ] = E[X ] + E[Y ] Gleichverteilung: 145 Beispiel: Variante des Geburtstagsparadoxon Wieviele Gäste muss eine Geburtstagsparty im Mittel haben, damit mindestens zwei Gäste den gleichen Geburtstag haben? n Gäste (Keys) 1.. . h ∈ Ω = {0..364}{1..n} . Deniere Indikator-ZV Iij = 1 gdw h (i ) = h (j ). n n Anzahl Paare mit gleichem Geburtstag: X = ∑i =1 ∑j =i +1 Iij . Elementarereignisse: n n n n E[X ] =E[ ∑ ∑ Iij ] = ∑ ∑ E[Iij ] i =1 j =i +1 i =1 j =i +1 n n n(n − 1) 1 = ∑ ∑ P [Iij = 1] = · 2 365 i =1 j =i +1 r ! =1 ⇔ n = 1 2 + 1 22 + 730≈ 27.52 146 Mehr zum Geburtstagsparadoxon Standardfomulierung: Ab wann lohnt es sich zu wetten, dass es zwei Gäste mit gleichem Geburtstag gibt? Etwas komplizierter. Antwort: n ≥ 23 m = Hashtabelle der Gröÿe m: h : 1..n → 0..m − 1 ist nur dann mit 2 Wahrscheinlichkeit perfekt wenn m = Ω(n ). Verallgemeinerung: Jahreslänge eine zufällige Hashfunktion vernünftiger Riesige Platzverschwendung. 147 Analyse für zufällige Hash-Funktionen Theorem 1 h ∀k : die erwartete Anzahl kollidierender Elemente ist O(1) falls |M | ∈ O(m). M Beweis. k deniere Kollisionslänge X X := |t [h(k )]| = | {e ∈ M 0 : h(e ) = h(k )} | mit M 0 = {e ∈ M : key(e ) 6= k }. 0 Betrachte die 0-1 ZV Xe = 1 für h (e ) = h (k ), e ∈ M < > < > <> <> <> < >t[h(k)] <> <> < > <> <> t <> Für festen Schlüssel und Xe = 0 sonst. |M 0 | E[X ] = E[ ∑ Xe ] = ∑ E[Xe ] = ∑ P [Xe = 1] = m e ∈M 0 e ∈M 0 e ∈M 0 ∈ O(1) Das gilt unabhängig von der Eingabe M. 148 Zufällige Hash-Funktionen? Naive Implementierung: ein Tabelleneintrag pro Schlüssel. meist zu teuer Weniger naive Lösungen: kompliziert, immer noch viel Platz. meist unsinnig unrealistisch 149 Universelles Hashing Idee: nutze nur bestimmte einfache Hash-Funktionen Denition 2 H ⊆ {0..m − 1}Key falls für alle x, y ist universell x 6= y in Key mit und zufälligem P [h(x ) = h(y )] = 1 m h∈H , . Theorem 3 Theorem 1 gilt auch für universelle Familien von Hash-Funktionen. Beweis. Für Ω=H haben wir immer noch Der Rest geht wie vorher. P [Xe = 1] = m1 . H Ω 150 Eine einfache universelle Familie m sei eine Primzahl, Key ⊆ {0, . . . , m − 1}k Theorem 4 Für a = (a1 , . . . , ak ) ∈ {0, . .n. , m − 1}k deniere o ha (x) = a·x mod m, H · = ha : a ∈ {0..m − 1}k . H · ist eine universelle Familie von Hash-Funktionen x1 * a1 + x2 * a2 + x3 * a3 mod m = ha(x) 151 Beispiel für Für H· a = (a1 , . . . , ak ) ∈ {0, . .n. , m − 1} ha (x) = k = 3, m = 11 a·x mod m, H · wähle k deniere = ha : a ∈ {0..m − 1}k o . a = (8, 1, 5). ha ((1, 1, 2)) = (8, 1, 5) · (1, 1, 2) = 8 · 1 + 1 · 1 + 5 · 2 = 19 ≡ 8 mod 11 152 Beweis. Betrachte zähle a x = (x1 , . . . , xk ), y = (y1 , . . . , yk ) h (x) = h (y). mit a Für jede Wahl der ∑ 1≤i ≤k a ai , i 6= j , ∃ ai xi ≡ ∑ 1≤i ≤k genau ein mit xj 6= yj mit ha (x) = ha (y): aj ai yi ( mod m) ⇔ aj (xj − yj ) ≡ ∑ ai (yi − xi )( mod m) i 6=j ,1≤i ≤k ⇔ aj ≡ (xj − yj )−1 ∑ ai (yi − xi )( mod m) i 6=j ,1≤i ≤k mk −1 Möglichkeiten die ai (mit i 6= j ) mk ist die Gesamtzahl der a, d. h., auszuwählen. P [ha (x ) = ha (y)] = 1 mk −1 = . m mk 153 Bit-basierte Universelle Familien Sei m = 2w , Key = {0, 1}k Bit-Matrix Multiplikation: H ⊕ = hM : M ∈ {0, 1}w ×k wobei hM (x) = Mx (Arithmetik mod 2, d. h., xor, and) n Tabellenzugri:H ⊕[] = wobei {0..2 h(⊕[] t1 ,...,tb ) : ti ∈ {0..m − 1} Lb h(⊕[] t1 ,...,tb ) ((x0 , x1 , . . . , xb )) = x0 ⊕ i =1 ti [xi ] n o a −1} o k x x2 x1 a a x0 w 154