Slides:



Advertisements
Présentations similaires
Structures de données avancées : MLH (Multidimensional linear hashing)
Advertisements

Structures de données avancées : Principales structures de données
Tris.
Chap. 4 Recherche en Table
Cours n° 6 Standard Template Library I.
Le double d’un multiple de opérations en 5 minutes Per1_6
Algorithmes et structures de données 9ème cours Patrick Reuter maître de conférences
Calculs de complexité d'algorithmes
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Orchestration de Web Services Module 5 Exercice Pratique à l'usage de l'environnement.
Cours n° 8 Conception et Programmation à Objets
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Approfondissement du langage

Introduction à la logique
Algorithme et structure de données
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Chap. 1 Structures séquentielles : listes linéaires
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Les algorithmes: complexité et notation asymptotique
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
Methode de Tri efficace
Sections sélectionnées du Chapitre 11
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
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.
Structures de données IFT-10541
Structures de données IFT-2000
Révision des notions OO et Java Semaine 1 Jian-Yun Nie.
Présentation Structures de Données et TDA
Les listes chaînées par Frédérick Henri.
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é.
STRUCTURES DE DONNÉES Maxime CROCHEMORE


Cours #7 Vérification d’un modèle VHDL
Chapitre 9 Les sous-programmes.
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
IFT Structures de données Abder Alikacem Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Aire d’une figure par encadrement
Structures de données IFT-10541
326 UMLV Méthodes de classement destinées à de grandes masses de données Applicables à des fichiers séquentiels Complexité : évaluée surtout en nombre.

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 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.

L’essentiel du langage C
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Packages et Types De la Spécification Formelle A l'implémentation Ada.
David Rivreau Table de hachage David Rivreau
Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Algorithmes de tri et de recherche
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
Cours LCS N°4 Présenté par Mr: LALLALI
B.Shishedjiev - Modèle relationnel
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Tables de hachage Tables de hachage: Idée et exemples
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.
Transcription de la présentation:

4. Implémentation des fonctions UMLV ã Méthodes de hachage 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions

Recherche dichotomique UMLV ã Recherche dichotomique table 3 4 8 9 10 20 40 50 70 75 80 83 85 90 1 2 3 4 5 6 7 8 9 10 11 12 13 14 d i f 4 ? d i f d i f di f df fonction ELEMENT (x, table, d, f ) ; début si (d = f) alors si (x = table [d ]) alors retour (vrai) sinon retour (faux) sinon { i  (d+f ) / 2 ; si (x > table [i]) alors retour (ELEMENT (x, table, i+1, f )) sinon retour (ELEMENT (x, table, d, i)) } fin Temps (ELEMENT sur table [1 … n]) = O (log n)

