Il n'y a pas une telle chose comme une "bonne fonction de hachage" universel hachages (ed. oui, je sais qu'il ya une telle chose comme "universel hachage" mais ce n'est pas ce que je voulais dire). En fonction du contexte, des critères différents de déterminer la qualité de hachage. Deux personnes déjà mentionné SHA. C'est un hachage cryptographique et il n'est pas du tout bon pour les tables de hachage qui tu veux sans doute dire.
Les tables de hachage ont des exigences très différentes. Mais encore, la recherche d'une bonne fonction de hachage est universellement dur, parce que les différents types de données exposer les différentes informations qui peuvent être haché. En règle générale, il est bon de considérer toutes les informations d'un type en va de même. Ce n'est pas toujours facile, ni même possible. Pour des raisons de statistiques (et donc de la collision), il est également important de générer une bonne répartition sur le problème de l'espace, c'est à dire tous les objets possibles. Cela signifie que lorsque le hachage des nombres entre 100 et 1050, c'est pas bon de laisser le plus significatif à jouer un grand rôle dans la table de hachage parce que pour ~ 90% des objets, ce chiffre sera de 0. Il est beaucoup plus important que les trois derniers chiffres de déterminer la valeur de hachage.
De même, lorsque les chaînes de hachage, il est important de considérer tous les personnages – sauf quand elle est connue à l'avance que les trois premiers caractères de toutes les chaînes doivent être les mêmes; considérant ces choses, alors est un déchet.
C'est en fait l'un des cas où, je conseille de lire ce que Knuth est-à-dire dans L'Art de la Programmation Informatique, vol. 3. Une autre bonne lecture est Julienne Walker est L'Art de Hachage.