Hash-Funktionsklassifizierung

9

Im Internet bin ich auf folgende Frage gestoßen:

Klassifizieren Sie die Hashing-Funktionen anhand der verschiedenen Methoden, mit denen der Schlüsselwert ermittelt wird.

mit Antworten wie

  • Direkte Methode
  • Subtraktionsmethode
  • Modulo-Division-Methode
  • Digit-Extraction-Methode
  • Mid-Square-Methode
  • Faltmethode
  • Pseudozufallsmethode

was ich seltsam finde. Ich glaube, ich weiß viel über Hashing, aber das ist für mich einfach Kauderwelsch, könnte jemand das erklären?

Maaartinus
quelle

Antworten:

4

Sie sind Methoden, um einen Hashcode in einen Index des Arrays umzuwandeln, das die Werte enthält. Angenommen, Sie haben einen Hashcode von 0x12345678. Eine sehr große Anzahl, und es ist unwahrscheinlich, dass Sie ein Array dieser Größe haben. Wenn Sie dies tun, können Sie es einfach tun

Value = array[0x12345678];

Und fertig sein (direkte Methode).

Wenn Sie dies nicht tun, haben Sie eine Möglichkeit, diesen Wert in einen Wert umzuwandeln, der der Arraygröße entspricht, während Sie versuchen, zu viele Kollisionen zu vermeiden. Die verwendeten Begriffe sind wahrscheinlich auch unter anderen Namen bekannt, aber Sie können beispielsweise einfach die höheren Bits des Hashcodes maskieren

Value = array[hashcode & 0xffff];

Oder modifiziere den Hashcode gegen die Arraygröße

Value = array[hashcode % array.size()]; // modulo division

Usw.

Bearbeiten: Dieser Link kann helfen

James
quelle
Danke, das war's - der Link scheint die Quelle dieses *** zu sein. Es macht immer noch keinen Sinn, da sie viele Dinge miteinander mischen: 1. Berechnen des Hash-Codes aus einem Schlüssel (z. B. Falten und Hinzufügen), 2. Verbessern (= Verschmieren) des Hash (z. B. mittleres Quadrat), 3. Zuordnen der Hash zum Index (z. B. Modul, "&").
Maaartinus