6.Hashing - ra.cs.uni-tuebingen.de · Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik,...

35
Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 1 6.Hashing Hash-Tafeln („Streutafeln“) dienen zur Implementierung von „Wörterbüchern“ (Dictionaries) und sollen daher die Operationen Zugriff, Einfügen und Streichen unterstü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-Funktion h: U [0 ... m-1] abzuspeichern. Ein Element wird dann in T[h(x)] abgespeichert. U S S x

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

≤+⋅≤

+−≤⋅≤

≤≤⇒

+≥

∑∑

∑∑

==

+

Vorlesung Algorithmen (RN/MK/AZ) WSI für Informatik, Universität Tübingen 35

Satz:Sei N Primzahl und S Teilmenge von Umit |S| = n. Dann kann perfekte Hash-Tafelder Größe O(n) on-line in O(n) erwarteterZeit berechnet werden.Zugriffszeit ist O(1).