Vous êtes sur la page 1sur 9

UNIVERSITE ADVENTISTE COSENDAI GESTION ET INFORMATIQUE

L2 Informatique

Cours : Algorithmique 2 Enseignant : Dr Lossan BONDE

Chapitre 3 Les Tables de Hachage


Les tables de hachage sont une structure de données qui combinent les avantages des tableaux
(accès direct) et des listes chaînées (allocation dynamique de mémoire) pour stocker des données
avec un temps d'accès réduit.

3.1 Définitions
Une table de hachage est une structure de données qui implémente un
tableau associatif. C'est une structure qui met en correspondance des clés et
des valeurs.
Une table de hachage est constituée d'un tableau et d'une fonction de
hachage. La fonction de hachage est utilisée pour calculer l'index d'une
entrée du tableau stockant la valeur associée à une clé.
L'intérêt principal des tables de hachage est d'assurer une recherche rapide
des éléments dans une collection.
Le temps de recherche dans les structures étudiées jusqu'ici sont:
➢ tableau non trié : o(n) - temps linéaire
➢ tableau trié: o(log2n) - sous-linéaire; recherche dichotomique
➢ Liste chaînée : o(n) - temps linéaire
➢ Table de hachage : o(1) -temps constant, c'est-à-dire non proportionnel à la taille de la
collection.
Illustration pour un carnet d'adresses

1
➢ Les clés sont les noms des personnes dans le carnet d'adresse: Stephane, Diane, Junior,
Dorian
➢ les valeurs sont les numéro de téléphones respectivement : 22-32-72-14, 77-14-12-25, 74-
10-22-88, 99-44-12-75
➢ La fonction de hachage calcule pour une clé donnée, l'index où la valeur est stockée dans le
tableau.
➢ Chaque entrée du tableau est appelée alvéole.

3.2 Concepts
1) Fonction de hachage: Pour une clé donnée, cette fonction calcule l'indexe du tableau où la valeur
associée est stockée ou à stocker. Il est possible que cette fonction calcule le même index pour
différentes clés. Dans ce cas, il se produit une collision. C'est-à-dire que plusieurs valeurs se voient
assigner la même entrée de tableau (le même alvéole).
2) Alvéole : représente une entrée du tableau où est stockée une ou plusieurs valeurs.
3) Collision: Les valeurs associées à plusieurs clés doivent être stockées dans une même entrée. En
cas de collision; une méthode de résolution de collision doit être utilisée pour résorber le conflit. Le
choix de la fonction de hachage est déterminant pour la minimisation des collisions.
4) Résolution de collision: En cas de collision une méthode sera utiliser pour résorber la collision. La
méthode utilisée aura un impact sur les performances (temps de recherche) de la table de hachage.
5) Opérations sur une table de hachage
➢ insérer(H,elt,clé) : insère dans la table de hachage H un élément elt dont la clef est clé.
➢ recherche(H,clé) : recherche dans la table de hachage H si un élément est associé à la clef clé
et renvoie cet élément. C'est l'opération la plus importante sur une table de hachage.
➢ booléen appartient(H clé) : recherche dans la table : recherche dans la table de hachage H si
un élément est associé à la clef clé.

3.3 Fonction de Hachage


Une fonction de hachage permet de transformer une clé en une valeur de hachage (un index),
donnant ainsi la position d position d'un élément dans le tableau.
Si la clé n'est pas un entier naturel, il faut trouver un moyen de la considérer comme un entier
naturel. † Par exemple si la clé est de type Chaine de caractères, on peut sommer les positions dans
l'alphabet de chaque lettre pour obtenir un entier naturel. Il suffit ensuite de transformer cet entier
en index par différentes façons. Par exemple, en prenant le reste de la division entière par le
nombre d'entrées dans le tableau.

3.3.1 Exemple de fonction de hachage : Fonction de hachage de Daniel J. Bernstein


entier hash(str[]) { // str est une chaine de caractères
hash = 5381
i ← 0
Tant que(str[i] ≠ '\0') {
// hash=hash*33+str[i]
hash ← ((hash << 5)+hash)+ str[i]
i ← i + 1

2
}
renvoyer hash
}

