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