13.5 Les fonctions de h-code

Dans les discussions précédentes nous avons supposé l'existence d'une fonction H qui fasse correspondre, avec toutes les exigences nécessaires (rapidité, uniformité, etc.), au domaine de valeurs des clés K celui des adresses [0 .. M-1] du tableau de h-code. La question est alors : comment construire (ou choisir) une telle fonction H ?

De toutes les formes de fonctions H (cf. Knuth, vol. III déjà cité) nous n'en retiendrons que 2 :

a)
Les fonctions basées sur une méthode de division.
b)
Les fonctions basées sur une méthode de multiplication.

Le papier suivant constitue une excellente synthèse sur les fonctions de h-code et contient une bibliographie très étendue sur ce sujet :

G.D. Knott, "Hashing functions".
The Computer Journal, vol. 18, No. 3, 1975, pp. 265-278.

13.5.1 Les méthodes de division

La méthode de division pour une fonction de h-code est celle que nous avons employée dans les exemples traités jusqu'ici. Elle consiste à prendre comme indice dans le tableau le reste de la division de la clé (il faut qu'elle soit entière !) par la taille du tableau.

c'est-à-dire H(k) = k mod M (1)

Il est toujours possible, par un procédé adéquat, de transformer une clé quelconque en une valeur entière, ne serait-ce qu'en déterminant son ordinal dans un ensemble de valeurs possibles.

Dans la formule (1) il faut cependant choisir M avec soin. Ainsi, si M est une puissance de la base numérique de la machine, M = 2r, alors le calcul de H(k) revient à isoler les r bits les moins significatifs de la clé K (par divisions entières successives dont on ne considère que le reste).

Prendre M parmi les nombres premiers est un pas dans la bonne direction, cependant il faut alors faire attention au fait que dans certains cas le calcul de H(k) revient à simplement superposer les valeurs des composantes d'une clé. Par exemple :

14. Structures à support mixte

Table des matières.

Site Hosting: Bronco