19/03/2020
1
Table de hachage
19/03/2020
2
Introduction
• Structure de données reposant sur des tableaux
La position de l’élément dans le tableau est fonction de l’élément lui-même Structure de données statique
Algorithme de recherche très performant
19/03/2020
3
Notion de clé
•
Défintion :Une clé est une partie d’un élément qui permet de désigner le contenu de cet élément de manière non ambigüe
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
19/03/2020
4
table de hachage
• Une table de hachage (hash table en anglais) est
• une structure de données qui permet une association clé-élément,
• On accède à chaque élément de la table via sa clé.
• L'accès à un élément se fait en transformant la clé en
• une valeur de hachage (ou simplement hachage) par
• l'intermédiaire d'une fonction de hachage.
• Le hachage est un nombre qui permet la localisation des éléments dans le tableau, typiquement le hachage
est l'indice de l'élément dans le tableau.
• Une case dans le tableau est appelée alvéole.
19/03/2020
5
Fonction de hachage
•
But :
Ranger les N éléments dans un tableau de taille M afin d’optimiser la recherche d’un élément donné
Connaissant la clé d’un élément du tableau, on cherche un algorithme très efficacepour trouver l’élément dans le tableau.
19/03/2020
6
Fonction de hachage
•
Défintion :
Soit E l’ensemble des clés possibles, et F l’ensemble des indices du tableau
Une fonction de hachage H est une fonction qui associe à toute clé K, un indice dans le tableau
H : E F H( K ) = i
19/03/2020
7
Fonction de hachage
•
Car sinon on a H(K1) = H(K2) = i
et 2 éléments sont stockés au même indice Une fonction de hachage doit être injective
19/03/2020
8
TAD Table
• • Table : Ensemble de clés auxquelles on peut
• associer une valeur
• • Vocabulaire :
• – Si la clé c est présente dans une table t,
• On dit qu’il existe une entrée dans la table t pour la clé c
• • Chaque clé est unique
• – Information identifiante et discriminante
permettant de distinguer les entrées de la table
19/03/2020
9
Les opérations sur les Tables
• Les opérations sur les Tables sont:
•
– Recherche,
• – Insertion et
• – Suppression de Clés
19/03/2020
10
Collisions
•
Conséquences : On a H(K1) = H(K2) = i
2 clés différentes donnent le même indice dans le tableau On dit qu’il y a collision
On utilise souvent, en pratique, des fonctions non injectives
19/03/2020
11
Traitement des collisions
•
1ère méthode :chaînage externe
Déclarer un tableau de pointeurs (au lieu du tableau d’éléments) tab[i] contiendra la liste des éléments dont les clés K ont la même image par H
19/03/2020
12
Traitement 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
tab[i]
19/03/2020
13
Exemple
• On insère les éléments de clés
• e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13
• ayant pour valeur de hachage
• 2 , 0, 3, 0, 3, 0, 4, 8, 1, 5, 4, 2, 4
19/03/2020
14
•
19/03/2020
15
Hachage fermé
• Pour insérer une clé k, on sonde les cases systématiquement
• à partirde h(k) jusqu’à en trouver une vide.
• stratégie de sondage
• On définit une nouvelle fonction de hachage qui dépend
• de la clé et du numéro du sondage :
• S : UX{0, 1, . . . ,m − 1}{0, 1, . . . ,m − 1}
• et qui est telle que
• <S(k, 0), S(k, 1), . . . , S(k,m − 1)>
• est une permutation de <0, 1, . . . ,m − 1>.
19/03/2020
16
• Suppression d ’un élément
• distinction entre «vide» et «supprimée»
•
• Utiliser une valeur spéciale «supprimée» au lieu de
«vide» pour signifier qu’on a effacé une valeur dans cette case
• Lors d’une recherche : considérer une case contenant
«supprimée» comme une case contenant une clé
• Lors d’une insertion : considérer une case contenant
«supprimée» comme une case vide.
19/03/2020
17
Hachage fermé
• Hachage linéaire
• Hachage quadratique
• Re-hachage : s(x,i) = (h (x) + i ²) mod M
Re-hachage: s(x, i) = (h(x) + i) modM
19/03/2020
18
Hachage fermé
• Hachage linéaire
• exemple
• On cherche séquentiellement à partir de h(x), une entrée libre.
• Soient les éléments suivants à insérer dans une table de M=26 entrées (de 0 à 25):
• éléments : e1 e2 e3 e4 e5 e6 e7 e8 e9
• ayant pour valeur de hachage
• 0 0 2 0 3 9 9 25 25
• Si l’entrée h(x) est occupée, il faut effectuer une ou plusieurs
tentatives de résolution jusqu’à trouver une entrée libre. i indique la ième tentative de résolution. On effectue le calcul suivant : ((h(x) + i) modulo M) avec M = 26. Pour e1, la place 0 est
disponible, e1 est rangé en 0. e2 devrait être en 0 mais la place est
déjà prise. On effectue une première tentative de résolution (i=1)
en calculant (h(x)+i) modulo 26, soit (0 + 1) modulo 26, soit 1. La
clé e2 est rangée en 1, etc.
19/03/2020
19
Hachage fermé
• Hachage linéaire
• exemple
19/03/2020
20
Exemple de fonction de hachage
•
METHODE DE DIVISIONOn suppose que K est un nombre entier
Prendre comme indice dans le tableau le reste de la division de la clé (qui doit être un entier !) par la taille du tableau
H(K) = K mod M
Le choix de M est alors primordial pour éviter un trop grand nombre de collisions (M : nombre premier, …)
19/03/2020
21
Exemple de table de hachage
•
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