39
Hashing Algorithmen und Datenstrukturen II 1

Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

  • Upload
    lyliem

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Hashing

Algorithmen und Datenstrukturen II 1

Page 2: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Einführendes Beispiel

Ein Pizza-Lieferservice in Bielefeld speichert die Daten seiner Kunden: Name,Vorname, Adresse und Telefonnummer. Wenn ein Kunde seine Bestellungtelefonisch aufgibt, um dann mit der Pizza beliefert zu werden, dann muss er seineTelefonnummer angeben, da er über diese Nummer eindeutig identifiziert werdenkann.

Algorithmen und Datenstrukturen II 2

Page 3: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Telefonnummer Name Vorname PLZ Straße

00000000 Müller Heinz 33615 Unistraße 15

00000001 Schmidt Werner 33615 Grünweg 1

00000002 Schultz Hans 33602 Arndtstraße 12

. . . . . . . . . . . . . . .

99999997 Meier Franz 33609 Kirchweg 4

99999998 Neumann Herbert 33612 Jägerallee 15

99999999 Schröder Georg 33647 Mühlweg 2

Algorithmen und Datenstrukturen II 3

Page 4: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000potentielle Einträge, verteilt auf mehrere Pizza-Lieferservices. Optimistisch geschätztwird unsere Pizzeria also ca. 10.000 Kunden haben.

Algorithmen und Datenstrukturen II 4

Page 5: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Modulo

x mod y liefert als Ergebnis den Rest der ganzzahligen Division x/y.

Beispielsweise ergibt 117 mod 20 = 17, da 117 = 5 · 20 + 17.

Algorithmen und Datenstrukturen II 5

Page 6: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Hash-Funktion

h(Telefonnummer) = Telefonnummer mod Tabellenlänge,

oder allgemein:

h(k) = k mod m

mit h für Hashfunktion, k für key und m für Tabellenlänge.

Algorithmen und Datenstrukturen II 6

Page 7: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Kollisionen

z.B. ist 01063852 mod 10000 = 08153852 mod 10000 = 3852.

Algorithmen und Datenstrukturen II 7

Page 8: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Allgemeine Definitionen

Formal gesehen ist Hashing ein abstrakter Datentyp, der die Operationen insert,delete und search auf (dynamischen) Mengen effizient unterstützt.

Algorithmen und Datenstrukturen II 8

Page 9: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Direkte Adressierung

Algorithmen und Datenstrukturen II 9

Page 10: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Algorithmen und Datenstrukturen II 10

Page 11: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppp

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

qqqq

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq qqqq

v vvv

v

v

vv v

vppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

U

2

8

5

3

0

1

2

3

4

5

7

8

9

6

1

4

0

7

6

(Universum der Schlussel)

K

T

(Aktuelle Schlussel)

9

Algorithmen und Datenstrukturen II 11

Page 12: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Hashing

Algorithmen und Datenstrukturen II 12

Page 13: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Algorithmen und Datenstrukturen II 13

Page 14: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppp

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

v

vqqqq

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qqqqv

vv

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppp

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

h(k1)

h(k4)

h(k2) = h(k5)

h(k3)

(Aktuelle Schlussel)K

T

(Universum der Schlussel)U

m− 1

0

k1

k4

k3

k2k5

Algorithmen und Datenstrukturen II 14

Page 15: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Typische Hashfunktion

h(k) = k mod m.

Algorithmen und Datenstrukturen II 15

Page 16: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Strategien zur Behandlung von Kollisionen

Algorithmen und Datenstrukturen II 16

Page 17: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Direkte Verkettung

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

...................................................................................................................................................

vv

v u

upppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp........................................

........................................

........................................

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

qqqqqqqqqqqqqqqqqqqqqqqqq

k4

k5

k2k2 k5

k4

Algorithmen und Datenstrukturen II 17

Page 18: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

worst-case Laufzeiten

