Übersicht Hashing Hashing Perfektes Hashing

Werbung
Warum Hashing?
Gibt es bessere Strukturen für direkte Suche für Haupt- und Externspeicher?
O (log2 n) Vergleiche
B*-Baum: E/A-Kosten O (log (n)), vielfach 3 Zugrie
AVL-Baum:
ADS 1: Algorithmen und Datenstrukturen
k
Teil XI
Bisher:
Suche über Schlüsselvergleich
Prof. Peter F. Stadler & Sebastian Will
Allokation des Satzes als physischer Nachbar des Vorgängers oder beliebige
Allokation und Verknüpfung durch Zeiger
Bioinformatik/IZBI
Institut für Informatik
& Interdisziplinäres Zentrum für Bioinformatik
Universität Leipzig
Gestreute Speicherungsstrukturen / Hashing (Schlüsseltransformation,
Adreÿberechnungsverfahren, scatter-storage technique usw.)
Berechnung der Satzadresse
16. Januar 2014
SA(i ) aus Satzschlüssel K
Schlüsseltransformation
Speicherung des Satzes bei
i
→
SA(i )
Ziele: schnelle direkte Suche + Gleichverteilung der Sätze (möglichst wenig
Synonyme)
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
1 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Übersicht Hashing
ADS 1, V11
16. Januar 2014
2 / 38
Hashing
Hash-Funktionen
Divisionsrest-Verfahren
Denition
Faltung
Mid-Square-Methode, . . .
S
Behandlung von Kollisionen
sei Menge aller möglichen Schlüsselwerte eines Satztyps
(Schlüsselraum). A
Zahlen von 0 bis m
Verkettung der Überläufer
Oene Hash-Verfahren: lineares Sondieren, quadratisches Sondieren, ...
= 0, 1, . . . m − 1 sei das Intervall der ganzen
− 1 zur Adressierung eines Arrays bzw. einer
Hash-Tabelle mit m Einträgen.
Analyse des Hashing
Eine Hash-Funktion h
Hashing auf Externspeichern
Satztyps eine Zahl h (s ) aus A als Adresse in der Hash-Tabelle zu.
:S →A
ordnet jedem Schlüssel s
Bucket-Adressierung mit separaten Überlauf-Buckets
Idealfall: 1 Zugri zur direkten Suche
Analyse
Problem: Kollisionen bei h (s )
Dynamische Hash-Verfahren
∈S
des
= h(s 0 )
Erweiterbares Hashing
Lineares Hashing
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
3 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Perfektes Hashing: Direkte Adressierung
P.F. Stadler & S. Will (Bioinf, Uni LE)
16. Januar 2014
4 / 38
Beispiel: Direkte Adressierung
Idealfall (perfektes Hashing): keine Kollisionen
h ist eine injektive Funktion.
Für jeden Schlüssel aus S muss Speicherplatz bereitgehalten werden, d. h., die Menge
aller möglichen Schlüssel ist bekannt.
Parameter
l Schlüssellänge, b = Basis, m = #Speicherplätze
np = #S = bl mögliche Schlüssel
na = #K = # vorhandene Schlüssel
Wenn K bekannt ist und K fest bleibt, kann leicht eine injektive Abbildung
h : K → {0, ..., m − 1}
z. B. wie folgt berechnet werden:
Die Schlüssel in K werden lexikographisch geordnet und auf ihre Ordnungsnummern
abgebildet oder
Der Wert eines Schlüssels Ki oder eine einfache ordnungserhaltende Transformation dieses
Wertes (Division/Multiplikation mit einer Konstanten) ergibt die Adresse
Ai
ADS 1, V11
Beispiel: Schlüsselmenge
Eigenschaften
{00, ..., 99}
Statische Zuordnung des Speicherplatzes
Kosten für direkte Suche und Wartung ?
Reihenfolge beim sequentiellen Durchlauf ?
Bestes Verfahren bei geeigneter Schlüsselmenge K, aber aktuelle
Schlüsselmenge K ist oft nicht "dicht":
eine 9-stellige Sozialversicherungsnummer bei 105 Beschäftigten
Namen / Bezeichner als Schlüssel (Schlüssellänge k):
4
Faktor 10
= h(Ki ) = i
ADS 1, V11
16. Januar 2014
5 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
6 / 38
Allgemeines Hashing
Annahmen
k
Die Menge der möglichen Schlüssel ist meist sehr viel gröÿer als die
mindestens 2 von k Personen am gleichen Tag (n
Menge der verfügbaren Speicheradressen
h
= 365)
Geburtstag?
Die Wahrscheinlichkeit, dass keine Kollision auftritt, ist
ist nicht injektiv
q(n, k ) = n n − 1 n − 2 n − 3 . . . n − k + 1
n n
n
n
n
Denitionen
Zwei Schlüssel Ki , Kj kollidieren (bzgl. einer Hash-Funktion h ) genau
dann wenn h (Ki )
Personen auf einer Party haben gleichverteilte und stochastisch
unabhängige Geburtstage. Mit welcher Wahrscheinlichkeit p (n , k ) haben
= h(Kj ).
Tritt für Ki und Kj eine Kollision auf, so heiÿen diese Schlüssel
Synonyme.
Es ist p (365, k )
= 1 − q (365, k ) > 0.5
=
für k
(n − 1)(n − 2) . . . (n − k + 1)
nk −1
> 22
(z.B. http://www.mathematik.ch/anwendungenmath/wkeit/geburtstag/)
ALSO: Behandlung von Kollisionen erforderlich !
Die Menge der Synonyme bezüglich einer Speicheradresse Ai heiÿt
Kollisionsklasse.
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
7 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
8 / 38
Hash-Verfahren: Einuÿfaktoren I
Einuÿfaktoren II
Belegungsfaktor der Hash-Tabelle
Leistungsfähigkeit eines Hash-Verfahrens: Einuÿgröÿen und Parameter
Verhältnis von aktuell belegten zur gesamten Zahl an Speicherplätzen
Hash-Funktion
β = na /m
Datentyp des Schlüsselraumes: Integer, String, ...
für
Verteilung der aktuell benutzten Schlüssel
damit hohen Zusatzaufwand
β > 0.85
erzeugen alle Hash-Funktionen viele Kollisionen und
Hash-Tabelle ausreichend groÿ zu dimensionenieren
Belegungsgrad der Hash-Tabelle HT
(m > na )
Für die Hash-Funktion h gelten folgende Forderungen:
Anzahl der Sätze, die sich auf einer Adresse speichern lassen, ohne
Kollision auszulösen (Bucket-Kapazität)
Sie soll sich einfach und ezient berechnen lassen (konstante Kosten)
Technik zur Kollisionsauösung
Sie soll eine möglichst gleichmäÿige Belegung der Hash-Tabelle HT
ggf. Reihenfolge der Speicherung der Sätze
erzeugen, auch bei ungleich verteilten Schlüsseln
Sie soll möglichst wenige Kollisionen verursachen
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
9 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Hash-Funktionen I: Divisions-Verfahren
1. Divisionsrest-Verfahren: h (Ki )
= Ki
Die Funktion nat wandle Namen in natürliche Zahlen um:
(Name) = ord (1. Buchstabe von
(Name) = nat (Name) mod q
Wichtigste Forderung an Divisor q :
q = Primzahl (gröÿte Primzahl ≤ m)
Name)
10 / 38
Schlüssel wird in Teile zerlegt, die bis auf das Letzte die Länge einer Adresse für HT besitzen
Schlüsselteile werden dann übereinandergefaltet und addiert.
Variationen:
Rand-Falten: wie beim Falten von Papier am Rand
Shift-Falten: Teile des Schlüssels werden übereinandergeschoben
Sonstige: z.B. XOR-Verknüpfung bei binärer Zeichendarstellung
Beispiel: b = 10, t = 3, m = 103
∼ m)
mod q , (q
Beispiel:
nat
16. Januar 2014
Hash-Funktionen II: Faltung
Der entstehende Rest ergibt die relative Adresse in HT
h
ADS 1, V11
− ord ('A')
Hash-Funktion muÿ etwaige Regelmäÿigkeiten in Schlüsselverteilung eliminieren, damit
nicht ständig die gleichen Plätze in HT getroen werden
Bei äquidistantem Abstand der Schlüssel K0 + jK , j = 0, 1, 2, . . . maximiert eine Primzahl
die Distanz, nach der eine Kollision auftritt. Eine Kollision ergibt sich, wenn
Faltung
K0 = (K0 + jK ) mod q
d.h. jK = kq , k = 1, 2, 3, . . . .
Eine Primzahl q kann keine gemeinsamen Teiler mit K besitzen, die den Kollisionsabstand
verkürzen würden
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
mit einem weiteren Verfahren "gehasht"werden
ADS 1, V11
16. Januar 2014
12 / 38
Zufallsmethode:
Schlüssel Ki wird quadriert. t aufeinanderfolgende Stellen werden aus
der Mitte des Ergebnisses für die Adressierung ausgewählt.
t =m
t
= 4,
m
= 16:
2
1000 1000
i = 10011 |{z}
t
K
P.F. Stadler & S. Will (Bioinf, Uni LE)
i
K
dient als Saat für Zufallszahlengenerator
Ziernanalyse:
setzt Kenntnis der Schlüsselmenge K voraus. Die t Stellen mit der
gelten.
besten Gleichverteilung der Ziern oder Zeichen in K werden von Ki
mittlere Stellen lassen beste Gleichverteilung der Werte erwarten
= 2,
diese Argumente können dann zur Verbesserung der Gleichverteilung
Hash-Funktionen IV
Mid-Square-Methode
Beispiel für b
alle Schlüsselteile Beitrag zur Adreÿberechnung liefern
11 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Hash-Funktionen III
Es muss also b
verkürzt lange Schlüssel auf leicht berechenbare Argumente, wobei
zur Adressierung ausgewählt
Problemangepaÿte Methoden:
i = 1100100
K
Unter Ausnutzung von speziellen Eigenschaften der Schlüssel wird
→
( i ) = 1000
versucht, eine möglichst günstige Hashfunktion zu konstruieren. Im
h K
ADS 1, V11
günstigsten Fall erhält man so eine Hashfunktion, die injektiv und
eektiv zu berechnen ist.
16. Januar 2014
13 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Bewertung von Hash-Funktionen I
ADS 1, V11
16. Januar 2014
14 / 38
Bewertung von Hash-Funktionen II
Über die Güte der verschiedenen Hash-Funktionen liegen jedoch eine Reihe
Verhalten / Leistungsfähigkeit einer Hash-Funktion hängt von der
von empirischen Untersuchungen vor
gewählten Schlüsselmenge ab
Das Divisionsrest-Verfahren ist im Mittel am leistungsfähigsten; für
Deshalb lassen sie sich auch nur unzureichend theoretisch oder mit
bestimmte Schlüsselmengen können jedoch andere Techniken besser
Hilfe von analytischen Modellen untersuchen
abschneiden
Wenn eine Hash-Funktion gegeben ist, läÿt sich immer eine
Wenn die Schlüsselverteilung nicht bekannt ist, dann ist das
Schlüsselmenge nden, bei der sie besonders viele Kollisionen erzeugt
Divisionsrest-Verfahren die bevorzugte Hash-Technik
Keine Hash-Funktion ist immer besser als alle anderen
Wichtig dabei: ausreichend groÿe Hash-Tabelle, Verwendung einer
Primzahl als Divisor
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
15 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
16 / 38
Behandlung von Kollisionen
Zwei Ansätze, wenn h (Kq )
p
K
Hash-Verfahren mit Verkettung der Überläufer (separater
Überlaufbereich)
= h(Kp )
wird in einem separaten Überlaufbereich (auÿerhalb der
Hash-Tabelle) zusammen mit allen anderen Überläufern gespeichert;
Verkettung der Überläufer
Es wird für Kp ein freier Platz innerhalb der Hash-Tabelle gesucht
Dynamische Speicherplatzbelegung für Synonyme
(Sondieren); alle Überläufer werden im Primärbereich untergebracht
Alle Sätze, die nicht auf ihrer Hausadresse unterkommen, werden in
(oene Hash-Verfahren)
einem separaten Bereich gespeichert (Überlaufbereich)
Methode der Kollisionsauösung entscheidet darüber, welche Folge und wie
Verkettung der Synonyme (Überläufer) pro Hash-Klasse
viele relative Adressen zur Ermittlung eines freien Platzes aufgesucht
Suchen, Einfügen und Löschen sind auf Kollisionsklasse beschränkt
werden
Unterscheidung nach Primär- und Sekundärbereich: n
Adressfolge bei Speicherung und Suche für Schlüssel Kp sei h0 (Kp ),
1 (Kp ), h2 (Kp ),
h
>m
ist möglich!
...
Bei einer Folge der Länge n treten also n
Primärkollision: h (Kp ) = h (Kq )
Sekundärkollision: hi (Kp ) = hj (Kq ) , i
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
−1
6= j
Kollisionen auf
16. Januar 2014
17 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Hash-Verfahren mit Verkettung der Überläufer (separater
Überlaufbereich)
ADS 1, V11
16. Januar 2014
18 / 38
Oene Hash-Verfahren: Lineares Sondieren
Eigenschaften:
Speicherung der Synomyme (Überläufer) im Primärbereich
Hash-Verfahren muÿ in der Lage sein, eine Sondierungsfolge, d.h. eine
Permutation aller Hash-Adressen, zu berechnen
Lineares Sondieren (linear probing)
Von der Hausadresse (Hash-Funktion h ) aus wird sequentiell (modulo der
Hash-Tabellen-Gröÿe) gesucht. Oensichtlich werden dabei alle Plätze in
HT erreicht:
0 (Kp ) = h(Kp )
h
Nachteile:
i (Kp ) = (h0 (Kp ) + i )
mod m , i
h
Entartung zur linearen Liste prinzipiell möglich
= 1, 2, . . .
Anlegen von Überläufern, auch wenn Hash-Tabelle (Primärbereich) noch
Häufung von Kollisionen durch "Klumpenbildung"=⇒ lange
wenig belegt ist
Sondierungsfolgen möglich
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
Lineares Sondieren: Beispiel
1
2
3
h
0 (Kp ) = h(Kp ) =
h
i (Kp ) = (Kp + i )
4
p
K
5
6
7
8
9
0
28
79
49
= 1, 2, . . .
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
Lineares Sondieren: Beispiel
0
1
88
2
3
h
0 (Kp ) = h(Kp ) =
h
i (Kp ) = (Kp + i )
4
p
K
5
6
7
P.F. Stadler & S. Will (Bioinf, Uni LE)
1
2
3
h
0 (Kp ) = h(Kp ) =
h
i (Kp ) = (Kp + i )
4
p
K
5
6
7
8
9
28
79
16. Januar 2014
21 / 38
16. Januar 2014
21 / 38
mod 10
mod 10, i
= 1, 2, . . .
21 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
Einfügereihenfolge 79, 28, 49, 88, 59
8
9
0
1
2
28
79
49
88
59
mod 10
mod 10, i
20 / 38
Lineares Sondieren: Beispiel
Einfügereihenfolge 79, 28, 49, 88, 59
49
16. Januar 2014
Einfügereihenfolge 79, 28, 49, 88, 59
mod 10
mod 10, i
ADS 1, V11
Lineares Sondieren: Beispiel
Einfügereihenfolge 79, 28, 49, 88, 59
0
19 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
= 1, 2, . . .
ADS 1, V11
16. Januar 2014
3
h
0 (Kp ) = h(Kp ) =
h
i (Kp ) = (Kp + i )
4
p
K
5
6
7
8
9
28
79
mod 10
mod 10, i
21 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
= 1, 2, . . .
ADS 1, V11
Lineares Sondieren (2)
Lineares Sondieren (3)
Aufwendiges Löschen
impliziert oft Verschiebungen
Verbesserung: Modikation der Überlauolge
entstehende Lücken in Suchsequenzen sind aufzufüllen, da das
Antreen eines freien Platzes die Suche beendet.
0 (Kp )
= h(Kp )
(
K
)
oder
i p = (h0 (Kp ) + f (i )) mod m
hi (Kp )
= (h0 (Kp ) + f (i , h(Kp ))) mod m, i = 1, 2, . . .
h
h
0
1
2
49
88
59
3
↓
0
1
2
49
88
59
4
5
6
♠
4
8
9
28
79
8
9
♠
79
Beispiele:
↓
Lösche 28
3
7
5
Weiterspringen um festes Inkrement c (statt nur 1): f (i )
6
7
Sondierung in beiden Richtungen:
i
f (i ) = ci (−1)
= ci
= Platzhalter
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
22 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Quadratisches Sondieren
ADS 1, V11
16. Januar 2014
23 / 38
Weitere oene Hash-Verfahren
Sondieren mit Zufallszahlen
Mit Hilfe eines deterministischen Pseudozufallszahlen -Generators wird
Bestimmung der Speicheradresse
0 (Kp )
=
h
0 (Kp ) = h(Kp )
hi (Kp ) = h0 (Kp ) + zi )
h
( p)
2
0 (Kp ) + ai + bi
h K
i (Kp ) =
h
m
die Adressenfolge [1 . . . m
mod m , i
h
sollte Primzahl sein.
− 1]
mod m genau einmal erzeugt:
mod m , i
= 1, 2, . . .
Double Hashing
= 1, 2, . . .
Einsatz einer zweiten Funktion für die Sondierungsfolge
0 (Kp ) = h(Kp )
h
Folgender Spezialfall ist wichtig:
i
0 (Kp ) − di /2e(−1)
i (Kp ) =
h
i (Kp ) = (h0(Kp ) + ih0(Kp ))
mod m , i
h
h
mod m , 1
= 1, 2, . . .
Wähle h'(K) so, dass für alle Schlüssel K die Sondierungsfolge eine
≤i ≤m−1
Permutation aller Hash-Adressen bildet
Kettung von Synonymen
Beispiel: Einfügereihenfolge 79, 28, 49, 88, 59
explizite Kettung aller Sätze einer Kollisionsklasse
verringert nicht die Anzahl der Kollisionen; sie verkürzt jedoch den
Suchpfad beim Aufsuchen eines Synonyms.
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
24 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Analyse des Hashing: Kostenmaÿe
β = n/m
S
(β)
Sobald
: Belegung von HT mit n Schlüsseln
= Anzahl Suchschritte für die erfolglose Suche das Aunden
(β) =
U (β) =
S
best case:
worst case:
1
n
1
P.F. Stadler & S. Will (Bioinf, Uni LE)
n
S
+1
mit 0
ADS 1, V11
16. Januar 2014
n
m
−1
m − 1
n
−2
...
m − 2
n
n i − 1
−i +2
≤
= β i −1
m − i + 2
m
1
2
1
+
1
1
n < 1.
≤β= m
−β
(β) =
≤
=
P.F. Stadler & S. Will (Bioinf, Uni LE)
i =1
∞
X
i =1
(β) ≈
1
2
1
+
1
(1 − β)2
16. Januar 2014
27 / 38
des Schlüssels durchlaufen. Für den als
(i + 1)-tes
eingefügten Schlüssel
entspricht dies einer erfolglosen Suche in einer HT der Länge m mit i
Schlüsseln. Kosten hierfür
i=
u
1
i =
1−
m
m
m
−i
Mittelwert über alle n Schlüssel
i
q
S
β i −1 =
1
1
U
Bei erfolgreicher Suche wird dieselbe Sondierungsfolge wie beim Einfügen
n
∞
X
,
ADS 1, V11
Erwartungswert ist Summe der kumulierten Wahrscheinlichkeiten:
U
Analyse: uniformes Sondieren, erfolgreiche Suche
(zufällig). Kumulierte Wahrscheinlichkeit, daÿ erfolglose Suche mindestens
Schritte braucht:
(β) ≈
26 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Annahme: Sondierungsfolgen zu verschiedenen Schlüsseln sind unkorreliert
i=
eine Art Verdopplung der Listenlänge eintreten kann
Ergebnisse für das lineare Sondieren nach Knuth:
Analyse: uniformes Sondieren, erfolglose Suche
q
eine gewisse Gröÿe überschreitet, verschlechtert sich das
Zwei Listen können zusammenwachsen, so dass durch neue Schlüssel
des ersten freien Platzes entspricht den Einfügekosten
i
β
Je länger eine Liste ist, umso schneller wird sie noch länger.
Reorganisation)
Grenzwerte:
25 / 38
Zugrisverhalten sehr stark.
= Anzahl Suchschritte für das Aunden eines Schlüssels -
(β)
16. Januar 2014
Analyse: Lineares Sondieren
entspricht den Kosten für erfolgreiche Suche und Löschen (ohne
U
ADS 1, V11
∞
X
i =0
βi
1
n
n −1
X
=
16. Januar 2014
1
β
i =
u
i =0
Z m
≤ β −1
−β
ADS 1, V11
(β) =
ln
28 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
i =m−n
m
n
1
i
n −1
X
i =0
1
m
di = β −1 ln
1
1
−i
= β −1
m
m
m
X
i =m−n−1
1
i
−n
−β
ADS 1, V11
16. Januar 2014
29 / 38
Analyse: Verkettung, erfolglose Suche
Analyse: Verkettung, erfolgreiche Suche
Sondierungsfolge bei erfolgreicher Suche von k = Sondierungsfolge
beim Einfügen von k
(i + 1)-ten
Beim Einfügen des
Annahme: n Schlüssel verteilen sich gleichförmig über die m möglichen
Schlüssels sind i Schlüssel in der HT.
Von diesen im Mittel i /m in derselben Kette wie k .
Ketten.
Jede Synonymkette hat also im Mittel n /m
U
P.F. Stadler & S. Will (Bioinf, Uni LE)
=β
Schlüssel.
S
(β) = 1 + β
ADS 1, V11
16. Januar 2014
n
i =1
=
1
+
<
1
+
n
1
+
i
−1
m
=1+
1
( − 1)
n n
nm
2
−1
(1)
(2)
2m
β
(3)
2
ADS 1, V11
16. Januar 2014
31 / 38
Hashing auf Externspeichern I
5
Hash-Adresse bezeichnet Bucket (hier: Seite)
5
lineares Sondieren
uniformes Sondieren
Verkettung
Kollisionsproblem wird entschärft, da mehr als ein Satz auf seiner
Hausadresse gespeichert werden kann
4
Bucket-Kapazität b
3
3
U(β)
aufnehmen.
S(β)
n X
30 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Analyse des Hashing: Vergleich
4
1
(β) =
→
Primärbereich kann bis zu bm Sätze
Überlaufbehandlung
Überlauf tritt erst beim (b
2
2
+ 1)-ten
Synonym auf
alle bekannten Verfahren sind möglich, aber lange Sondierungsfolgen
im Primärbereich sollten vermieden werden
häug Wahl eines separaten Überlaufbereichs mit dynamischer
1
⇒
0
1
β
0.5
1.5
2
0
1
β
0.5
1.5
2
1
Speicherungsreihenfolge im Bucket
Verkettung hat deutlich geringeren Zeitaufwand als oenes Hashing für
Belegungsfaktor
β
Zuordnung der Buckets
nahe 1
ohne Ordnung (Einfügefolge)
nach der Sortierfolge des Schlüssels: aufwendiger, jedoch Vorteile beim
Suchen (sortierte Liste!)
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
32 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Hashing auf Externspeichern II
ADS 1, V11
16. Januar 2014
33 / 38
Hashing auf Externspeichern III
Bucket-Gröÿe meist Seitengröÿe (Alternative: mehrere Seiten / Spur einer
Grundoperationen
Magnetplatte)
Zugri auf die Hausadresse bedeutet 1 physische E/A
direkte Suche: nur in der Bucket-Kette
jeder Zugri auf ein Überlauf-Bucket löst weiteren physischen
sequentielle Suche?
E/A-Vorgang aus
Einfügen: ungeordnet oder sortiert
Bucket-Adressierung mit separaten Überlauf-Buckets
Löschen: keine Reorganisation in der Bucket-Kette - leere
Überlauf-Buckets werden entfernt
weithin eingesetztes Hash- Verfahren für Externspeicher
jede Kollisionsklasse hat eine separate Überlaufkette.
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
34 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
Dynamische Hash-Verfahren I
⇒
Alle Sätze erhalten
ADS 1, V11
Eine im Vergleich zum statischen Hashing dynamische Struktur, die
Wachstum und Schrumpfung des Hash-Bereichs (Datei) erlaubt
Keine Überlauftechniken
Probleme: Kosten, Verfügbarkeit, Adressierbarkeit
P.F. Stadler & S. Will (Bioinf, Uni LE)
35 / 38
Entwurfsziele
Statische Allokation von Speicherbereichen: Speicherausnutzung?
eine neue Adresse
16. Januar 2014
Dynamische Hash-Verfahren II
Wachstumsproblem bei statischen Verfahren
Bei Erweiterung des Adressraumes: Re-Hashing
ADS 1, V11
16. Januar 2014
36 / 38 P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
37 / 38
Erweiterbares Hashing
Die einzelnen Bits eines Schlüssels steuern der Reihe nach den Weg
durch den zur Adressierung benutzten Digitalbaum
i = (b0 , b1 , b2 , . . . )
K
Verwendung der Schlüsselwerte kann bei Ungleichverteilung zu
unausgewogenem Digitalbaum führen (Digitalbäume kennen keine
Höhenbalancierung!)
Verwendung von h (Ki ) als sog. Pseudoschlüssel (PS) soll bessere
Gleichverteilung gewährleisten. h (Ki ) =
(b0 , b1 , b2 , . . . )
Digitalbaum-Adressierung bricht ab, sobald ein Bucket den ganzen
Teilbaum aufnehmen kann.
P.F. Stadler & S. Will (Bioinf, Uni LE)
ADS 1, V11
16. Januar 2014
38 / 38
Herunterladen