Die folgende Tabelle fasst die Leistung der verschiedenen oben beschriebenen Hash-Funktionen für drei Datensätze zusammen:
1) Alle Wörter und Phrasen mit Einträgen in Merriam-Websters 2nd Int'l Unabridged Dictionary (311.141 Zeichenfolgen, durchschnittliche Länge 10 Zeichen).
2) Alle Zeichenfolgen in / bin / , / usr / bin / , / usr / lib / , / usr / ucb /
und / usr / openwin / bin / * (66.304 Zeichenfolgen, durchschnittliche Länge 21 Zeichen).
3) Eine Liste von URLs, die von einem Webcrawler gesammelt wurden, der letzte Nacht mehrere Stunden lang ausgeführt wurde (28.372 Zeichenfolgen, durchschnittliche Länge 49 Zeichen).
Die in der Tabelle angezeigte Leistungsmetrik ist die "durchschnittliche Kettengröße" über alle Elemente in der Hash-Tabelle (dh der erwartete Wert der Anzahl der Schlüssel wird verglichen, um ein Element nachzuschlagen).
Webster's Code Strings URLs
--------- ------------ ----
Current Java Fn. 1.2509 1.2738 13.2560
P(37) [Java] 1.2508 1.2481 1.2454
P(65599) [Aho et al] 1.2490 1.2510 1.2450
P(31) [K+R] 1.2500 1.2488 1.2425
P(33) [Torek] 1.2500 1.2500 1.2453
Vo's Fn 1.2487 1.2471 1.2462
WAIS Fn 1.2497 1.2519 1.2452
Weinberger's Fn(MatPak) 6.5169 7.2142 30.6864
Weinberger's Fn(24) 1.3222 1.2791 1.9732
Weinberger's Fn(28) 1.2530 1.2506 1.2439
Wenn man sich diese Tabelle ansieht, ist klar, dass alle Funktionen außer der aktuellen Java-Funktion und den beiden defekten Versionen der Weinberger-Funktion eine hervorragende, nahezu ununterscheidbare Leistung bieten. Ich vermute stark, dass diese Leistung im Wesentlichen das "theoretische Ideal" ist, was Sie erhalten würden, wenn Sie einen echten Zufallszahlengenerator anstelle einer Hash-Funktion verwenden würden.
Ich würde die WAIS-Funktion ausschließen, da ihre Spezifikation Seiten mit Zufallszahlen enthält und ihre Leistung nicht besser ist als die der weitaus einfacheren Funktionen. Jede der verbleibenden sechs Funktionen scheint eine ausgezeichnete Wahl zu sein, aber wir müssen eine auswählen. Ich nehme an, ich würde Vos Variante und Weinbergers Funktion wegen ihrer zusätzlichen Komplexität ausschließen, wenn auch geringfügig. Von den verbleibenden vier würde ich wahrscheinlich P (31) auswählen, da dies auf einer RISC-Maschine am billigsten zu berechnen ist (da 31 die Differenz zweier Zweierpotenzen ist). P (33) ist ähnlich billig zu berechnen, aber seine Leistung ist geringfügig schlechter, und 33 ist zusammengesetzt, was mich etwas nervös macht.
Josh