Table de hachage Introduction Notion de clé Fonction de hachage

Slides:



Advertisements
Présentations similaires
Structures de données avancées : MTH ( Multidimensional trie hashing )
Advertisements

Tris.
Chap. 4 Recherche en Table
Initiation à la programmation et algorithmique cours 4
Les tableaux. Tableau? Erreur de langage ! Un tableau est généralement une liste… Cest donc une liste de mêmes éléments : Liste de notes Liste de noms.
Introduction à l’Algorithmique
Approfondissement du langage
C.
Algorithme et structure de données
Les structures de données
Structures et unions types énumérés Qu'est-ce qu'une structure
8. Les tableaux P. Costamagna – ISEN N1.
Algorithmique et Structures de données
Initiation à la programmation et algorithmique cours 3
Utilisation des tableaux
Améliorer les performances du chiffrage à flot SYND
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Les éléments de base de l’algorithmique
Les structures de données arborescentes
Analyse lexicale Généralités Expressions rationnelles Automates finis
ASI 3 Méthodes numériques pour l’ingénieur
Methode de Tri efficace
Bases de données lexicales
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Standard Template Library (STL)
Février 2006 Florent LANGROGNET1 Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
MODELE RELATIONNEL concept mathématique de relation
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Structures de données IFT-2000
Une nouvelle structure de données : les tableaux
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Gestion de Fichiers Hachage.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Efficacité des algorithmes
Dénombrements.
Table de hachage Introduction Notion de clé Fonction de hachage

Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000
Types de données fondamentaux
ALGORITHME DE TRI Le tri par insertion.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Chap 4.5 : SQL (LDD) LDD : Langage de définition de données Réfs : Manuel p105.
David Rivreau Table de hachage David Rivreau
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
Strings et Tableaux en Java
Structures de données avancées : Concepts du Multidimensionnel D. E ZEGOUR Institut National d ’Informatique.
Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
1 1 Huitième journée Quelques algorithmes. 2 Définition Description des tâches pour que celles-ci soient aisément programmables Différent d’une méthode.
Organisation des données Introduction à la programmation Traitements simples Affectation Parcours Définition du tableau Les Tableaux Mise en situation.
Cours LCS N°4 Présenté par Mr: LALLALI
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : Principales structures de fichiers
Structures de données avancées : MLH (Multidimensional linear hashing) D. E ZEGOUR Institut National d ’Informatique.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Algorithmique Tableaux de données
Seconde 8 Module 7 M. FELT 03/11/ Module 7: Algorithmique #2  Objectifs:  AlgoBox.  Définition d’un algorithme.  Affectation de variable. 
Algorithmique Boucles et Itérations
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table de hachage Février 2005 Florent LANGROGNET

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table de hachage Février 2005 Florent LANGROGNET

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 Février 2005 Florent LANGROGNET

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table de hachage Février 2005 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éphonique Clé : numéro de téléphone Février 2005 Florent LANGROGNET

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table de hachage Février 2005 Florent LANGROGNET

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)) Février 2005 Florent LANGROGNET

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 Février 2005 Florent LANGROGNET

Fonction de hachage Exemple : Annuaire inversé Classe Abonne : Attributs : char * nom char * prenom int numeroTel Février 2005 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 Février 2005 Florent LANGROGNET

Fonction de hachage H(0381111144) = 0 H(0381333333) = 2 Indice tab 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 H(0381111144) = 0 H(0381333333) = 2 H(0381222222) = 3 H(0381123456) = 6 Février 2005 Florent LANGROGNET

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 Février 2005 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 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 Février 2005 Florent LANGROGNET

