31
Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Embed Size (px)

Citation preview

Page 1: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage

Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage

Florent Langrognet

Page 2: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage

Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage

Page 3: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Introduction

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

Structure de données statiques

Algorithme de recherche très performant

Page 4: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage

Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage

Page 5: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

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éphoniqueClé : numéro de téléphone

Page 6: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage

Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage

Page 7: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

But :

Ranger les N éléments dans un tableau de taille Mafin d’optimiser la recherche d’un élément donné

Connaissant la clé d’un élément du tableau, on chercheun algorithme très efficace pour trouver l’élément dans le tableau (de l’ordre de O(1))

Page 8: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

Défintion :

Soit E l’ensemble des clés possibles, et F l’ensemble des indices du tableauUne fonction de hachage H est une fonction qui associe à toute clé K, un indice dans le tableauH : E FH( K ) = i

Page 9: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

Exemple : Annuaire inversé

Classe Abonne :Attributs :

char * nomchar * prenomint numeroTel

Page 10: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

Soit un abonné Ai de clé Ki La position de Ai dans le tableau sera la valeur de H(Ki)

tab[H(Ki)] = Ai

Page 11: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

H(0381111144) = 0

H(0381333333) = 2H(0381222222) = 3

H(0381123456) = 6

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

Page 12: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

Mais en pratique, il est difficile de trouver une ‘bonne’ fonction de hachage

La recherche dans une telle table est immédiate

Connaissant K (le numéro de téléphone), l’indice dans le tableau est donné par H(K)

Page 13: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction 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 sitout élément de F possède au plus un antédédent

Une application est bijective sitout élément de F possède exactement un antécédent

Page 14: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

Car sinon on a H(K1) = H(K2) = iet 2 éléments sont stockés au même indice

Quel élément placer à l’indice i ? Que faire de l’autre élément ?

Une fonction de hachage doit être injective

Page 15: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Fonction de hachage

En pratique :

- Il est souvent difficile de trouver une fonction injective

- Dans certains cas, une telle fonction n’existe pas (M < N)

- Quand elle existe, elle est alors parfois complexe et le calcul H(K) peut être coûteux

Page 16: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage

Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage

Page 17: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Collisions

Conséquences :On a H(K1) = H(K2) = i2 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

Page 18: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Collisions

H(0381333333) = 2

H(0381222222) = 2

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

Page 19: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

1ère méthode : chaînage externe

tab[i] contiendra la liste chaînée des éléments dont les clés K ont la même image par HDéclarer un tableau de pointeurs sur cellule (au lieu du tableau d’éléments)

Page 20: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

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 detab[i]

Page 21: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

H(0381333333) = 2

H(0381222222) = 2

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

Page 22: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

Pierre Durand

03.81.11.11.44

null

Paul Dupond

03.81.33.33.33Yvette Bon

03.81.22.22.22

null

Guillaume Dupont

03.81.12.34.56

null

Indice tab

0

1 Null

2

3 Null

4 Null

5 Null

6

Page 23: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

Avantages de cette méthode : Un seul tableau (de pointeurs)

Inconvénients de cette méthode : - liste chaînée- la recherche d’un élément n’est plus immédiate

Page 24: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

2ème méthode : tableau de collisions

- Augmenter la taille du tableau tab : M’ > MLes 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

Page 25: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

Si 2 éléments E1 et E2 sont en collisions (H(K1)=H(K2)=i)Alors on

tab[i] = E1 et col[i] = i’ i’ est l’indice tel que tab[i’] = E2 Avec i’ > M

Sinon tab[i] = E1 et col[i] = -1

Page 26: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement des collisions

H(0381333333) = 2

H(0381222222) = 2

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

Page 27: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement 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

Page 28: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Traitement 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 d’un élément n’est plus immédiate

Page 29: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Table de hachage

Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage

Page 30: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Exemples de fonctions de hachage

METHODE DE DIVISION

On 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 tableauH(K) = K mod M

Le choix de M est alors primordial pour éviter un trop grand nombre de collisions(M : nombre premier, …)

Page 31: Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemples de fonctions de hachage Florent Langrognet

Exemples de fonctions 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 tab[122313] = « Guillaume Dupond …»

H(03 81 22 22 22) = 221 079 tab[221079] = « Yvette Bon …»