2016-04-12 11 views
0

Ich hatte eine einfache Frage in meinem Kopf, die mich für eine Weile verwirrt hat. Mein Professor sagte einfach, die Hash-Funktion ist Schlüssel% arrayize. Muss das für jede Hashtabelle so sein oder entscheiden wir etwas? Schreiben wir eigentlich die Hash-Funktion für jede Hash-Tabelle, die wir erstellen? Kann es etwas anderes sein, sagen wir, einfach, Hash-Funktion = Schlüssel.Hash-Funktion und Restoperator

Antwort

0

Im Allgemeinen ist die Domäne einer Hash-Funktion viel größer als ihr Bereich. Zum Beispiel könnte ein Hash "alle Unicode-Strings weniger als 2^64 Zeichen lang" akzeptieren und "eine 16-Bit-Zahl" ausgeben.

Ja, für einige Anwendungen ist die Verwendung der Identity-Funktion als Hash-Funktion sinnvoll, obwohl die Hash-Tabelle sehr an ein gewöhnliches Array erinnert.

Für Hash-Tabellen ist modulo (%) eine gute Wahl: Es ist rechnerisch einfach und verbreitet sich in den üblichen Fällen gut genug. Es ist jedoch nicht kryptographisch stark und viele Anwendungen erfordern dies.

0

Sie haben ein Array zum Speichern der Ergebnisse, das eine feste Größe hat und vom Index referenziert wird (im Falle Ihrer Frage index = Schlüssel% array_size, die garantiert eine Zahl zwischen 0 und array_size-1 erzeugt). Wenn der Index immer größer als die Array-Größe ist, haben Sie Probleme. Wenn es immer weniger ist, dann haben Sie Platz verschwendet und so ist die letzte Stufe eines Hashes der Modulo der Größe des Arrays, in das er passen muss.

Natürlich führt dies nicht immer zu einer gleichmäßigen Verteilung und so können Sie den Schlüssel vor ändern, indem Sie seinen Modulo als Index nehmen.