Fonction de hachage Une fonction de hachage doit être injective Car sinon on a H(K1) = K(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 Février 2005 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 Février 2005 Florent LANGROGNET

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table de hachage Février 2005 Florent LANGROGNET

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 Février 2005 Florent LANGROGNET

Collisions H(0381333333) = 2 H(0381222222) = 2 Indice tab 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 Février 2005 Florent LANGROGNET

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 Février 2005 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 de tab[i] Février 2005 Florent LANGROGNET

Traitement des collisions Indice tab 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 Février 2005 Florent LANGROGNET

Traitement des collisions Indice tab 1 Null 2 3 4 5 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 Février 2005 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 Février 2005 Florent LANGROGNET

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 Février 2005 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 Février 2005 Florent LANGROGNET

Traitement des collisions Indice tab 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 Février 2005 Florent LANGROGNET

Traitement des collisions Indice tab col 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 Yvette Bon – 03.81.22.22.22 N = 4 M = 7 M’ = 8 Février 2005 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 Février 2005 Florent LANGROGNET

Table de hachage Introduction Notion de clé Fonction de hachage Collisions Exemple de fonction de hachage Exemple de table de hachage Février 2005 Florent LANGROGNET

Exemple de fonction 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, …) Février 2005 Florent LANGROGNET

Exemple 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  tab[122313] = « Guillaume Dupond …» H(03 81 22 22 22) = 221 079  tab[221079] = « Yvette Bon …» Février 2005 Florent LANGROGNET

Exemple 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 Février 2005 Florent LANGROGNET

Exemple de table de hachage Ex 2 : compilateur : Element : variable Clé : nom de variable On souhaite détecter les erreurs suivantes : déclaration d’une variable déjà déclarée utilisation d’une variable non déclarée Février 2005 Florent LANGROGNET

Exemple de table de hachage int i, j, nb; i=j; nb=x; // x : non déclaré int j; // j : déjà déclarée Février 2005 Florent LANGROGNET

Exemple de table de hachage 1ère étape : à chaque déclaration, on range la variable déclarée dans le tableau Indice tab « i » 1 2 « j » 3 4 « nb » 5 6 H(« i »)=0 H(« j »)=2 H(« nb »)=4 Février 2005 Florent LANGROGNET

Exemple de table de hachage  Détection des erreurs « variable déjà déclarée » int i, j, nb; i=j; nb=x; // x : non déclaré int j; // j : déjà déclarée Tab[H(« j »)] est déjà occupée : j est déjà déclaré ! Février 2005 Florent LANGROGNET

Exemple de table de hachage 2ème étape : à chaque instruction, on vérifie que la variable est dans le tableau int i, j, nb; i=j; nb=x; // x : non déclaré int j; // j : déjà déclarée On vérifie que tab[K(« i »)] et tab[K(« j »)] sont occupés Février 2005 Florent LANGROGNET

Exemple de table de hachage  Détection des erreurs « variable non déclarée » int i, j, nb; i=j; nb=x; // x : non déclaré int j; // j : déjà déclarée Tab[H(«x »)] est vide : x est non déclaré ! Février 2005 Florent LANGROGNET

Exemple 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 d’autres structures (listes, arbres, …), l’algorithme de recherche d’un élément a une complexité au mieux en log(N) Ici, c’est immédiat (sous réserve que l’on trouve une « bonne » fontion de hachage) Février 2005 Florent LANGROGNET

Exemple 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 d’une chaîne de caractères) Question : comment passer d’une clé « chaîne de caractère » à une clé numérique ? Février 2005 Florent LANGROGNET

Exemple de table de hachage Soit L la longueur de la chaîne « nom » Soit ascii(nom[i]) le code ascii du (i+1) ème caractère de nom On peut choisir : H(nom) = Avec t bien choisi Février 2005 Florent LANGROGNET

Exemple de table de hachage ascii(i) = 105 ascii(j) = 106 ascii(n) = 110 ascii(b) = 98 En prenant t=10: H(«i») = 105 * 100 = 105 H(«j») = 106 * 100 = 106 H(«nb») = 110*100 + 98*101 = 110+980 = 1090 Février 2005 Florent LANGROGNET

Table de hachage FIN Février 2005 Florent LANGROGNET