insert: O(1) (neues Element vor die Liste hängen)search: O(n) (n = Länge der Liste)delete: O(1) (vorausgesetzt, man verwendet doppelt verkettete Listen und hat das

Element schon gefunden)

Algorithmen und Datenstrukturen II 18

Page 19: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Open Hashing

Beim Open Hashing werden alle Einträge in der Hashtabelle gehalten. Ist eineKomponente der Tabelle schon belegt, so wird ein freier Platz für einen weiterenEintrag gesucht.

Algorithmen und Datenstrukturen II 19

Page 20: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Open Hashing, lineare Verschiebung

...................................................................................................................................................

...................................................................................................................................................v

vvpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp p p p p p p p p p p p p p ppppppppppppppppppppppppppppppppppppppppp

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq

qqqqqqqqqqqqqqqqqqqqqqqqqpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

k4

k5

k2

Algorithmen und Datenstrukturen II 20

Page 21: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Lineare Verschiebung

Falls h(k) bereits durch einen anderen Schlüssel besetzt ist, wird versucht, k in denAdressen h(k) + 1, h(k) + 2, . . . unterzubringen (Abbildung ??). Präziser gesagt,wird folgende Hashfunktion verwendet:

h′(k, i) =(h(k) + i

)mod m mit i = 0, 1, 2, . . . ,m− 1.

Algorithmen und Datenstrukturen II 21

Page 22: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Hash-Insert mit linearer Verschiebung

Hash-Insert(T, k)

1 i← 02 repeat

3 j ← h′(k, i)4 if T [j] = NIL then

5 T [j]← k

6 return j

7 i← i + 18 until i = m

9 error “hash table overflow”

Algorithmen und Datenstrukturen II 22

Page 23: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Hash-Search mit linearer Verschiebung

Hash-Search(T, k)

1 i← 02 repeat

3 j ← h′(k, i)4 if T [j] = k then

5 return j

6 i← i + 17 until T [j] = NIL or i = m

8 error NIL

Algorithmen und Datenstrukturen II 23

Page 24: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Quadratische Verschiebung

Es wird die Hashfunktion

h′(k, i) = (h(k) + c1i + c2i2) mod m mit i = 0, 1, 2, . . . ,m− 1

verwendet. Dabei sind c1, c2 ∈ N und c2 6= 0 geeignete Konstanten (s. Cormen etal. [?]).

Algorithmen und Datenstrukturen II 24

Page 25: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Double Hashing

Die Hashfunktion h′ wird definiert durch

h′(k, i) = (h1(k) + i · h2(k)) mod m mit i = 0, 1, 2, . . . ,m− 1,

wobei h1 und h2 Hashfunktionen sind. Die Verschiebung wird dabei durch einezweite Hashfunktion realisiert. D.h. es wird zweimal, also doppelt, gehasht.

Algorithmen und Datenstrukturen II 25

Page 26: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Beispiel lineare Verschiebung

01

0

1

2

3

4

-insert 11

01

11

0

1

2

3

4

-insert 10

01

1110

0

1

2

3

4

-delete 1

0d

1110

0

1

2

3

4

-search 10

Algorithmen und Datenstrukturen II 26

Page 27: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Man erkennt: Gelöschte Felder müssen markiert werden, so dass einSuchalgorithmus nicht abbricht, obwohl das Element doch in der Liste gewesenwäre. Natürlich kann in die gelöschten Felder wieder etwas eingefügt werden.Dieses Problem muss in der obigen Implementierung zusätzlich berücksichtigtwerden.

Algorithmen und Datenstrukturen II 27

Page 28: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Ladefaktor

Der Ladefaktor α für eine Hashtabelle T ist definiert als nm , wobei n die Anzahl der

