Andere Schlüsseltypen

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]

TYPE HashValue = INTEGER; (* 0..1023 *)

PROCEDURE HashString(string: ARRAY OF CHAR) : HashValue;
   VAR
      index: INTEGER;
      hashval, ordval: INTEGER;
      ch: CHAR;
BEGIN
   hashval := 0; index := 0;
   WHILE (index < LEN(string)) & (string[index] # 0X) DO
      ch := string[index];
      IF ch >= " " THEN
         ordval := ORD(ch) - ORD(" ");
      ELSE
         ordval := ORD(MAX(CHAR)) - ORD(" ") + ORD(ch);
      END;
      hashval := SHORT(SYSTEM.ROT(hashval, -5)) + ordval;
      INC(index);
   END;
   RETURN SHORT(SYSTEM.LSH(1327217883 * hashval, 10 - 32))
END HashString;

*In der Praxis kommen viele weitere Schlüsseltypen neben INTEGER vor, so daß zuvor eine Konvertierung stattfinden muß.
 
*Längere Schlüssel (insbesondere Zeichenketten) müssen dabei so geschickt zu einer INTEGER verdichtet werden, daß auch die Reihenfolge relevant ist, d.h. &Auml;B" sollte einen anderen Hash-Wert haben als "BA".
 
*Sehr beliebt ist es daher, Summation und Rotation zu verbinden.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]
Copyright © 1999 Andreas Borchert, in HTML konvertiert am 29.06.1999