Kurs:Algorithmen und Datenstrukturen/Vorlesung/Hashtabellen dynamischeHashverfahren
Dynamische Hashverfahren
[Bearbeiten]Auf dieser Seite werden die dynamischen Hashverfahren behandelt.
Das Problem statischer Hashverfahren ist, dass es einen festen Bildbereich gibt und dadurch zusätzliche mehr Einträge einen Neuaufbau einer größeren Hashtabelle erfordern. Die Lösung des Problems sind die dynamischen Hashverfahren mit dynamisch wachsenden oder schrumpfenden Bildbereichen. Die wachsenden Bildbereiche werden etwa durch Verdopplung erreicht. Die Funktionsfamilie, definiert auf dem Bereich der zu speichernden Elemente E lautet
Hier haben wir eine Folge von Hashfunktionen mit . N ist die Anfangsgröße des Hashverzeichnisses. Der Wert von i ist das Level der Hashfunktion.
Lokales Wachstum
[Bearbeiten]Das Ziel ist das vermeiden von Rehashen bei der Verdopplung eines Bildbereichs, d.h :
- für etwa die Hälfte aller
- für die andere Hälfte.
Elemente die einem Bucket j durch zugeordnet werden, werden durch also auf jeweils eines von zwei Buckets verteilt: j oder . Damit ist das Ziel erfüllt durch .
Bitvektordarstellung
[Bearbeiten]Statt Familien von Hashfunktionen wird hier genau eine Funktion zugeordnet. Das Zielbereich ist das Intervall [0.0...1.0] hier werden keine ganzen Zahlen verwendet, sondern Gleitpunktzahlen. Es ist eine gleichmäßige Verteilung auf den Zielbereich gefordert.
Die Hashwerte im binären Zahlensystem sehen wie folgt aus:
0.0= b0.000000...
0.5= b0.100000...
0.75 = b0.110000...
0.99999... = b0.111111...
Die ersten i Bits hinter dem Punkt adressieren ein Feld der Größe . Die Hinzunahme eines Bits verdoppelt nun den Bildbereich.