Title: Table de hachage
1Table de hachage
- Introduction
- Notion de clé
- Fonction de hachage
- Collisions
- Exemple de fonction de hachage
- Exemple de table de hachage
2Table de hachage
- Introduction
- Notion de clé
- Fonction de hachage
- Collisions
- Exemple de fonction de hachage
- Exemple de table de hachage
3Introduction
Structure de données reposant sur des tableaux
Comment ?
La position de lélément dans le tableau est
fonction de lélément lui-même
4Table de hachage
- Introduction
- Notion de clé
- Fonction de hachage
- Collisions
- Exemple de fonction de hachage
- Exemple de table de hachage
5Notion de clé
Exemples
1. élément étudiant (nom, prénom, ) Clé
numéro détudiant
2. élément abonné téléphonique Clé numéro
de téléphone
6Table de hachage
- Introduction
- Notion de clé
- Fonction de hachage
- Collisions
- Exemple de fonction de hachage
- Exemple de table de hachage
7Fonction de hachage
Connaissant la clé dun élément du tableau, on
cherche un algorithme très efficace pour trouver
lélément dans le tableau (de lordre de O(1))
8Fonction de hachage
9Fonction de hachage
10Fonction de hachage
11Fonction de hachage
Indice tab
0 Pierre Durand - 03.81.11.11.44
1
2 Paul Dupond - 03.81.33.33.33
3 Yvette Bon - 03.81.22.22.22
4
5
6 Guillaume Dupont - 03.81.12.34.56
12Fonction de hachage
Mais en pratique, il est difficile de trouver
une bonne fonction de hachage
13Fonction de hachage
Rappel Une application est surjective si
tout élément de F possède au moins un
antécédent Une application est injective
si tout élément de F possède au plus un
antédédent Une application est bijective
si tout élément de F possède exactement un
antécédent
14Fonction de hachage
15Fonction de hachage
- En pratique
- Il est souvent difficile de trouver une fonction
injective - Dans certains cas, une telle fonction nexiste
pas (M lt N) - Quand elle existe, elle est alors parfois
complexe - et le calcul H(K) peut être coûteux
-
-
16Table de hachage
- Introduction
- Notion de clé
- Fonction de hachage
- Collisions
- Exemple de fonction de hachage
- Exemple de table de hachage
17Collisions
Conséquences On a H(K1) H(K2) i 2 clés
différentes donnent le même indice dans le
tableau On dit quil y a collision
18Collisions
Indice tab
0 Pierre Durand - 03.81.11.11.44
1
2 Paul Dupond 03.81.33.33.33 Yvette Bon 03.81.22.22.22
3
4
5
6 Guillaume Dupond 03.81.12.34.56
H(0381333333) 2 H(0381222222) 2
19Traitement des collisions
Déclarer un tableau de pointeurs (au lieu du
tableau déléments) tabi contiendra la liste
des éléments dont les clés K ont la même image
par H
20Traitement des collisions
Soient K1, K2, .. Kj les clés des éléments E1,
E2, Ej telles que H(K1) H(K2) H(Kj)
i Alors les éléments E1, E2, Ej seront chaînés
à partir de tabi
21Traitement des collisions
Indice tab
0 Pierre Durand - 03.81.11.11.44
1
2 Paul Dupond 03.81.33.33.33 Yvette Bon 03.81.22.22.22
3
4
5
6 Guillaume Dupond 03.81.12.34.56
H(0381333333) 2 H(0381222222) 2
22Traitement des collisions
Indice tab
0
1 Null
2
3 Null
4 Null
5 Null
6
Pierre Durand 03.81.11.11.44 null
Paul Dupond 03.81.33.33.33
Yvette Bon 03.81.22.22.22 null
Guillaume Dupont 03.81.12.34.56 null
23Traitement des collisions
? Avantages de cette méthode Un seul tableau
(de pointeurs)
? Inconvénients de cette méthode - liste
chaînée - la recherche dun élément nest plus
immédiate
24Traitement des collisions
- Augmenter la taille du tableau tab M gt M Les
emplacements de M à M serviront à stocker les
éléments en collisions - Créer un tableau
supplémentaire (col) en parallèle du tableau tab
pour permettre de gérer les collisions
25Traitement des collisions
Si 2 éléments E1 et E2 sont en collisions
(H(K1)H(K2)i) Alors on tabi E1 et coli
i i est lindice tel que tabi E2
Avec i gt M Sinon tabi E1 et coli -1
26Traitement des collisions
Indice tab
0 Pierre Durand - 03.81.11.11.44
1
2 Paul Dupond 03.81.33.33.33 Yvette Bon 03.81.22.22.22
3
4
5
6 Guillaume Dupond 03.81.12.34.56
H(0381333333) 2 H(0381222222) 2
27Traitement des collisions
Indice tab col
0 Pierre Durand 03.81.11.11.44 -1
1
2 Paul Dupond 03.81.33.33.33 7
3
4
5
6 Guillaume Dupont 03.81.12.34.56 -1
7 Yvette Bon 03.81.22.22.22 -1
N 4 M 7 M 8
28Traitement des collisions
? Avantages de cette méthode Pas de liste
chaînée
? Inconvénients de cette méthode - taille du
tableau plus importante - la recherche dun
élément nest plus immédiate
29Table de hachage
- Introduction
- Notion de clé
- Fonction de hachage
- Collisions
- Exemple de fonction de hachage
- Exemple de table de hachage
30Exemple de fonction de hachage
METHODE DE DIVISION
31Exemple de fonction de hachage
Annuaire inversé On a 500 000 abonnés à ranger
dans une table de taille 1 000 003 (nombre
premier) H(K) K mod 1 000 003 H(03 81 12 34
56) 122 313 ? tab122313 Guillaume
Dupond H(03 81 22 22 22) 221 079 ?
tab221079 Yvette Bon
32Exemple de table de hachage
Dictionnaire
Le but est de savoir si un mot est présent dans
un dictionnaire et de le trouver rapidement
Ex 1 dictionnaire de français Element mot
définition Clé mot
33Exemple de table de hachage
Ex 2 compilateur Element variable Clé
nom de variable
- On souhaite détecter les erreurs suivantes
- déclaration dune variable déjà déclarée
- utilisation dune variable non déclarée
34Exemple de table de hachage
Exemple int i, j, nb ij nbx // x non
déclaré int j // j déjà déclarée
35Exemple de table de hachage
1ère étape à chaque déclaration, on range la
variable déclarée dans le tableau
Indice tab
0 i
1
2 j
3
4 nb
5
6
36Exemple de table de hachage
? Détection des erreurs variable déjà déclarée
int i, j, nb ij nbx // x non déclaré int
j // j déjà déclarée TabH( j ) est
déjà occupée j est déjà déclaré !
37Exemple de table de hachage
2ème étape à chaque instruction, on vérifie que
la variable est dans le tableau
int i, j, nb ij nbx // x non déclaré int
j // j déjà déclarée On vérifie que
tabK( i ) et tabK( j ) sont occupés
38Exemple de table de hachage
? Détection des erreurs variable non déclarée
int i, j, nb ij nbx // x non déclaré int
j // j déjà déclarée TabH(x ) est vide
x est non déclaré !
39Exemple de table de hachage
Conclusion En utilisant les tables de hachage,
on est capable de détecter des erreurs de
compilation (erreur de déclaration) très
efficacement. Note Avec dautres structures
(listes, arbres, ), lalgorithme de recherche
dun élément a une complexité au mieux en
log(N) Ici, cest immédiat (sous réserve que lon
trouve une bonne fontion de hachage)
40Exemple de table de hachage
Problème Si on souhaite utiliser la méthode de
la division comme fonction de hachage, il faut
une clé numérique (au lieu dune chaîne de
caractères)
Question comment passer dune clé chaîne de
caractère à une clé numérique ?
41Exemple de table de hachage
42Exemple de table de hachage
ascii(i) 105 ascii(j) 106 ascii(n)
110 ascii(b) 98 En prenant t10 H(i) 105
100 105 H(j) 106 100 106 H(nb)
110100 98101 110980 1090
43Table de hachage
FIN