Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation
WS 2006-07 Algorithmentheorie 04 –Hashing Prof. Dr. Th. Ottmann.
-
Upload
adelheit-neidlinger -
Category
Documents
-
view
109 -
download
0
Transcript of WS 2006-07 Algorithmentheorie 04 –Hashing Prof. Dr. Th. Ottmann.
WS 2006-07
Algorithmentheorie
04 –Hashing
Prof. Dr. Th. Ottmann
2 WS 2006-07
Übersicht
Einführung Universelles Hashing Perfektes Hashing
3 WS 2006-07
Das Wörterbuch-Problem
Gegeben: Universum U = [0…N-1], wobei N eine natürliche Zahl ist.
Ziel: Verwalte Menge S U mit folgenden Operationen.• Suche(x,S): Ist x S?• Einfüge(x,S): Füge x zu S hinzu, sofern noch nicht vorhanden.• Entferne(x,S): Entferne x aus S.
4 WS 2006-07
Triviale Implementierung
Array A[0…N-1] wobei A[i] = 1 i S
Jede Operation hat Laufzeit O(1), aber der Platzbedarf ist (N).
00 00 11 11 00 11 11 11 110000AA
00 NN-1-1
Ziel:Ziel: Platzbedarf O(| Platzbedarf O(|SS|) und erwartete Laufzeit O(1).|) und erwartete Laufzeit O(1).
5 WS 2006-07
Idee des Hashings
Verwende ein Array der Länge O(|S|).
Berechne die Position, an der ein Element abgespeichert wird
mit Hilfe einer Funktion aus dem Schlüssel.
Universum U = [0…N-1]
Hash-Tafel Array T[0…m-1]
Hash-Funktion h: U [0…m-1]
Ein Element x S wird in T[h(x)] gespeichert.
6 WS 2006-07
Beispiel
N = 100; U = [0…99]; m = 7; h(x) = x mod 7; S = {3, 19, 22}
2222
1919
33
00
112233445566
Soll als nSoll als nächstes 17 eingefügt werden, so tritt eineächstes 17 eingefügt werden, so tritt eineKollisionKollision auf, denn auf, denn hh(17) = 3.(17) = 3.
7 WS 2006-07
Lösungsmöglichkeiten für Kollisionen
Hashing mit Verkettung: T[i] enthält eine Liste von Elementen.
Hashing mit offener Adressierung: Statt einer Adresse für ein
Element gibt es m viele, die der Reihe nach ausprobiert werden.
Universelles Hashing: Wähle eine Hash-Funktion, so dass wenige
Kollisionen entstehen. Kollisionen werden durch Verkettung
aufgelöst.
Perfektes Hashing: Wähle eine Hash-Funktion, so dass keine
Kollisionen entstehen.
8 WS 2006-07
Universelles Hashing
Idee: Verwende eine Klasse H von Hash-Funktionen. Die tatsächlich
verwendete Hash-Funktion h H wird zufällig aus H gewählt.
Ziel: Für jedes S U soll die erwartete Laufzeit jeder Operation
O(1 + sein, wobei = |S|/m der Lastfaktor der Tafel ist.
Eigenschaft von H: Für zwei beliebige Elemente x,y U führen nur
wenige h H zu einer Kollision (h(x) = h(y)).
9 WS 2006-07
Universelles Hashing
Definition: Seien N und m natürliche Zahlen. Eine Klasse
H { h : [0…N-1] [0…m-1] } heißt universell, wenn für alle
x,y U = [0…N-1], x y, gilt:
Intuitiv: Ein zufällig gewähltes h ist genau so gut, wie wenn die
Tafelpositionen der Elemente zufällig gewählt würden.
mH
yhxhHh 1
||
|)}()(:{|
10 WS 2006-07
Eine universelle Klasse von Funktionen
Seien N, m natürliche Zahlen, wobei N prim ist.
Für Zahlen a {1, … , N-1} und b {0, … , N-1} sei
ha,b : U = [0…N-1] {0, … , m-1} definiert durch:
ha,b (x) = ((ax + b) mod N) mod m
Satz: H = {ha,b (x) | 1 a < N und 0 b < N} ist eine universelle Klasse
von Hash-Funktionen.
11 WS 2006-07
Beweis
Betrachte festes Paar x,y mit x y .
ha,b(x) = ((ax+b) mod N) mod m ha,b(y) = ((ay+b) mod N) mod m
1. Paare (q,r) mit q = (ax+b) mod N und r = (ay+b) mod N
durchlaufen für variables a,b den gesamten Bereich
0 q,r < N mit q r
-- q r : q = r impliziert a(x-y) = cN
-- Verschiedene Paare a,b ergeben verschiedene Paare (q,r).
(ax+b) mod N = q (ay+b) mod N = r
(a’x+b’) mod N = q (a’y+b’) mod N = r
implizieren (a-a’)(x–y) = cN
12 WS 2006-07
Beweis
Festes Paar x,y mit x y .
ha,b(x) = ((ax+b) mod N) mod m ha,b(y) = ((ay+b) mod N) mod m
2. Wieviele Paare (q,r) mit q = (ax+b) mod N und r = (ay+b) mod N
werden auf die gleiche Restklasse mod m abgebildet?
Für festes q gibt es nur (N-1)/m Zahlen r, mit
q mod m = r mod m und q r.
|{h H : h(x) = h(y)}| N(N-1)/m = |H|/m
13 WS 2006-07
Analyse der Operationen
Annahmen: 1. h wird zufällig (gemäß Gleichverteilung) aus einer universellen
Klasse H gewählt.
2. Kollisionen werden durch Verkettung gelöst.
Für h H und x,y U sei
ist die Anzahl der von x verschiedenen
Elemente in T[h(x)], wenn S gespeichert wird.
Sy hh yxSx ),(),(
sonst0
und )()(1),(
yxyhxhyxh
14 WS 2006-07
Analyse der Operationen
Satz: Sei H eine universelle Klasse und S U = [0…N-1] mit |S| = n.
1. Für x U gilt:
2. Die erwartete Laufzeit einer Suche-, Einfüge bzw. Lösche-Operation
ist O(1 + ), wobei = n/m der Lastfaktor ist.
Sxmn
SxmnSx
H Hhh /)1(1
/1)),(1(
||
1
15 WS 2006-07
Beweis
1.
SxmnH
SxmnH
m
HH
yxH
yxHSx
xSy
Sy Hhh
Hh Syh
Hhh
)/)1(1(||
)/1(||
||||
),(||
),(||)),(1(
}\{
2. Folgt aus 1.2. Folgt aus 1.
16 WS 2006-07
Perfektes Hashing
Wähle eine Hash-Funktion, die für die abzuspeichernde Menge S
injektiv ist. S sei im Voraus bekannt.
Zweistufiges Hashverfahren
1. Die erste Stufe verteilt S auf “kurze Listen”.
(Hashing mit Verkettung)
2. In der zweiten Stufe wird für jede Liste eine eigene injektive
Hash-Funktion benutzt.
17 WS 2006-07
Konstruktion von injektiven Hashfunktionen
Sei U = [0…N-1]
Für k {1,…,N-1} sei
hk : U {0,…,m-1}
x ((kx) mod N ) mod m
Sei S U. Kann k so gewählt werden, dass hk eingeschränkt auf S injektiv ist?
hk eingeschränkt auf S ist injektiv, wenn für alle x,y S, x y, gilt
hk(x) hk(y)
18 WS 2006-07
Maß für Verletzung der Injektivität
Für 0 i m-1 und 1 k N-1 sei
bik = |{ x S : hk(x) = i }|
Dann gilt:
|{ (x,y) S2 : x y und hk(x) = hk(y) = i }| = bik (bik – 1)
Definiere
Bk misst, wie wenig injektiv hk eingeschränkt auf S ist.
)1(1
0
ik
m
iikk bbB
19 WS 2006-07
Injektivität
Lemma 1: hk eingeschränkt auf S ist injektiv Bk < 2
Beweis:
Bk < 2 Bk 1 bik (bik – 1) {0,1} für alle i
bik {0,1} hk eingeschränkt auf S ist injektiv
hk eingeschränkt auf S ist injektiv bik {0,1} für alle i
Bk = 0
20 WS 2006-07
Injektivität
Lemma 2: Sei N Primzahl, S U = [0…N-1] mit |S| = n. Dann gilt
Ist m > n(n-1), so existiert Bk mit Bk < 2,
d.h. es existiert ein hk, das eingeschränkt auf S injektiv ist.
1)1(
21
1
Nm
nnBk
N
k
21 WS 2006-07
Beweis von Lemma 2
Sei (x,y) S2, x y, fest. Wie viele k mit hk(x) = hk(y) gibt es?
yxSyx
kk
N
k
m
ikk
N
k
m
iikik
yhxhk
iyhxhyxSyx
bb
2),(
1
1
1
0
2
1
1
1
0
|)}()(:{|
|})()(,:),{(|
)1(
22 WS 2006-07
Beweis von Lemma 2
cmNyxk
mNkyNkx
mNkymNkx
yhxh kk
mod)(
0mod)modmod(
mod)mod)((mod)mod)((
)()(
q = k(x-y) mod N-- verschiedene k, k’ ergeben verschiedene q, q’. k(x-y) mod N = q k’(x-y) mod N = q (k-k’)(x-y) = c’N
-- nur (N-1)/m viele q werden auf dieselbe Restklasse mod m abgebildet
23 WS 2006-07
Folgerungen
Korollar 1: Es gibt mindestens (N-1)/2 viele k mit Bk 4n(n-1)/m.
Ein solches k an in erwarteter Zeit O(m+n) bestimmt werden.
Beweis: Annahme: ex. weniger als (N-1)/2 viele k mit Bk 4n(n-1)/m.
Dann ex. mindestens (N-1)/2 viele k mit Bk 4n(n-1)/m
Mit WSK ½ erfüllt ein zufällig gewähltes k die Bedingung. Die erwartete Anzahl der Versuche ist 2.
)1(21)1(4
2
11
1
nnm
N
m
nnNB
N
kk
24 WS 2006-07
Folgerungen
Korollar 2:
a) Sei m = 2n(n-1)+1. Dann sind mindestens (N-1)/2 der hk injektiv auf S. Ein solches hk findet man in erwarteter Zeit O(m+n)=O(n2).
b) Sei m = n. Dann gilt für mindestens (N-1)/2 der hk, dass
Bk 4(n-1). Ein solches hk findet man in erwarteter Zeit O(n).
25 WS 2006-07
Zweistufiges Schema
S U = [0…N-1] |S| = n = mIdee: Wende Kor. 2b an und teile S in Teilmengen der Größe O(n). Auf jede Teilmenge wende Kor. 2a an.
1. Wähle k mit Bk 4(n-1) 4n.
hk : x ((kx) mod N ) mod n
2. Wi = { x S : hk(x) = i }, bi = |Wi |, mi = 2bi (bi –1)+1 für 1i n-1
Wähle ki so, dass
eingeschränkt auf Wi injektiv ist.
iik mNxkxhi
mod)mod(:
26 WS 2006-07
Zweistufiges Schema
3.
Speichere x S in Tafelposition T[si + j] wobei
i = (k x mod N) mod n j = (ki x mod N) mod mi
ij ji ms
WW00
WW11
WWn-1n-1
SS((kx kx modmod N N)) modmod n n
s1
snn-11
m-1m-1
27 WS 2006-07
Platzbedarf für Hash-Tafel und Hash-Funktion
Zusätzlich braucht man Platz für die ki, mi und si.
Platzbedarf insgesamt O(n).
nnn
Bnbbmm ki
n
ii
n
ii
9)1(8
2)1)1(2(1
0
1
0
28 WS 2006-07
Zeitbedarf für den Aufbau
Nach Kor. 2b kann k in erwarteter Zeit O(n) gefunden werden.
Die Wi, bi, mi, si können in Zeit O(n) berechnet werden.
Nach Kor. 2a kann jedes ki in erwarteter Zeit O(bi2) berechnet
werden.
Erwartete Gesamtlaufzeit:
)()(0
2 nOBnObnO k
n
ii
29 WS 2006-07
Hauptergebnis
Satz: Sei N eine Primzahl und S U = [0…N-1] mit |S| = n.
Für S kann eine perfekte Hash-Tafel der Größe O(n) und eine
Hash-Funktion mit Zugriffszeit O(1) in erwarteter Zeit O(n)
aufgebaut werden.