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

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
Advertisements

Tris.
Chap. 4 Recherche en Table
Rappels C.
Cours n° 6 Standard Template Library I.
Au programme du jour …. Un peu plus de structures de données
Calculs de complexité d'algorithmes
GEF 243B Programmation informatique appliquée
Cours n° 8 Conception et Programmation à Objets
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
Approfondissement du langage
Algorithme et structure de données
Chap. 1 Structures séquentielles : listes linéaires
ALGORITHMES RECURSIFS
Récursivité.
La haute tour sombre 3 Des actions
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
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
TRAITEMENT DE STRUCTURES
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les tris.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
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
Présentation Structures de Données et TDA
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


Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
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
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.
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
Structures des données
Le langage C Structures de données
1 Exemples Construction et implantation de types de données abstraits.
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Ch. PAUL - Piles et Files à l'aide de listes chainées
Algorithmique Les structures Rappel L'enchaînement séquentiel
LES PILES ET FILES.
Les adresses des fonctions
David Rivreau Table de hachage David Rivreau
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.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
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.
PRO-1027 Programmation Scientifique en C
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.
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Transcription de la présentation:

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

2 UMLV Recherche dichotomique d i f 4 ? d i f df table 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)

UMLV Recherche par interpolation table 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

4 Idée : Établir une relation entre un élément et ladresse à 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 dexécution de la recherche par interpolation est O (log log n) UMLV

5 Type abstrait « dictionnaire » Ensembles avec les opérations principales contains (x, A) add (x, A) temps constant en moyenne remove ( 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,... UMLV Hachage

6 UMLV Hachage ouvert Liens explicites Taille variable int h (char x [ ], int B) { int i ; sum = 0 ; for (i = 0 ; x [i] != \0; i ++) { sum = sum + x [i] ; } return (sum % B) ; }

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

8 UMLV #define B 127 typedef struct cell { ElementType e; struct cell * next; } Cell typedef Cell * List ; void clear (List d [ ], int size) { int i ; for (i = 0; i < size; i ++) { d [ i ] = null ; } int contains (ElementType x, List d [ ] ) { List p ; p d [ h(x) ] ; while (p != null) { if (compare(p->e,x) == 0) return 1 ; else p p->next ; } retour 0 ; }

9 UMLV void add ( ElementType x, List d [ ]) { addListHead ( x, d, h(x) ) ; } x h(x)h(x) void addListHead (ElementType x, List d [ ], int i) { List p ; if ( contains (x, d) == 0) { p = (List ) malloc (sizeof (Cell)) p->e = x ; p->next = d [ i ] ; d [ i ] = p; }

10 Hachage ouvert - initialisation (clear) : 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 : UMLV Temps des opérations

11 UMLV Hachage fermé table 0101 B-1 liens implicites : gain de place taille limitée ré-allocation en cas de débordement Re-hachage h 0 (x) = h (x), h 1 (x), … h i (x), … où h i (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

12 UMLV Hachage linéaire Re-hachage : h i (x) = (h(x) + i) % B FORWARD disponible THEN vide FOR TO B-1= 6 EXEMPLE B = 7 h (x) = (c – a) % B où c première lettre de x add (BEGIN) add (FOR) add (FUNCTION) add (FORWARD) add (THEN) remove (FUNCTION) remove (BEGIN) add (TO) A H O V B I P W C J Q X D K R Y E L S Z F M T G N U

13 UMLV ã #define B 7 #define VIDE 0 #define DISPONIBLE 1 void clear (ElementType d [ ]) { int i ; for (i = 0, i < B, i ++) { d [ i] VIDE ; } int position (ElementType x, ElementType d [ ]) { /* calcule la seule position possible où ajouter x dans A */ int i ; i = 0 ; while ( ((i < B) && (compare(d [h i (x)], x) != 0) ) && ((d [h i (x)] != VIDE) && (d [h i (x)] != DISPONIBLE)) ) { i = i + 1 ; } return (h i (x)) ; }

14 UMLV int positionForContains (ElementType x, ElementType d [ ]) { int hi, dernier ; hi h (x) ; dernier (hi + B-1) % B ; while (( hi != dernier && (d [hi] {x, VIDE})) { hi (hi + 1) % B ; } return (hi) } int contains (ElementType x, ElementType d [ ]) { if (compare(d [positionForContains (x, d)], x) == 0) return 1 ; else return 0 ; } void remove (ElementType x élément, ElementType d [ ]) { int i ; i = positionForContains (x, d) ; if (compare(d [ i ], x) == 0) d [ i ] = DISPONIBLE ; }

15 UMLV int positionForAdd (ElementType x, ElementType d [ ]) { int hi, dernier; hi = h (x) ; dernier := (hi + B-1) % B ; while ((hi != dernier) && (d [hi] {x, VIDE, DISPONIBLE})) { hi (hi + 1) % B ; } return hi ; } void add (ElementType x, ElementType d [ ]) { int i ; i = positionForAdd (x, d) ; if (d [ i ] {VIDE, DISPONIBLE} ) { d [ i ] = x ; } else if (compare(d [ i ], x ) != 0) { error ( " table pleine " ) ; }

16 UMLV Hachage quadratique Re-hachage : h i (x) = (h (x) + i ²) % B int position (ElementType x, ElementType d [ ]) { int hi, inc; hi = h (x) ; inc = 1 ; while ((inc < B) && (A [hi] {x, VIDE, ? }) { hi = (hi + inc) % B ; inc = inc + 2 ; } return hi ; } 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.

17 UMLV Hachage double Re-hachage : h i (x) = (h(x) + i g (x)) % B - B premier et 1 g (x) B ou B premier avec chacun des g (x) pour examen de toute la table par re-hachage. int position (ElementType x, ElementType d [ ]) { int hi, inc, dernier; hi = h (x) ; inc = g (x) ; dernier = (hi + (B-1)* inc) % B ; while ((hi != dernier) && (A [hi] {x, VIDE, ? })) { hi = (hi + inc) % B ; } return hi ; }

18 UMLV Hachage aléatoire Re-hachage :h i (x) = (h (x) + d i ) % B, d 1, d 2, …, d B-1 permutation aléatoire de (1,..., B-1) Génération des d i par « décalage ». - choix de k {1,…, B-1} 2. d i si 2. d i B-1 ( 2. d i - B) k sinon Exemple B = 8k = 5 = d 1 = 1 10 = d 2 = 2 10 = d 3 = 4 10 = d 4 = 5 10 = d 5 = 7 10 = d 6 = 3 10 = d 7 = 6 10 = d i + 1 = {

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

20 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) = ysi F [x] = y nulsinon Implémentation - représenter E par hachage sur le domaine de F UMLV Tableau associatif

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