|
C'est une des plus simple, et aussi une des pires. La valeur hashée est tout simplement le produit des bytes individuels. L'implémentation est: inline unsigned HashMultiplicative(const unsigned char *buffer, int size) { unsigned h = 1; for (int i=0; i<size; i++) h *= buffer[i]; return h; } Cette fonction est très mauvaise parce qu'elle possède un élément absorbant. Ici encore, c'est le zéro. Donc, dès qu'une clef a un byte à zéro, la valeur hashée est zéro. Plus perversement encore, si le produit partiel atteint 0 (parce qu'il est congruent à zéro modulo 232), la fonction hashée sera zéro. Une autre propriété indésirable: l'élément absorbant. Une bonne fonction de hash n'a pas d'élément absorbant. |