gespeicherten Schlüssel und m die Kapazität der Tabelle sind. TheoretischeUntersuchungen und praktische Messungen haben ergeben, dass der Ladefaktoreiner Hashtabelle den Wert 0.8 nicht überschreiten sollte (d.h. die Hashtabelle darfhöchstens zu 80% gefüllt werden). Ist der Ladefaktor ≤ 0.8, so treten beim Suchenim Durchschnitt ≤ 3 Kollisionen auf. Bei einem höheren Ladefaktor steigt die Zahlder Kollisionen rasch an.

Algorithmen und Datenstrukturen II 28

Page 29: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Die Klasse Hashtable in Java

Die Klasse java.util.Hashtable implementiert alle Methoden der abstraktenKlasse java.util.Dictionary (vgl. Aufgabe ??). Außerdem enthält Hashtablenoch folgende Methoden

Algorithmen und Datenstrukturen II 29

Page 30: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

public synchronized boolean containsKey(Object key)

Es wird true zurückgegeben gdw. die Hashtabelle ein Element unter keyverzeichnet hat.

public synchronized boolean contains(Object element)

Gdw. das angegebene element ein Element der Hashtabelle ist, wird true

zurückgegeben. Diese Operation ist teurer als die containsKey-Methode, daHashtabellen nur beim Suchen nach Schlüsseln effizient sind.

public synchronized void clear()Alle Schlüssel in der Hashtabelle werden gelöscht. Wenn es keine Referenzenmehr auf die Elemente gibt, werden sie vom Garbage-Collector aus demSpeicher entfernt.

Algorithmen und Datenstrukturen II 30

Page 31: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

public synchronized Object clone()Es wird ein Klon der Hashtabelle erzeugt. Die Elemente und Schlüssel selbstwerden aber nicht geklont.

Algorithmen und Datenstrukturen II 31

Page 32: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Konstruktoren der Klasse Hashtable

public Hashtable()Es wird eine neue, leere Hashtabelle mit einer voreingestellten Anfangskapazitätvon 11 und einem Ladefaktor von 0.75 erzeugt.

public Hashtable(int initialCapacity)

Eine neue, leere Hashtabelle mit der Anfangskapazität initialCapacity unddem Ladefaktor 0.75 wird generiert.

public Hashtable(int initialCapacity, float loadFactor)

Es wird eine neue, leere Hastabelle erzeugt, die eine Anfangskapazität derGröße initialCapacity und einen Ladefaktor von loadFactor besitzt. DerLadefaktor ist eine Zahl zwischen 0.0 und 1.0 und definiert den Beginn einesrehashings der Tabelle in eine größere.

Algorithmen und Datenstrukturen II 32

Page 33: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Name-Wert-Paare

Algorithmen und Datenstrukturen II 33

Page 34: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

class Pair {

private String name;

private Object value;

public Pair(String name, Object value) {

this.name = name;

this.value = value;

}

public String name() {

return name;

}

public Object value() {

return value;

}

Algorithmen und Datenstrukturen II 34

Page 35: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

public Object value(Object newValue) {

Object oldValue = value;

value = newValue;

return oldValue;

}

}

Algorithmen und Datenstrukturen II 35

Page 36: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Interface Dic

interface Dic {

void add(Pair newPair);

Pair find(String pairName);

Pair delete(String pairName);

}

Algorithmen und Datenstrukturen II 36

Page 37: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

Implementierung von Dic

Algorithmen und Datenstrukturen II 37

Page 38: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

import java.util.Hashtable;

class DicImpl implements Dic {

protected Hashtable pairTable = new Hashtable();

public void add(Pair newPair) {

pairTable.put(newPair.name(), newPair);

}

public Pair find(String name) {

return (Pair) pairTable.get(name);

}

public Pair delete(String name) {

Algorithmen und Datenstrukturen II 38

Page 39: Hashing - techfak.uni-bielefeld.de · Bielefeld hat ca. 300.000 Einwohner, dann gibt es vielleicht 200.000 Telefonnummern. Davon bestellt jeder fünfte eine Pizza – bleiben 40.000

return (Pair) pairTable.remove(name);

}

}

Algorithmen und Datenstrukturen II 39