Die Divisionsrestmethode (siehe auch Modulo) liefert eine Hashfunktion.

Die Funktion lautet:

ist die Größe der Hashtabelle.

Eigenschaften

  1. Die Hash-Funktion kann sehr schnell berechnet werden
  2. Die Wahl der Tabellengröße beeinflusst die Kollisionswahrscheinlichkeit der Funktionswerte von .

Für die meisten Eingabedaten ist zum Beispiel die Wahl einer Zweierpotenz für , also , ungeeignet, da dies der Extraktion der -niedrigstwertigen Bits von entspricht, so dass alle höherwertigen Bits bei der Hash-Berechnung ignoriert werden.

Für praxisrelevante Anwendungen liefert die Wahl einer Primzahl für , welche keine Mersenne-Primzahl ist, eine geringe Anzahl von zu erwartenden Kollisionen bei vielen Eingabedatenverteilungen.

Hashing von Zeichenketten

Zeichenketten können mit der Divisionsmethode gehasht werden, indem sie in ganze Zahlen zur Basis umgewandelt werden, wobei die Zeichensatzgröße bezeichnet.

Um Integer-Überläufe zu vermeiden, kann für die Berechnung des Hashwertes bei Schlüsseln das Horner-Schema angewendet werden. Das folgende Beispiel zeigt eine Berechnung eines Hashwertes für eine 7-Bit-ASCII-Zeichenkette .

Somit kann als Zwischenergebnis maximal auftreten.

Dargestellt in Pseudocode:

Parameter: natürliche Zahlen i, h=0; Feld s
 for i = 0 to i < länge_von(s)
	h = (h * 128 + s[i]) mod m;
Ergebnis: h.

Die Multiplikation mit 128 = 2^7 entspricht der Links-Bit-Shift-Operation << 7.

Literatur

Einzelnachweise

  1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Introduction to Algorithms. 2. Auflage. MIT Press unter anderem, Cambridge MA unter anderem 2001, ISBN 0-262-03293-7, S. 231.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.