Fonction multiplicative


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.




( steven.pigeon@videotron.ca )