[Lehrstuhl A&D]  [Institut für Informatik]  [Universität Freiburg] 

Folien

Übungen

Programme

Bilder

< Zurück

Multimedia-Ergänzungen zum Buch: Algorithmen und Datenstrukturen, Kapitel 4: Hashverfahren

Spektrum Verlag

In den Kapiteln 1 und  3 haben wir einige Methoden kennengelernt, die es erlauben, eine Menge von Datensätzen so zu speichern, dass  die Operationen Suchen, Einfügen und Entfernen unterstützt werden. Jeder Datensatz ist dabei gekennzeichnet durch einen eindeutigen Schlüssel. Zu jedem Zeitpunkt ist lediglich eine (kleine) Teilmenge S aller möglichen Schlüssel K (englisch: keys) gespeichert. Statt nun bei der Suche nach einem Datensatz mit Schlüssel k mehrere Schlüsselvergleiche mit Schlüsseln aus S auszuführen, wird bei Hash-Verfahren versucht, durch eine Berechnung festzustellen, wo der Datensatz mit Schlüssel k gespeichert ist. Die Datensätze werden in einem linearen Feld mit Indizes von 0 bis m - 1 gespeichert; dieses Feld nennt man die Hashtabelle, m ist die Größe der Hashtabelle.

Eine Abbildung, die Hashfunktion h ordnet jedem Schlüssel k einen Index h(k) zwischen 0 und m - 1 zu, die Hashadresse. Im allgemeinen ist S eine sehr kleine Teilmenge von K. Die Hashfunktion kann also im allgemeinen nicht injektiv sein, sondern muß verschiedene Schlüssel auf dieselbe Hashadresse abbilden. Zwei Schlüssel k,k'  mit h(k)=h(k') heißen Synonyme; befinden sich beide Schlüssel in der aktuellen Schlüsselmenge K, so ergibt sich eine  Adresskollision. Treten in K keine Synonyme auf, so kann jeder Datensatz in der Hashtabelle an der seiner Hashadresse entsprechenden Stelle gespeichert werden. Bei Adresskollisionen hingegen muß eine Sonderbehandlung vorgenommen werden. Ein Hashverfahren muß also zwei Forderungen genügen. Erstens sollen möglichst wenige Kollisionen auftreten. Dies kann angestrebt werden durch die Wahl einer „guten“ Hashfunktion. Zweitens sollen Adresskollisionen möglichst effizient aufgelöst werden.
Bei Fragen zu dem Inhalt des Buches senden Sie bitte eine Email an ad-buch@informatik.uni-freiburg.de.
Algorithmen und Datenstrukturen

Stefan Edelkamp (edelkamp@informatik.uni-freiburg.de)