3.3.2 Exemple de fonction de hachage : Fonction de hachage de Pearson


➢ Cette fonction requière une “look-up” table T qui contient une permutation des nombres de
0 à 255.
➢ Un message est découpée en n octets : le tableau M représente ces octets.
➢ La taille de la table est m.
entier hash( ) {
hash ← 0
pour i de 1 à n {
hash ← T[(hash + M[i]) % m]
}
renvoyer hash
}

➢ Avantages de la fonction de Pearson


o Simple †
o Rapide
o Peu de collisions espérées
o Permet d’engendrer des tables de hachage parfaites.

3.3.3 Exemple de fonction de hachage : Fonction de Robert Jenkins


x = (x+0x7ed55d16) + (x<<12);
x = (x^0xc761c23c) ^ (x>>19);
x = (x+0x165667b1) + (x<<5);
x = (x+0xd3a2646c) ^ (x<<9);
x = (x+0xfd7046c5) + (x<<3);
x = (x^0xb55a4f09) ^ (x>>16);
return x;

3.3.4 Caractéristiques d'une fonction de hachage


➢ Une Bonne fonction de hachage
o Engendre le moins de collisions
o Possède une complexité faible
➢ Le calcul du hachage se fait parfois en 2 temps : †
o Une fonction de hachage particulière à l'application est utilisée pour produire un
nombre entier à partir de la donnée d'origine. †
o Ce nombre entier est converti en une position possible de la table, en général en
calculant le reste modulo la taille de la table.

3
➢ Taille de la table de hachage : †
o En théorie : souvent des nombres premiers pour éviter les problèmes de diviseurs
communs, qui créeraient un nombre important de collisions.
o En pratique : on utilise une puissance de deux ce qui permet de réaliser l'opération
modulo par de simples décalages, et donc de gagner en rapidité.
➢ Distribution uniforme des valeurs
o Une bonne fonction de hachage doit donner une distribution uniforme des valeurs.
o Une distribution non uniforme augmente le nombre de collisions, et le coût de leur
résolution.
➢ Clutering des valeurs
o Regroupement des valeurs de hachage de façon côte à côte dans la table = cluster …
o Le « clustering » est très pénalisant pour les techniques de résolution des collisions
par adressage ouvert. …
o Les fonctions de hachage réalisant une distribution uniforme des hachages sont donc
les meilleures, mais sont en pratique difficile à trouver.

3.4 Collisions et résolution des collisions


Les collisions sont pratiquement difficile a éliminer dans une table de hachage. Un hachage sans
collision est appelée hachage parfait.
Exemple de collisions

Collisions et probabilités
➢ Le problème des collisions dans les tables de hachage est si mil aire au problème des
anniversaires : †
o Dans un groupe de personnes, quelle est la probabilité que deux soient nées le
même jour ? …
➢ On raisonne à l’aide du complémentaire : probabilité que les personnes soient toutes nées
des jours différents

4
o pour la première personne : 365 choix / 365
o pour la 2eme personne : 364 / 36
o pour la ieme personne (365 – i +1) /365
➢ Pour n : [365*364*363*…*(365-n+1)]/365n
➢ Donc 2 le même jour : † 1 - [365*364*363*…*(365-n+1)]/365n
Soit les probabilités suivantes:

➢ La probabilités d’avoir une collision dans une table de taille 1 million avec 2500 éléments est
estimée à 95%.
➢ Remarques
o Cela suppose une répartition uniforme des données : c’est rarement le cas en
pratique.
➢ Les collisions sont donc fréquentes dans les tables de hachages, et d e nombreuses
stratégies d e résolution des collisions existent mais les plus connues et utilisées sont:
o Le chainage,
o l'adressage ouvert.

3.4.1 La résolution de collisions par chaînage


➢ Méthode la plus simple. …
o Chaque case de la table est en fait une liste chaînée d’éléments dont les clés ont le
même hachage; c'est-à-dire ayant la même valeur par la fonction de hachage.
▪ Une fois la case trouvée, la recherche est alors linéaire en la taille de la liste

