6.Hashing - ra.cs.uni-tuebingen.de · Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik,...
Transcript of 6.Hashing - ra.cs.uni-tuebingen.de · Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik,...
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 1
6.HashingHash-Tafeln („Streutafeln“) dienen zur Implementierungvon „Wörterbüchern“ (Dictionaries) und sollen daherdie Operationen Zugriff, Einfügen und Streichenunterstützen.
Ausgangslage:Universum U = [0 ... N-1], ist die zu verwaltende Menge.Operationen: Zugriff(a,S), Einfügen(a,S), Streichen(a,S)Grundprinzip ist es, die „wenigen“ Elemente von S (|S| << |U|)in einem kompakten Array T mit Hilfe einer Hash-Funktionh: U [0 ... m-1] abzuspeichern.Ein Element wird dann in T[h(x)] abgespeichert.
US ⊆
Sx∈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 2
Beispiel: m = 5, S = {3, 15, 22, 24}, U = [0 ... 99]h(x) = x mod 5
Hash-Tafel T: 0:1:2:3:4:
15
22324
Offensichtlich: Problem von Kollisionen,d.h. h(x) = h(y) für .yx ≠
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 3
Forderungen an Hash-Funktionen:
- Einfache Berechenbarkeit- Minimierung der Kollisionsanzahl
Zwei Hauptmethoden zur Kollisionsbehandlung:
- Hashing mit Verkettung und- Hashing mit offener Adressierung
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 4
6.1 Hashing mit VerkettungHash-Tafel als Array von linearen Listen realisiert.Die i-te Liste ( ) enthält alle Elemente mit h(x) = i.
mi <≤0 Sx∈
Worst Case: Alle Elemente in einer Liste abgespeichertalle Operationen erfordern lineare Laufzeit O(|S|).
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 5
Im Durchschnitt aber viel besseres Verhalten. Um dieseszu analysieren, machen wir folgende Annahmen:
1) h(x) in O(1) Schritten berechenbar.
2) Hash-Funktion h: U →[0 .. m-1] verteilt das Universumgleichmäßig auf das Intervall [0 .. m-1], d.h.
3) Alle Elemente von U sind mit gleicher WahrscheinlichkeitArgument einer Operation in einer Sequenz von Operationen,d.h. das Argument der k-ten Operation der Sequenz ist einfestes mit Wahrscheinlichkeit 1/|U|.
( ) 1 ..., ,0 1 −=∀
≤− mi
mU
ih
Ux∈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 6
Mit Annahmen 2) und 3) folgt:Sei xk Argument der k-ten Operation. Dann
Pr(h(xk)= i) =
wobei n die Anzahl der Operationen sei.
[ ][ ] , ... m- i
... n k m
10
11
∈∀
∈∀
Satz: Es gelten die Annahmen (1 - 3).Nehmen wir an, dass n Operationen stattfanden.Dann sind die erwarteten Kosten EKn+1 einerdarauffolgenden Operation O (1+β) , wobei .
mn
=β
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 7
Beweis: Schlimmstenfalls vorher n Einfügungen in die Tafel,sodass dies die maximale Kollisionswahrscheinlichkeit ergibt.Angenommen h(xn+1) = i.sei Pr(Ln(i) = j) Wahrscheinlichkeit, dass die i-te Liste nachder n-ten Operation Länge j hat. Dann gilt
Weiter gilt
( )( ) ( ).1Pr0
1 ∑=
+ +⋅=≤n
jnn jjiLEK
( )( ) .111Prjnj
n mmjn
jiL−
−
≤=
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 8
( )
β+=+=
−++=
−
−+=
−
−−
+=
−
−−
+=
⋅
+≤
−
−
=
−−
=
−−−−
=
−
=+
∑
∑
∑
∑
11
1111
11111
11111
1
11111
1
1111
1
1
0
1
1
111
1
01
mn
mmmn
mmjn
mn
mmjn
mn
mmjn
n
jm
-mj
nEK
n
n
j
jnj
n
j
jnj
n
j
jnj
n
j
n-jj
nDaraus folgt:
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 9
Bei obigem Satz ist Annahme 3) am kritischsten – eherselten Zugriff auf Hash-Tafel gleichverteilt ...(Bsp. Symboltabellen (Compiler)).
Aus Wissen über „Zugriffsverteilung“ läßt sich aberggf. eine bessere Hash-Funktion konstruieren und zuweilensogar bessere (erwartete) Laufzeiten erzielbar.
Weiterhin hängen erwartete Kosten von Belegungsfaktorab:
mn
=β
konstant.Kosten erwartete .const ⇒=β
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 10
Problem: Wahl von m:- m (zu) groß hohe Speicherkosten und
mitunter erhöhte Laufzeit.- m (zu) klein erwartete Kosten (zu) hoch.
Fazit: Mit Einfügen bzw. Streichen kann schnell zu großoder zu klein werden.
Lösungsansatz: „Rehashing“:Idee: Benutze Folge T0, T1, T2, ... von Hash-Tafeln der
Größen m, 2m , 4m, ... zusammen mit jeweiligenHash-Funktionen h0, h1, h2, ...Beginn mit T0.
β
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 11
1) Wenn in Ti (der Größe 2i·m) nunSpeichere in Ti+1 um
neuer Belegungsfaktor
2) Wenn in Ti nun
Speichere in Ti-1 um (mit Ausnahme von i = 0)
neuer Belegungsfaktor
1=β
21´=β
41
=β
21´=β
Nach Rehashing gemäß 1) mindestensOperationen bis zum nächsten Rehashing möglich.
mm ii 2212
41 1 ⋅=⋅⋅ +
Nach Rehashing gemäß 2) mindestensOperationen bis zum nächsten Rehashing möglich.
mi ⋅⋅ −1241
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 12
In beiden Fällen Rehashing-Kosten somit höchstens umFaktor 2 größer als die danach bei „günstigem“Belegungsfaktor mindestens ausführbaren Operationen.
D.h., dass „amortisiert“ die erwarteten Kosten pro Operationimmer konstant gehalten werden können, ohne allzu vielSpeicher zu verschwenden.
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 13
6.2 Hashing mit offener Adressierung
Grundidee: Jedes Element definiert Folge h(x,i),i = 0, 1, 2, ... von Tafelpositionen.Diese Sequenz ist durchzugehen, wann immereine Operation mit x ausgeführt werden soll.
Oft h(x,i) als Kombination zweier Hash-Funktionen gewählt:h(x,i) = [h1(x) + i·h2(x)] mod m
Vorteil: Kein zusätzlicher Speicherbedarf.
Nachteil: Schlechte Leistung bei Belegungsfaktor nahe 1 undkeine Unterstützung des Streichens.
Ux∈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 14
6.3 Perfektes Hashing
Hash-Funktion sollte injektiv sein, falls S bekannt ist.
Grundschema:
Stufe 1 arbeitet mit Hashing mit Verkettungkreiert „kurze“ Listen
Stufe 2 benutzt für jede Liste eine eigene, injektiveHash-Funktion
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 15
Zunächst zur Wahl einer injektiven Hash-Funktion:
Sei U = {0, 1, ..., N-1} und seihk : {0, ..., N-1} [0 .. m-1] Hash-Funktionfür {1, ..., N-1} mit
hk (x) := ((k•x) mod N) mod m.
Sei mit |S| = n bekannt.Für welches k ist hk injektiv?Messung der „Injektivität“ durch:
∈k
US ⊆
( ){ }10
11für ::m-i
,N-kixhSxb kik
≤≤
≤≤=∈=
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 16
Dann
( ) ( ) ( ) ( ){ } iyhx hy,xSx,y bb kkikik ==≠∈=−⋅ 21
Anzahl der Paare mit Wert i, die „Injektivität“ verletzen.
Sei Somit Zahl der Paare in S2, die
„Injektivität von hk“ verletzen:
( )∑−
=
−=1
01:
m
iikikk .bbB
benutzt. falls n,Kollisione #2 kk hB ⋅≈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 17
Lemma: Voraussetzungen wie oben. Dann
1. Bk < 2 gdw. hk|S injektiv.
2. Falls
(d.h. gleichverteilt), dann
{ }10, ..., m-i mnbik ∈∀=
−=
−=∑
−
=
111
0 mnn
mn
mnB
m
ik
Beweis: 2. Offensichtlich per Def.1. ( ) { } { }
injektiv.
101012 :""1
0
h
, i:b , bbB
Sk
ik
m
iikikk
⇒
∈∀⇒∈−⇔<⇒ ∑−
=
{ } 010injektiv"" =⇒∈∀⇒⇐ kikSk B, i b : h
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 18
( ) ( ) ( )11211
1
1
0−
−⋅≤−∑∑
−
=
−
=
Nmnnbb
N
k
B
m
iikik
k
4434421
Lemma: Voraussetzungen wie oben, desweiteren seiN Primzahl. Dann gilt
Bemerkung:Lemma mittlere Anzahl der Kollisionen
(da )
Mit m > n(n-1) ist mittlere Anzahl < 1 undd.h., es gibt hk, das auf S injektiv ist!
( )mnn 1−
≤
kk hB vonBenutzung beiKoll´en #2⋅≈
⇒
⇒
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 19
Beweis des Lemmas:
( )
( ) ( ) ( ){ }
( ) ( ){ }( )∑
∑∑
∑∑
≠∈
−
=
−
=
−
=
−
=
==
==≠∈=
−
yxSx,y
kk
N
k
m
ikk
N
k
m
iikik
yhx h k
iyhxy, hS, xx,y x,y
bb
2
1
1
1
0
1
1
1
01
Seien fest. Wieviele Funktionen hk mithk(x) = hk(y) gibt es?
Syx ∈,
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 20
hk(x) = hk(y)(k•x mod N) mod m = (k·y mod N) mod m((k•x mod N) – (k·y mod N)) mod m = 0
⇔⇔
=: g(k)
Es gilt
und mit
( ) 11 −≤≤+− NkgN
( ) mikg ⋅=
−
+−
∈m
NmNi 1,...,1
Behauptung: Für jedes i gibt es höchstens ein k mit g(k) = i·m.
Falls Beh. wahr, so gilt: |{ k| hk (x) = hk (y) }|
−⋅≤
mN 12
( ) ( )∑∑−
=
−
=
−−
⋅≤−1
1
1
01121
N
k
m
iikik nn
mNbbGesamtsumme:
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 21
Beweis der Behauptung:Seien mit g(k1) = g(k2):
g(k1) = g(k2)k1x mod N – k1y mod N = k2x mod N – k2y mod N(k1x – k1y) – (k2x – k2y) mod N = 0((k1 – k2)(x – y)) mod N = 0
⇒
[ ]1021 ... N- , kk ∈
⇒
⇒
Da Z|N Körper, folgt entweder k1 – k2 mod N = 0oder x – y mod N = 0.Wegen [ ] .k ky x .. N, kx, y, k 2121 folgtund 10 =≠−∈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 22
[ ] ( )
( ) .14mit s'haben s' viele2
1- Mindestens .2
1211 .1
mnn BBhN
mnn:BN-k
kkk
k
−≤
−⋅≤∈∃ K
Korollar 1: Voraussetzungen wie oben (Lemma).
Beweis: 1. ist Mittelwert, ein hk muss Bk mit
diesem oder kleinerem Wert haben ...
2. Sei -Annahme:
Dann
im Widerspruch zum Lemma!
( )mnn 12 −
⋅
( ) .14:
−
>=mnnBkA k .
21−
>NA
( ) ( ) ( )112142
11
1−
−=
−⋅
−>≥ ∑∑
∈
−
=
Nmnn
mnnNBB
Akk
N
kk
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 23
Korollar 2 Teil 11. Ein
ist in Zeit O(m + Nn) bestimmbar.2. Sei m = n(n – 1)+1. Dann gibt es k derart, dass hk|S injektiv.
k in Zeit O(n2+Nn) zu finden.3. Sei m = 2n (n – 1) +1. Dann mind. Hälfte der hk|S injektiv.
Bestimmungszeit O(n2) randomisiert.
[ ] ( )mnnBNk k
12mit 1..1 −≤−∈
Beweis: 1. Teste alle k durch. Es gibt N – 1 verschiedene k´sund n versch. „Wirf x´e in Fächer in Ges.zeit O(n·N).Schau jeweils nach, ob Fächer zu „voll“ (Zeit O(m)).
2. Einsetzen bei 1. liefert Bk < 2 injektiv!3. Einsetzen in Kor.1 Mind. Hälfte der hk´s haben
Bk´s mit Bk < 2 Mind. Hälfte der hk´s injektiv.⇒⇒
⇒
.Sx∈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 24
Korollar 2 Teil 24. randomisiert
in Zeit O(m + n) bestimmbar.5. Sei m = n. k mit in Zeit O(n·N) zu finden.6. Sei m = n. k mit randomisiert in Zeit O(n)
zu finden.
[ ] ( )mnnBNk k
14mit 11 −≤−∈ K
( )12 −≤ nBk
( )14 −≤ nBk
Beweis: 4.
... „randomisiert“ trifft man ein solches k in Zeit O(m + n).5. Einsetzen bei 1.6. Einsetzen bei 4.
( )2114 Prob ≥
−
<mnnBk
⇒
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 25
Zur Realisierung:
Stufe 1: Sei m = n. Gemäß Kor. 2, 1. gibt es dann Hash-Fkt. hk,sodass Listenlängen alle
Denn:
Stufe 2: Auf jede dieser Teilmengen ( Listen) wendenochmals Hashing an.
( ). nO
( ) ( ) ( )
( ) ( ). en Listenläng d.h. ,
12121Kor.2,1..Def1
0
nOinOb
nmnnBbb
ik
mn
k
m
iikik
∀∈⇒
−=−
≤=−=−
=∑
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 26
Die Einzelheiten:[ ] : Primzahl, , 10 Sei mnS N .. N-S ==⊆
1. Wähle k mit Sei hk = ((k• x) mod N) mod m.
2. Sei
Wähle ki mit (x) = ((ki• x) mod N) mod mi, sodassinjektiv für wi.
( ) .414 nnBk ≤−≤
( ){ }( ) 112 und
, :+−=
==∈=
iii
iiki
bb:mwbixhSxw
ikh
ikh
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 27
3. Sei
Dann speichere in Tafelposition
∑<
=ij
ji ms :
Sx∈ [ ], jsT i +
( )( )( )( ) .modmod und
modmod wobei
ii mNxkjmNxki
⋅=⋅=
0
m0-1m0 = s1
Bild: w0
sw1
s2-1((k• x) mod N) mod n ::
:: :
sn-1wn-1 mn-1+sn-1-1
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 28
Komplexitätsanalyse:
Platzbedarf:
Laufzeit:
Schritt 1: O(n) randomisiert nach Korollar 2, 6.
Schritt 2: O(n) randomisiert, da bi = in Kor. 2, 3.
Schritt 3: O(mi + bi) für jedes ki, d.h. insges. O(n).
: O(n + m) = O(n) randomisiert!
( )[ ]
( ) ( ).8918
2112
6 Kor.2,
1
0
1
0
nOnnn
Bnbbm k
m
iii
m
ii
=−=−+≤
+=+−=∑∑−
=
−
=
( )nO
∑
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 29
Satz: Voraussetzungen wie oben.Dann kann für S perfekte Hash-Tafel der Größe O(n)und Hash-Funktion mit O(1) Zugriffszeit deterministischin Zeit O(n·N) und randomisiert in O(n) erwarteter Zeitaufgebaut werden.
Bemerkung:Randomisierte Version sehr zu bevorzugen!
Wie macht man es nun wirklich, speziell „on-line“?
Szenario: Starte mit leerer Hash-Tafel, füge x1 ein, dann x2 usw.Beim i-ten Durchgang nur x1, ..., xi bekannt.
Grundschema: Falls auf Stufe 1 zu viele Kollisionen, oder aufStufe 2 nicht injektive Hash-Funktion, so verändereHash-Funktion bzw. -Tafel.
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 30
Tafelaufbau:
[ ] ; .. N-k 11∈Wählefor i = 0 to n – 1 do Initialisierung
wähle ki zufälligod;
m n; B 0;for l = 0 to n – 1 do Insert(xl) od;
Insert(x)
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 31
Insert(x):i ((k•x) mod N) mod n; j ((ki•x) mod N) mod mi;wi wi {x}; B B + 2•bi; bi bi + 1;if B > 4(n-1) then Tafelaufbauelse if T[si + j] frei then speichere x in T[si + j]
else (* nicht injektiv *)if mi < 2 bi(bi – 1) +1then vergrößere Bereich für wifi;
versuche_wieder: (* Wähle neue Fkt. für wi *)wähle ki zufällig;lösche Bereich T[si ... si + mi – 1]
for all doj ← ((ki•x) mod N) mod mi;if T[si + j] frei then speichere x dortelse goto versuche_wiederfi;
od;fi;
fi;
∪
ii wkh
iwx∈
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 32
Analyse:Tafelaufbau und versuche_wieder können oft vorkommen.
versuche_wieder:Test, ob gewähltes ki gut, kostet Zeit O(bi)mi immer groß ( ) gehalten, sodass ki
mit W.´keit injektiv für wi,
d.h. im Mittel nur 2mal versuche_wieder, also O(bi)Zeit, um injektive Hash-Funktion für wi zu finden.
Sei bif Wert von bi nach allen Einfügungen.
Dann ist Gesamtzeit für festes i
( ) 112 +−≥ ii bb
21≥
( )( ). 2
1
fi
b
jbOjO
fi
=
≤ ∑
=
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 33
Tafelaufbau:Passiert, wenn B > 4(n – 1).
Nach Kor. 2, 4 bzw. 6 (Beweis) gilt für zufälliges k
Da aktuelles , brauchen wir im MittelVersuche für k :
Tafelaufbauzeitkomplexität insgesamt
( ) ( ) .21t mit W.´kei 141
1
0≥−≤−=∑
−
=
nbbBn
i
fi
fi
f
fBB ≤2≤
( ) ( ) ( ) ( ) ( )nOBOnObOnO fn
i
fi =+=
+ ∑
−
=
1
0
2⇒
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 34
Platzbedarf:mi wächst während des Einfügens.Seien mi,1, mi,2, ... die versch. Werte für mi undmi
f der letzte Wert.Es gilt:
( )( )( ) nnn-
bbm
mmm
m m
n
i
fi
fi
n-
i
fi
fi
pp
fi
pi,p
i,pi,p
342148
2182
:zbedarfGesamtplat
22
12
1
0
1
0
0
1
≤+⋅≤
+−≤⋅≤
⇒
≤≤⇒
+≥
∑∑
∑∑
−
==
≥
+