Avoir une bonne fonction de hachage pour un C++ table de hachage?

Je suis dans le besoin d'un axé sur la performance fonction de hachage mise en œuvre en C++ pour une table de hachage qui je vais être de codage. Je regardai autour de moi déjà et ne se trouve que des questions demandant ce qui est une bonne fonction de hachage "en général". J'ai considéré CRC32 (mais où trouver de la bonne mise en œuvre?) et quelques algorithmes de cryptographie. Ma table, bien que, a des exigences très spécifiques.

Voici ce que le tableau sera comme:

100,000 items max
200,000 capacity (so the load is 0.5)
hashing a 6-character string which is a part of English sentence
     examples: "become"    "and he"    ", not "

La priorité numéro un de ma table de hachage est quick search (recherche). Insertion rapide n'est pas important, mais ça va venir avec la recherche rapide. La suppression n'est pas important, et re-hachage n'est pas quelque chose que je vais être à la recherche. Pour gérer les collisions, je serai probablement à l'aide de séparé de chaînage comme décrit ici. J'ai déjà regardé cet article, mais voudrais un avis de ceux qui ont à traiter ce genre de tâche.

  • J'ai également ajouté une fonction de hachage, vous aimeriez peut-être comme une autre réponse
  • Si vous êtes désespéré, pourquoi n'avez-vous pas mis un rep prime sur ce?
  • rep bounty: je l'avais mis si personne ne l'a voulu offrir des suggestions utiles, mais je suis agréablement surpris 🙂
  • De toute façon un problème avec des primes est que vous ne pouvez pas placer des primes jusqu'à 2 jours ont passé
  • Avez-vous envisagé d'utiliser un ou plusieurs des éléments suivants à des fins générales les fonctions de hachage: partow.net/programming/hashfunctions/index.html ils sont extrêmement rapide et efficace.
  • Êtes-vous sûr que le rendement de la fonction de hachage est critique? Fonctions populaires sont pour faire pivoter une unsigned int par, disons de 3 bits et les ajouter dans le prochain octet, puis de réduire modulo un nombre premier, que l'on travaille OK pour le texte. À l'entrée d'une certaine manière, en vertu de l' (partielle) de contrôle de potentiellement malveillants parties (ils pourraient vous donner de 100 000 chaînes de hachage à quelques seaux...)? Ensuite, vous devez le rendre dur à cuire des données pour une telle attaque, peut-être par "salage" (démarrer avec un secret valeur aléatoire pour chaque table) et certains de hachage cryptographique jeté (mais pour de courtes chaînes de caractères qui pourraient ne pas être très efficace).

InformationsquelleAutor DV. | 2009-03-10