5
chaînée. †
▪ Dans le Pire des cas (la fonction de hachage renvoie toujours la même
valeur) , on est alors O(n) et la table hachage devient une liste chaînée.
➢ Avantages †
o la suppression d'un élément est facile,
o l'agrandissement de la table peut être retardé

3.4.2 La résolution de collisions par adressage ouvert


➢ L' adressage ouvert consiste dans le cas d'une collision à stocker les éléments dans d’autres
alvéoles de l a t able. …
o La position de ces alvéoles est déterminée par une méthode de sondage : †
▪ Lors d'une recherche, si la case obtenue par hachage direct ne permet pas
d'obtenir l e bon élément , une recherche sur les cases obtenues par une
méthode de sondage est effectuée jusqu'à trouve r l’ élément, ou n o n, ce
qui indique qu'aucun élément de ce type n'appartient à la table.
o Les méthodes de sondages courantes sont:
▪ Sondage linéaire (linear probing),
▪ Sondage quadratique (quadratic probing)
▪ Double hachage

Sondage linéaire
L'intervalle entre les cases est fixe souvent 1. „
➢ next(clé,i) = (hash(clé) + i) mod m „
➢ Ordre de parcours des alvéoles „
o T[hash(clé)], T[hash(clé)+1], T[hash(clé)+2] …
Le sondage linéaire a tendance à produire des clusters (clustering). Considérons l'exemple ci-

6
dessous.
 Supposons une distribution uniforme de n éléments. La probabilité qu'un alvéole soit

occupé est de 1/n.

 Si une nouvelle insertion hache à b, alors elle ira à b. Mais si elle hache plutôt à a (occupé),
elle ira à b. Donc la probabilité d'occuper b à double (2/n).

 Lors de la prochaine insertion, tout hachage à a, b ou c ira en d; la probabilité de d a été


multipliée par 4, soit 4/n.

 Après les précédentes insertions, la probabilité d'occuper e sera de 5/n.


On assiste ainsi graduellement à la formation de cluster.

Sondage Quadratique
L'intervalle entre les cases augmente linéairement. Les indices des cases augmentent donc
quadratiquement : +3 , +6, +12, +20 … „
➢ next(clé,i) = (hash(clé) + i + i 2) mod m
➢ Ordre de parcours des alvéoles „
➢ T[hash(clé)], T[hash(clé)+2], T[hash(clé)+6] …
o soit donc h+1, h+4, h+9, ..., h+i2 d'où le nom quadratique

Double hachage
En cas de collision, l'adresse de la case est donnée par une deuxième fonction de hachage, ou
hachage secondaire. „
➢ next(clé,i) = (hash1(clé) + i hash2(clé)) mod m

7
Exemples de résolution de collision par adressage ouvert

Avantages et inconvénients de l' adressage ouvert


➢ Sondage linéaire : possède la meilleure performance mais est sensible à l'effet de clustering
(regroupement de données dans la même partie de la table). †
➢ Le double hachage: moins performante, mais permet de réduire presque complètement les
problèmes de clustering , en contrepartie d en contrepartie d'une complexité plus élevée.
➢ Le sondage quadratique: se situe entre le linéaire et le double hachage au niveau des
performances. †
➢ La suppression d’un élément n’est pas gérable facilement.

8
3.5 Le facteur de charge d'une table de hachage
Le facteur de charge (load factor) est une propriété importante d'une table de hachage. Il mesure la
proportion des cases utilisée dans la table. Il est indicateur des performances d'une table de
hachage.
➢ Le facteur de charge est en général limité à 80%, même en disposant d'une bonne fonction
de hachage. …
➢ Des facteurs d e charge faibles ne sont pas pour autant significatifs de bonne performances,
en particulier si l a fonction de hachage est mauvaise et génère du clustering.

3.6 Les applications des tables de hachage


➢ Tableaux associatifs

o Les tables de hachage sont couramment utilisées pour implémenter des tableaux
associatifs dans divers langages de scripts comme Perl et PHP.

➢ Indexation des bases de données

➢ Caches

➢ Ensemble

➢ Implémentation des Objets dans les langages Orientés Objets

Vous aimerez peut-être aussi