knuth multiplicatif de hachage

Est-ce une mise en œuvre correcte de la Knuth multiplicatif de hachage.

int hash(int v)
{
    v *= 2654435761;
    return v >> 32;
}

Déborde dans la multiplication affecte l'algorithme?

Comment améliorer les performances de cette méthode?

Vous voudrez certainement utiliser unsigned int (ou unsigned long long, car elle semble dépendre de la taille de l' >32 bits) au lieu de la plaine int.
Oui, dépassement de sera certainement éviter ce travail. En fait, si votre int est typique de ce code renvoie toujours 0 ou -1.
Votre de décalage de bits est (si l'int est de 32 bits) à l'extrême. Combien de morceaux de votre hash? Soustraire de 32
ok, donc si je veux 32bit de hachage, je n'ai pas besoin de décaler les bits
est dessin à la mauvaise conclusion, oui, vous avez à décalage de bits. Vous avez juste besoin de commencer avec un type entier, qui est de plus de 32 bits, tels que uint64_t.

OriginalL'auteur José | 2012-08-08