La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Table de hachage Introduction Notion de clé Fonction de hachage

Présentations similaires


Présentation au sujet: "Table de hachage Introduction Notion de clé Fonction de hachage"— Transcription de la présentation:

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

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

3 Introduction Structure de données reposant sur des tableaux
Structure de données statiques Algorithme de recherche très performant Comment ? La position de l’élément dans le tableau est fonction de l’élément lui-même

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

5 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

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

7 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 efficace pour trouver l’élément dans le tableau (de l’ordre de O(1))

8 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

9 Fonction de hachage Exemple : Annuaire inversé Classe Abonne :
Attributs : char * nom char * prenom int numeroTel

10 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

11 Fonction de hachage H(0381111144) = 0 H(0381333333) = 2
Indice tab Pierre Durand 1 2 Paul Dupond 3 Yvette Bon 4 5 6 Guillaume Dupont H( ) = 0 H( ) = 2 H( ) = 3 H( ) = 6

12 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) Mais en pratique, il est difficile de trouver une ‘bonne’ fonction de hachage

13 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 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

14 Fonction de hachage Une fonction de hachage doit être injective
Car sinon on a H(K1) = H(K2) = i et 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

15 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

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

17 Collisions On utilise souvent, en pratique, des fonctions non injectives 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

18 Collisions H(0381333333) = 2 H(0381222222) = 2 Indice tab
Pierre Durand 1 2 Paul Dupond – Yvette Bon – 3 4 5 6 Guillaume Dupond – H( ) = 2 H( ) = 2

19 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 H Déclarer un tableau de pointeurs sur cellule (au lieu du tableau d’éléments)

20 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]

21 Traitement des collisions
Indice tab Pierre Durand 1 2 Paul Dupond – Yvette Bon – 3 4 5 6 Guillaume Dupond – H( ) = 2 H( ) = 2

22 Traitement des collisions
Indice tab 1 Null 2 3 4 5 6 Pierre Durand null Paul Dupond Yvette Bon null Guillaume Dupont null

23 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

24 Traitement des collisions
2ème méthode : tableau de collisions - Augmenter la taille du tableau tab : M’ > 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

25 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

26 Traitement des collisions
Indice tab Pierre Durand 1 2 Paul Dupond – Yvette Bon – 3 4 5 6 Guillaume Dupond – H( ) = 2 H( ) = 2

27 Traitement des collisions
Indice tab col Pierre Durand – -1 1 2 Paul Dupond – 7 3 4 5 6 Guillaume Dupont – Yvette Bon – N = 4 M = 7 M’ = 8

28 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

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

30 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 tableau H(K) = K mod M Le choix de M est alors primordial pour éviter un trop grand nombre de collisions (M : nombre premier, …)

31 Exemples de fonctions de hachage
Annuaire inversé : On a abonnés à ranger dans une table de taille (nombre premier) H(K) = K mod H( ) =  tab[122313] = « Guillaume Dupond …» H( ) =  tab[221079] = « Yvette Bon …»


Télécharger ppt "Table de hachage Introduction Notion de clé Fonction de hachage"

Présentations similaires


Annonces Google