Le tableau ci-dessous résume les performances des différentes fonctions de hachage décrites ci-dessus, pour trois ensembles de données:
1) Tous les mots et expressions avec des entrées dans le 2ème dictionnaire intl de Merriam-Webster (311 141 chaînes, longueur moyenne 10 caractères).
2) Toutes les chaînes dans / bin / , / usr / bin / , / usr / lib / , / usr / ucb /
et / usr / openwin / bin / * (66 304 chaînes, longueur moyenne 21 caractères).
3) Une liste d'URL collectées par un robot d'exploration qui a fonctionné pendant plusieurs heures la nuit dernière (28 372 chaînes, longueur moyenne de 49 caractères).
La mesure des performances indiquée dans le tableau est la "taille moyenne de la chaîne" sur tous les éléments de la table de hachage (c'est-à-dire que la valeur attendue du nombre de clés se compare pour rechercher un élément).
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
En regardant ce tableau, il est clair que toutes les fonctions à l'exception de la fonction Java actuelle et des deux versions cassées de la fonction de Weinberger offrent d'excellentes performances, presque indiscernables. Je suppose fortement que cette performance est essentiellement «l'idéal théorique», ce que vous obtiendriez si vous utilisiez un véritable générateur de nombres aléatoires à la place d'une fonction de hachage.
J'exclurais la fonction WAIS car sa spécification contient des pages de nombres aléatoires et ses performances ne sont pas meilleures que celles des fonctions beaucoup plus simples. Chacune des six fonctions restantes semble être un excellent choix, mais nous devons en choisir une. Je suppose que j'exclurais la variante de Vo et la fonction de Weinberger en raison de leur complexité supplémentaire, bien que mineure. Parmi les quatre autres, je choisirais probablement P (31), car c'est le moins cher à calculer sur une machine RISC (car 31 est la différence de deux puissances de deux). P (33) est également bon marché à calculer, mais ses performances sont légèrement inférieures et 33 est composite, ce qui me rend un peu nerveux.
Josh