6 Hashverfahren

Werbung
Praktische Informatik I – Algorithmen und Datenstrukturen
6
Wintersemester 2006/07
Hashverfahren
zum Namen “Hash”: engl. für “zerhacken”
gestreute Speicherung
6.1
Grundbegriffe
Wir unterstellen ein direkt adressierbares Speichermedium mit einer Menge
von Adressen, dem Adressraum.
repräsentiert. Es gibt
Die Datensätze werden durch Schlüsselwerte
Zu jedem Zeitpunkt ist immer
eine universelle Schlüsselwertmenge
gespeichert.
eine Teilmenge
Prof. Dr. Dietmar Seipel
336
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
........ ...................
......
.............
.
.
.
.
..........
...
.
.
.......
.
............
..
.
...
.
.
.
.
.
.
.
.
..
.
.
.
.
..
..
...
.. .
.....
.
.
..
..
....
.
..
..
..
.
.
..
..
...
...
...
...
....
....
....
......
.
........
..
........
.
.........
.
..........
....
.
.
............
.
.
.
............... ...... ........
.
.
.
.
.
.
Die Zuordnung eines Schlüsselwertes
auf einen Speicherplatz
erfolgt mittels einer arithmetischen Funktion
Prof. Dr. Dietmar Seipel
heißt Hausadresse von .
genannt Hashfunktion:
337
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beispiel:
18
4
f
........ ...................
......
.............
.
.
.
.
..........
...
.
.
.......
.
............
..
.
..
.
.
.
..
.
4
.
.
.
.
.
.
10
..
.
......
....
..
...
...
....
..
..
...
.
.
..
.
..
..
1
...
...
...
...
....
....
19
18
....
......
.
........
..
........
.
.........
..
..........
....
.
...........
.
.
.
.
................ ...... ........
Prof. Dr. Dietmar Seipel
10
19
.
.
.
338
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Bei B–Bäumen (bzw. B –Bäumen) erfolgte dagegen die Zuordnung der
Schlüsselwerte auf die Speicherplätze – in diesem Fall die Datenseiten –
durch Traversieren des Baumes gepaart mit Schlüsselwertvergleichen
?“:
datenorientierte Strukturierung.
„
Die Strukturierung mittels Hashverfahren nennt man dagegen
speicherorientiert. Die Zuordnung eines Schlüsselwerts mittels einer
Hashfunktion auf einen Speicherplatz erfolgt unabhägig von der aktuell
gespeicherten Menge von Schlüsselwerten.
Standardannahmen für Hashfunktionen
Ist injektiv, so heißt auch direkt, anderenfalls heißt eigentliche
, und ist eine eigentliche Hashfunktion.
Hashfunktion. Meist gilt
Prof. Dr. Dietmar Seipel
339
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beispiel:
direkt
(i)
eigentlich
(ii)
Prof. Dr. Dietmar Seipel
340
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Synonyme
Zwei unterschiedliche Schlüsselwerte
haben.
dieselbe Hausadresse
heißen Synonyme, wenn sie
Die Äquivalenzklassen
für
heißen Synonymklassen, und sie bilden eine disjunkte Zerlegung von .
Prof. Dr. Dietmar Seipel
341
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Warum “eigentliche Hashfunktionen”?
Direkte Speicherfunktionen führen häufig zu einer
Speicherplatzverschwendung. Denn es gilt dann:
, wegen der Injektivität von , und
, da meist nur ein kleiner Prozentsatz aller möglichen
Schlüsselwerte gespeichert wird.
Dies führt zu einem sehr geringen Belegungsfaktor
Deshalb wählt man eigentliche Hashfunktionen mit
Prof. Dr. Dietmar Seipel
342
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Dabei nimmt man in Kauf, dass zwei Schlüsselwerte
zu speichern
sind, welche auf dieselbe Hausadresse abgebildet werden (Synonyme).
Bei solchen Kollisionen sind dann weitere Maßnahmen erforderlich um die
Wörterbuchoperationen (Suchen, Einfügen und Löschen) durchführen zu
können.
Ein Hashverfahren besteht somit aus zwei Komponenten:
einer (eigentlichen) Hashfunktion und [einfach zu berechnen]
einer Kollisionsstrategie [aufwändiger]
Prof. Dr. Dietmar Seipel
343
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Kollisionswahrscheinlichkeit
Man sollte die Hashfunktion so wählen, daß die
Kollisionswahrscheinlichkeit möglichst gering wird.
Allerdings ist die Wahrscheinlichkeit für eine Kollision i.a. recht groß.
Das Auftreten mehrerer Kollisionen ist unwahrscheinlicher.
Prof. Dr. Dietmar Seipel
344
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Geburtstags–Paradoxon:
Personen:
Auf einer Party treffen sich zufällig
Ihre Geburtstage
stochastisch unabhängig:
seien gleichverteilt über das Jahr und
Prof. Dr. Dietmar Seipel
345
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Frage:
, dass keine zwei Personen am
Wie groß ist die Wahrscheinlichkeit
gleichen Tag Geburtstag haben? (keine Kollision)
(„Ziehen ohne
Zahl der günstigen Fälle:
Zurücklegen“)
(„Ziehen mit Zurücklegen“)
Zahl der möglichen Fälle:
Schon für
gilt
.
Für
ist der Belegungsfaktor
noch sehr niedrig.
Prof. Dr. Dietmar Seipel
dagegen immer
346
Praktische Informatik I – Algorithmen und Datenstrukturen
6.2
Wintersemester 2006/07
Gebräuchliche Hashfunktionen
6.2.1 Division mit Rest
Sei der Adressraum
mit
Hashfunktion
, meist
mit einer Basisadresse
.
Prof. Dr. Dietmar Seipel
Bemerkung:
347
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beispiel:
, und sei
und
,
.
Sei
d.h.
die nicht injektive Funktion
Dann erhalten wir für
Belegungsfaktor
Prof. Dr. Dietmar Seipel
348
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Ist
eine Zehnerpotenz, so entspricht die
Modulo–Berechnung dem Abschneiden der letzten Stellen von bei
Dezimaldarstellung (“Sectioning”).
Aufgrund der häufig benutzten Dezimalklassifizierung und der
Konkatenation von Teilschlüsseln zu Gesamtschlüsseln ist allerdings die
Kollisionsgefahr beim Sectioning recht hoch.
der zu speichernden Schlüsselwerte zeitlich relativ konstant,
Ist die Zahl
des Adressraums eine
so hat es sich praktisch bewährt für die Größe
Primzahl
Prof. Dr. Dietmar Seipel
zu wählen. (Dann gilt
)
349
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
6.2.2 Basistransformation
läßt sich schreiben als
Jeder Schlüsselwert
Dezimaldarstellung:
:
Wir wählen nun eine neue Basis
Prof. Dr. Dietmar Seipel
350
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beispiel:
Die Basistransformation ist für
Kollisionen.
injektiv, d.h. man erhält keine
Man kann die Basistransformation mit der Division mit Rest kombinieren:
Prof. Dr. Dietmar Seipel
351
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
6.2.3 Multiplikationsmethode
und eine reelle Zahl
betrachten wir
mit:
Für den Adressraum
die Hashfunktion
Dabei ist
jeweils der “gebrochene Anteil” von
.
Nach einem Satz von Vera Turán Sós sind diese gebrochenen Anteile
verstreut, falls als irrationale Zahl gewählt
gleichmäßig im Intervall
wird.
Von allem Zahlen
, führt der goldene Schnitt
zur gleichmäßigsten Verteilung (
Prof. Dr. Dietmar Seipel
Fibonacci–Hashing).
352
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beispiel:
Fibonacci–Hashing für
Prof. Dr. Dietmar Seipel
ist Permutation von
353
Praktische Informatik I – Algorithmen und Datenstrukturen
6.3
Wintersemester 2006/07
Kollisionsstrategien
6.3.1 Überlaufhash
Hier wird ein Überlaufbereich für alle Hausadressen eingerichtet. Dieser
wird i.a. durch eine lineare Liste realisiert.
Hausadressen
Überlaufbereich
.
.
.
.
.
.
Prof. Dr. Dietmar Seipel
354
Praktische Informatik I – Algorithmen und Datenstrukturen
die Menge der gespeicherten Synonyme zur
Sei
Hausadresse .
Wintersemester 2006/07
, so ist kein Schlüssel in
Ist
gespeichert.
Ansonsten ist genau ein Synonym
in gespeichert, und alle
,
, im Überlaufbereich.
anderen Synonyme
Aufwand für die Wörterbuchoperationen:
Im schlechtesten Fall sind alle gespeicherten Schlüsselwerte Synonyme –
d.h. sie haben dieselbe Hausadresse.
Schlüssel im Überlaufbereich.
Dann liegen
Prof. Dr. Dietmar Seipel
355
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Speicherbelegung:
Für alle Schlüssel , welche auf ihrer Hausadresse
gespeichert sind, gilt
.
Für alle Hausadressen , zu denen keine Schlüssel gespeichert sind, gilt
.
Prof. Dr. Dietmar Seipel
356
Praktische Informatik I – Algorithmen und Datenstrukturen
Suchen nach
Wintersemester 2006/07
Ansonsten suche zuerst in
(erfolglose Suche).
, so ist
.
Ist
Berechne die Hausadresse
, so speichere auf seiner Hausadresse.
Ist
Einfügen von
und dann im Überlaufbereich.
Ansonsten suche zuerst in
und dann im Überlaufbereich.
Falls nicht gefunden wurde, so speichere im Überlaufbereich.
(Falls gefunden wurde, so ist nichts zu tun.)
Prof. Dr. Dietmar Seipel
357
Praktische Informatik I – Algorithmen und Datenstrukturen
Löschen von
Wintersemester 2006/07
Suche den Schlüssel . Falls gefunden wird, d.h.
, so entferne
wie folgt:
, so ersetze
Ist auf seiner Hausadresse gespeichert, d.h.
auf
durch einen synonymen Schlüssel – d.h. mit
aus dem Überlaufbereich. Das Löschen im Überlaufbereich erfordert
keine Folgeaktionen.
Falls nicht gefunden wird, d.h.
, so ist nichts zu tun.
Prof. Dr. Dietmar Seipel
358
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Average Case für Suche:
Wir setzen Gleichverteilung auf voraus, d.h. jeder Schlüssel hat mit
die Hausadresse
für alle
Wahrscheinlichkeit
die Anzahl der Schlüssel aus im Überlaufbereich. Dann sind
Schlüssel auf ihrer Hausadresse gespeichert.
Sei
Für die erfolgreiche Suche ist der Aufwand
Prof. Dr. Dietmar Seipel
359
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Man kann zeigen:
und
Deshalb gilt:
Prof. Dr. Dietmar Seipel
360
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Für die erfolglose Suche ist der Aufwand
Hier kann man zeigen
Prof. Dr. Dietmar Seipel
361
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
6.3.2 Überlauf mit Verkettung
Hier wird für jede Hausadresse ein spezieller Überlaufbereich eingerichtet,
i.a. als lineare Liste.
Hausadressen
Überlaufbereich
.
.
.
.
.
.
Prof. Dr. Dietmar Seipel
362
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Prinzip der Speicherung:
, so ist kein Schlüssel in
Ist
gespeichert.
Ansonsten ist genau ein Synonym
in gespeichert und alle
,
, sind im Überlaufbereich zu
anderen Synonyme
gespeichert.
Aufwand für die Wörterbuchoperationen:
Prof. Dr. Dietmar Seipel
363
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Average Case Suchaufwand:
Gleichverteilung auf :
wird durch die Hashfunktion
Jede Adresse
gleichen Belegungswahrscheinlichkeit
belegt:
mit der
für alle
Entscheidend ist der Erwartungswert für die Länge der Überlaufbereiche,
d.h. die Größe
der Synonymklassen.
,
Die Anzahlen
, sind identisch verteilte Zufallszahlen mit
Prof. Dr. Dietmar Seipel
364
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Für der Erwartungswert für die Größe der Synonymklassen gilt dann:
Wir unterstellen nun noch gleiche Suchhäufigkeiten
für alle
für alle
: erfolgreiche Suche,
: erfolglose Suche
Prof. Dr. Dietmar Seipel
365
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Dann erhalten wir für erfolgreiche Suche:
denn es muss die Hausadresse durchsucht werden und im Mittel dann noch
der halbe Überlaufbereich.
, folgt:
, d.h.
Unter der Voraussetzung
Prof. Dr. Dietmar Seipel
366
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Für erfolglose Suche erhalten wir:
denn es muss die komplette Synonymklasse (Hausadresse und
Überlaufbereich) durchsucht werden.
Auch hier gilt für
Fazit:
Im Durchschnitt ist das Hashing mit “Überlauf mit Verkettung” für die
Wörterbuchoperationen recht gut geeignet (“konstanter Aufwand”). Im
schlechtesten Fall ist es dagegen viel schlechter als zu logarithmischer Höhe
balancierte Bäume (“linearer Aufwand” vs. “logarithmischer Aufwand”).
Prof. Dr. Dietmar Seipel
367
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
6.3.3 Offener Hash (Open Adressing)
wird eine Permutation
Für jeden Schlüsselwert
aller Hausadressen angegeben.
der Menge
wird unter der ersten freien Adresse
Ein einzufügender Schlüsselwert
abgelegt.
Bezeichnung:
ist die Hausadresse von .
heißen Ausweichadressen.
Prof. Dr. Dietmar Seipel
368
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Lineares Suchen (Linear Probing)
:
Sei
Beispiel:
ALLE AUTO BALL BAUM DAMM DOSE HASH OPEN
Z
A B
Prof. Dr. Dietmar Seipel
369
Praktische Informatik I – Algorithmen und Datenstrukturen
A
ALLE
B
BALL
C
AUTO
D
BAUM
E
DAMM
F
DOSE
G
Prof. Dr. Dietmar Seipel
H
..
.
HASH
O
..
.
OPEN
Wintersemester 2006/07
Einfügereihenfolge:
ALLE, BALL, AUTO, HASH,
BAUM, DAMM, DOSE, OPEN
nächster einzufügender Schlüsel:
ABER
370
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Primäres Clustering
Lineares Sondieren ist zwar einfach, es gibt aber auch Nachteile:
Lange, schon besetzte Teile, haben durch die lineare Sondierungsfolge eine
größere Tendenz zu wachsen als kurz besetzte. Außerdem werden die
Lücken zwischen längeren Teilstücken geschlossen, so daß noch größere
Teilstücke entstehen (to coalesce).
Dieses Ereignis der primären Häufung (primary clustering), verschlechtert
die Effizienz sehr stark, wenn der Belegungsfaktor gegen geht.
Nach kontinuierlicher Belegung eines Teilraumes
des Adressraumes müssen beim Einfügen mit der Ausweichadresse auch
die Ausweichadressen
,
, erfolglos aufgesucht werden.
Prof. Dr. Dietmar Seipel
371
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Average Case Suchaufwand
geeignet)
(
für
für
Prof. Dr. Dietmar Seipel
372
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Doppel–Hash (Double Hashing)
Der Nachteil des primären Clustering kann vermieden werden, wenn man
in der Folge
der Folge der
die Inkremente
Ausweichadressen vom Schlüssel abhängig macht.
Dazu benutzt man eine zweite Hashfunktion
welche Inkrementfunktion genannt wird.
Die Permutation der Ausweichadressen für ist dann
für
mit
Prof. Dr. Dietmar Seipel
373
Praktische Informatik I – Algorithmen und Datenstrukturen
Sei
Wintersemester 2006/07
der größte gemeinsame Teiler zweier natürlicher Zahlen
. Z.B.
Lemma:
ist eine Permutation von
.
und
sind teilerfremd).
(d.h.
ein Vielfaches von
g.d.w.
Prof. Dr. Dietmar Seipel
Es gilt
ist.
374
Praktische Informatik I – Algorithmen und Datenstrukturen
:
Beweis:
Seien
Wintersemester 2006/07
Falls
, so gilt:
.
in diesem Fall eine Permutation von
Also ist
:
, aber
, so gilt für
Falls
.
Prof. Dr. Dietmar Seipel
in diesem Fall keine Permutation von
Also ist
375
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beim Doppel–Hashing fordert man deshalb für alle
:
Die Doppel–Hash–Verfahren erwiesen sich in der Praxis als ausgezeichnete
Verfahren.
Bei allen offenen Hashverfahren hängt die Suchzeit von der Reihenfolge
des Ladens der Schlüsselwerte ab – genau wie bei Suchbäumen auch.
Prof. Dr. Dietmar Seipel
376
Praktische Informatik I – Algorithmen und Datenstrukturen
Wintersemester 2006/07
Beispiel:
eine Primzahl.
1. Sei
Dann ist
d.h.
, eine Zweierpotenz.
ungerade,
kann gewählt werden.
,
2. Sei
Dann gilt
d.h.
, für alle
,
kann (fast) beliebig gewählt werden.
,
3. Seien
und
Primzahl–Zwillinge (z.B.
Dann kann man wählen:
).
für alle
Prof. Dr. Dietmar Seipel
Es gilt dann
.
377
Herunterladen