Recherche par interpolation UMLV ã Recherche par interpolation table 3 4 8 9 10 20 40 50 70 75 80 83 85 90 1 2 3 4 5 6 7 8 9 10 11 12 13 14 di f di f 4 ? df fonction ELEMENT (x, table, d, f ) ; début si ( d = f ) alors si (x = table [d ] alors retour (vrai) sinon retour (faux) sinon { i  d + si (x > table [i] alors retour (ELEMENT (x, table, i+1, f )) sinon retour (ELEMENT (x, table, d, i)) } fin

UMLV ã Idée : Établir une relation entre un élément et l’adresse à laquelle il est rangé en mémoire Théorème : Si les éléments de table [1 … n] et x sont choisis uniformément dans un intervalle [a,b], le temps moyen d’exécution de la recherche par interpolation est O (log log n)

table dont les indices sont dans [0 .. B-1] UMLV ã Hachage Type abstrait « dictionnaire » Ensembles avec les opérations principales ELEMENT (x, A) AJOUTER (x, A) temps constant en moyenne ENLEVER (x, A) Implémentation non adapté au classement. Table de hachage table dont les indices sont dans [0 .. B-1] Fonction de hachage h : éléments  [0 .. B-1] non injective en général Résolution des collisions Hachage ouvert : avec listes, triées ou non. Hachage fermé : linéaire, quadratique, aléatoire, uniforme, double, ...

fonction h (x : mot) : indice ; début somme : = 0 ; UMLV ã Hachage ouvert Liens explicites Taille variable fonction h (x : mot) : indice ; début somme : = 0 ; pour i  1 à longueurmaxi faire somme  somme + ord (x [i]) ; retour (somme mod B) ; fin

Voir Aho, Sethi, Ullman, Compilers, Addison-Wesley, 1986 UMLV ã int hash (char * s) { char * p ; unsigned h = 0, g ; for (p = s ; * p ; p++) { h = (h<< 4) + (* p) ; if (g = h & 0xf0000000) { h = h ^ (g >> 24) ; h = h ^ g ; } return (h % PRIME) ; Voir Aho, Sethi, Ullman, Compilers, Addison-Wesley, 1986

UMLV ã const B = {constante ad hoc} ; type liste =  cellule ; cellule = record elt : élément ; suivant : liste end ; dictionnaire = array [0 .. B-1] of liste ; fonction VIDER () : dictionnaire ; début pour i  0 à B-1 faire A [ i ]  NULL ; retour A ; fin fonction ELEMENT (x élément, A dictionnaire) : booléen ; début p  A [ h(x) ] ; tantque p  NULL faire si p->elt = x alors retour vrai sinon p  p->suivant ; retour faux ;

h(x) x UMLV ã fonction AJOUTER ( x élément, A dictionnaire) ; début AJOUTERLISTE ( x, h(x) ) ; retour A ; fin x h(x) fonction AJOUTER (x élément, A dictionnaire) ; début si non ELEMENT (x, A) alors { i  h (x) ; p  A [ i ] ; allouer A [ i ] ; A [ i ]->elt  x ; A [ i ]->suivant  p ; } retour A ; fin

Temps des opérations UMLV ã Hachage ouvert - initialisation (VIDER) : O (B) - ajout : temps constant (après test d ’appartenance) - appartenance - suppression si les événements "h (x) = i" sont équiprobables Création d'une table de n éléments :

liens implicites : gain de place taille limitée UMLV ã Hachage fermé table 1 liens implicites : gain de place taille limitée ré-allocation en cas de débordement B-1 Re-hachage h0 (x) = h (x), h1 (x), … hi (x), … où hi (x) dépend généralement de x et de i Suppression d ’un élément distinction entre « vide » et « disponible » facteur de charge : n / B où n = nombre d ’éléments

Hachage linéaire EXEMPLE 1 2 3 vide 4 vide 5 FOR B-1= 6 TO UMLV ã Re-hachage : hi (x) = (h(x) + i) mod B EXEMPLE h (x) = (ord (c) - ord (‘a’)) mod B où c première lettre de x. AJOUTER (‘BEGIN’) AJOUTER (‘FOR’) AJOUTER (‘FUNCTION’) AJOUTER (‘FORWARD’) AJOUTER (‘THEN’) ENLEVER (‘FUNCTION’) ENLEVER (‘BEGIN’) AJOUTER (‘TO’) FORWARD 1 disponible 2 THEN 3 vide 4 vide 5 FOR B-1= 6 TO

UMLV ã const B = {constante ad hoc} ; vide = {constantes particulières } ; disponible = {distinctes des éléments } ; {mais de même type } ; type dictionnaire = array [0… B-1] of éléments ; fonction VIDER () : dictionnaire ; début pour i  0 à B-1 faire A [ i]  vide ; retour A ; fin fonction POSITION (x élément, A dictionnaire) : indice ; /* calcule la seule position possible où ajouter x dans A */ début i  0 ; tantque (i < B) et A [hi (x)]  x et A [hi (x)]  vide et A [hi (x)]  disponible faire i  i + 1 ; retour (hi (x)) ;

UMLV ã fonction POSITIONE (x élément, A dictionnaire) : indice ; début hi  h (x) ; dernier  (hi + B-1) mod B ; tantque hi  dernier et (A [hi]  {x, vide}) faire hi  (hi + 1) mod B ; retour (hi) fin fonction ELEMENT (x élément, A dictionnaire) : boolean ; début si A [POSITIONE (x, A)] = x retour vrai ; sinon retour faux ; fonction ENLEVER (x élément, A dictionnaire) : dictionnaire ; i  POSITIONE (x, A) ; si A [ i ] = x alors A [ i ]  disponible ; retour A ;

UMLV ã fonction POSITIONA (x élément, A dictionnaire) : indice ; début hi  h (x) ; dernier := (hi + B-1) mod B ; tantque hi  dernier et (A [hi]  {x, vide, disponible}) faire hi  (hi + 1) mod B ; retour hi ; fin fonction AJOUTER (x élément, A dictionnaire) : dictionnaire ; début i  POSITIONA (x, A) ; si A [ i ]  {vide, disponible} alors A [ i ]  x ; retour A ; sinon si A [ i ]  x alors erreur ( " table pleine " ) ;

Hachage quadratique UMLV ã Re-hachage : hi (x) = (h (x) + i ²) mod B fonction POSITION (x élément, A dictionnaire) : indice ; début hi  h (x) ; inc  1 ; tantque (inc < B) et (A [hi]  {x, vide, ? }) faire hi  (hi + inc) mod B ; inc  inc + 2 ; retour hi ; fin seule la moitié de la table est examinée par re-hachage  utiliser la suite : h (x), h (x) + 1, h (x) - 1, h (x) + 4, h (x) - 4, … avec B premier.

Hachage double UMLV ã Re-hachage : hi (x) = (h(x) + i g (x)) mod B - B premier et 1  g (x)  B - 1 - ou B premier avec chacun des g (x) pour examen de toute la table par re-hachage. fonction POSITION (x élément, A dictionnaire) : indice ; début hi  h (x) ; inc  g (x) ; dernier  (hi + (B-1)* inc) mod B ; tantque (hi  dernier) et (A [hi]  {x, vide, ? }) faire hi  (hi + inc) mod B ; retour hi ; fin

{ Hachage aléatoire (2 . di - B)  k sinon - di + 1 = UMLV ã Re-hachage : hi (x) = (h (x) + di) mod B, d1, d2, …, dB-1 permutation aléatoire de (1,..., B-1) Génération des di par « décalage ». - choix de k  (1,…, B-1) 2 . di si 2 . di  B-1 (2 . di - B)  k sinon Exemple B = 8 k = 3 = 112 d1 = 510 = 1012 d2 = 110 = 0012 d3 = 210 = 0102 d4 = 410 = 1002 d5 = 310 = 0112 d6 = 610 = 1102 d7 = 710 = 1112 { - di + 1 =

Temps des opérations UMLV ã n/B 50 % 80 % 90 % Cn 1,39 2,01 2,56 Hachage fermé (aléatoire) table contenant n éléments - initialisation (VIDER) : O (B) - probabilité d'avoir i comparaisons : - coût d'un ajout réussi - création d'une table à n éléments (n £ B) Cn = coût moyen d'un ajout n/B 50 % 80 % 90 % Cn 1,39 2,01 2,56

Tableau associatif UMLV ã F tableau associatif : nombre fini d'indices de type quelconque  F fonction de domaine fini  F représentable par l'ensemble E = { (x, F [x]) / x  domaine de F } Opérations - INIT (F) rendre F [x] non défini pour tout x - DEFINIR (F, x, y) poser F [x] = y - CALCULER (F, x) = y si F [x] = y nul sinon Implémentation - représenter E par hachage sur le domaine de F

UMLV ã TRADUCTEUR Traducteur mot-à-mot dico if si then alors else sinon sortie texte --- entrée Trad si --- alors text --- if then ---