Académique Documents
Professionnel Documents
Culture Documents
L2 Informatique
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é.
2
}
renvoyer hash
}
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.
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.
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é
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
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).
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
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.
o Les tables de hachage sont couramment utilisées pour implémenter des tableaux
associatifs dans divers langages de scripts comme Perl et PHP.
➢ Caches
➢ Ensemble