Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parNâdiya Faucher Modifié depuis plus de 10 années
1
IFT-10541 Structures de données Abder Alikacem Département dinformatique et de génie logiciel
2
Synthèse sur les tables de dispersion
3
Hachage et adressage calculé La méthode du h-code constitue une alternative aux structures d'arbre lorsque : 1. il n'est pas nécessaire de gérer dynamiquement les données; 2. il n'est pas important de traiter les cas les plus défavorables avec un maximum de performances; 3. il n'est pas demandé d'effectuer d'autres opérations que la recherche, sur les données une fois structurées.
4
Les tables de dispersion Tables de dispersion Replier lespace des données Accès par calcul: h, fonctions de dispersion h nest pas injective: collisions! Fonctions de dispersion : h facile (rapide) à calculer Dispersion uniforme vers lespace dadressage réel Accepter les premières collisions lorsque le facteur de charge=70% espace dadressage virtuel espace dadressage réel
5
Les tables de dispersion Tables de dispersion Replier lespace des données Accès par calcul: h, fonctions de dispersion h nest pas injective: collisions! Fonctions de dispersion : h facile (rapide) à calculer Dispersion uniforme vers lespace dadressage réel Accepter les premières collisions lorsque le facteur de charge=70% Résolution de conflits Chaînage externe (avec ou sans « buckets »). Désavantages : Espace mémoire requis Temps daccès espace dadressage virtuel espace dadressage réel
6
le champ info contiendra : la clé qui identifie lélément référencé car il faut savoir de quel élément il sagit (lettre, nom) car la table est en mémoire principale un pointeur vers lélément stocké 01234560123456 P 2 K 2 S 1 info card ptr B 2 I 1 E 1 0 0 0 0 Chaîne externe
7
Techniques des bacs « buckets » Idée : faire partager 1 ptr par plusieurs éléments utilisation dun tampon (bac) taille du tampon = taille dun secteur disque temps daccès aux collisions 0101 0 0 info card 0 0 0 0... 0 info card 0 0 } bac } }
8
Adressage ouvert Si les collisions sont concentrées aux mêmes endroits : on perd de lespace dans la table temps d accès à linformation Pourquoi aller à lextérieur de la table sil reste de la place dans la table? Solution #1: chaînage dans la table
9
012345678910 Objet Lien Dispo 29, "rouge" -1 29, "rouge" -1 18, "blanc" 10 18, "blanc" 10 28, "noir" 9 28, "noir" 9 13, "gris" -1 13, "gris" -1 27, "bleu" 8 27, "bleu" 8 16, "mauve" -1 16, "mauve" -1 39, "vert" 4 39, "vert" 4 42, "cyan" 3 42, "cyan" 3 17, "mauve" -1 17, "mauve" -1 Chaînage dans la table
10
Adressage ouvert Si les collisions sont concentrées aux mêmes endroits : on perd de lespace dans la table temps d accès à linformation Pourquoi aller à lextérieur de la table sil reste de la place dans la table? Solution #1: chaînage dans la table Solution#2: résolution des collisions par calcul, redispersion
11
Redispersion En cas de collision, il faut trouver une case vide en se basant sur une formule dindexation. Exemple, si h est la fonction de hachage et el une clé donnée : i h(el) si table[i] est vide alors FAUX /* absent */ sinonsi table[i] = el alors VRAI /* présent */ sinon /* redispersion */ i i - p(el) si i < 0 alors i i + m La fonction p est appelée fonction de redispersion
12
Fonctions de redispersion i i - p(el) si i < 0 alors i i + m p(el) = 1 pour tout élément el fonction de dispersion nest plus uniforme! Le choix de la fonction p comme constante nest pas intéressant! Regroupement primaire: toutes les listes de collisions se chevauchent. Définition: une liste de collision est le parcours rattaché à une entrée pour placer/chercher une clé. 0 1 2 3 4 5 6 M 1 info card S 1 0 0 7 8 9 10 Q 1 0 0 0 Y 1 G 1 R 1 Z 1 S 1 P 1
13
Méthode du résidu quadratique Méthode du résidu quadratique : h(el) = i (h est la fonction de hachage, el la clé) Fonction de redispersion: p(el) = (-1) j j/2 2 (où j est litération) i i + p(el) si i < 0 alors tantque i < 0 alors i i + m sinon tantque i > m-1 alors i i - m Idée : sauter par-dessus des blocs de cases occupées Regroupement secondaire: les listes de collisions Pour une même entrée se chevauchent. : troncature 0 1 2 3 4 5 6 M 1 info card S 1 0 0 7 8 9 10 Q 1 0 0 0 Y 1 G 1 R 1 Z 1 S 1 P 1 4e4e 5e5e
14
Redispersion pseudo-aléatoire (0,10,2,3,1,6,7,5,4,9,8) 0 1 2 3 4 5 6 M 1 info card S 1 0 0 7 8 9 10 Q 1 0 0 0 Y 1 G 1 R 1 Z 1 S 1 P 1 j=4 i =5 p(el) = r 3 =3 i (i + p(el))%m=8 Lindice 8 de la table est vide: fin des itérations. Regroupement secondaire: les listes de collisions pour une même entrée se chevauchent.
15
Adressage ouvert Si les collisions sont concentrées aux mêmes endroits : on perd de lespace dans la table temps d accès à linformation Pourquoi aller à lextérieur de la table sil reste de la place dans la table? Solution #1: chaînage dans la table Solution#2: résolution des collisions par calcul, redispersion Fonctions de redispersion constantes Problème du regroupement primaire: partage des listes de collisions Fonctions de redispersion quadratiques, aléatoires.. Le regroupement secondaire: h(el 1 ) = h(el 2 ) 1 même chaîne! départager les chaînes de collisions de el 1 et el 2 (r 0 = 0, r 1, r 2, r 3, r 4, r 5,..., r m-1 ) une permutation aléatoire des adresses de la table propre à lélément recherché (ou à insérer). p(el i ) = r j-1,el i (où j est litération et el i = « seed ») « double hashing » h 1 (el 1 ) = i (= h 1 (el 2 )) h 2 (el 1 ) = k ( h 2 (el 2 )) p(el 1 ) = (j-1)*k (où j est litération)
16
Double hachage Méthode du « double hashing »: on utilise deux fonctions de hachage, h1 et h2. Soit 2 clés el 1 et el 2 : h 1 (el 1 ) = i (= h 1 (el 2 ) si collision) h 2 (el 1 ) = k ( h 2 (el 2 )) p(el 1 ) = (j-1)*k (où j est litération pour trouver une place vacante dans la table de dispersion) i (i + p(el))%m
17
Questions Pourquoi si h 1 (el 1 ) = h 1 (el 2 ) et h 2 (el 1 ) h 2 (el 2 ) ne pas changer de fonction de dispersion et utiliser directement h 2 comme valeur d indice pour la table ? Est-ce que les chaînes de collisions sont entièrement disjointes (peu importe la méthode) ? Comment choisir m (la taille de la table de dispersion) étant donné n (le nombre de données)? À partir de quel facteur de charge dune table de dispersion, quon commencera à tolérer les collisions ?
18
Synthèse sur les tables de dispersion Critère de choix de la fonction de dispersion analyser l'environnement dans lequel s'appliquera la fonction; trouver une fonction qui se calcule facilement et rapidement; s'assurer que la fonction distribue les clés le plus uniformément possible sur l'espace des possibilités dans le fichier de données (qui élimine tout risque de collision); idéalement, choisir une fonction qui élimine tout risque de collision. Pour réduire le nombre de collisions, il faut: 1) trouver une meilleure fonction de dispersement pour la situation; 2) diminuer le facteur de compression de la table.
19
collisions vs espace mémoire espace mémoire collisions Le nombre de collisions augmente généralement très vite lorsque fc (le facteur de compression) devient supérieur à 90%. Synthèse sur les tables de dispersion
20
Comment choisir la fonction de dispersion? par analyse du domaine dapplication introduction dun facteur aléatoire connu taille de la table sera un nombre premier Comment lévaluer ? Empiriquement !!! tests sur des échantillons représentatifs on ajuste les paramètres : h(), m, p() Synthèse sur les tables de dispersion
21
Métrique Nous allons introduirons une méthode générale pour mesurer la qualité dune méthode de dispersion. La procédure dépend de plusieurs facteurs. L'un des facteurs importants est le rapport du nombre n de clés dans K (qui n'est autre que le nombre d'enregistrements dans T) au nombre m d'adresses calculées en L. Ce rapport = n/m constitue le facteur de charge. Synthèse sur les tables de dispersion
22
L'efficacité d'une fonction de hachage dans le cas du traitement d'une collision est mesurée par le nombre de sondages (comparaisons de clés) nécessaires pour trouver l'adresse d'un enregistrement avec une clé donnée k. L'efficacité dépend principalement du facteur de charge, et nous nous intéresserons à deux grandeurs en particulier : S( ) = nombre de sondages en cas de succès; U( ) = nombre de sondages en cas d'échec. Métrique Synthèse sur les tables de dispersion
23
Exemple Soit T, un tableau à 11 adresses T[1], T[2],..., T[11] et 8 enregistrements A, B, C, D, E, X, Y et Z, avec les adresses calculées suivantes : Enregistrements: ABCDEXYZ H(k) : 4821141151 Supposons que les 8 enregistrements aient été insérés dans le tableau T dans l'ordre indiqué précédemment. Le tableau T présentera alors l'aspect suivant : Tableau T :X CZ AE Y_ B_ _D Adresse :1 23 45 67 89 1011 Synthèse sur les tables de dispersion
24
Enregistrements: ABCDEXYZ H(k) : 4821141151 Tableau T :X CZ AE Y_ B_ _D Adresse :1 23 45 67 89 1011 Le nombre moyen de sondages S pour une recherche couronnée de succès est : S = 1 + 1 + 1 + 1 + 2 + 2 + 2 + 3 = 13 = 1.6 8 8 Le nombre moyen de sondages U pour une recherche infructueuse est : U = 7 + 6 + 5 + 4 + 3 + 2 + 1 + 2 + 1 + 1 + 8 = 40 =3.6 11 Synthèse sur les tables de dispersion
25
Résumé des complexités RechercheInsertionRetrait Méthode Séquentielle O(N/2)O(1)O(N/2) DichotomieO(logN)O(N/2) Arbre binaire de recherche O(logN) "Haching" (dispersion) O(1) Complexité en moyenne
26
Résumé des complexités (suite) Complexité au pire RechercheInsertionRetrait Méthode Séquentielle O(N)O(1)O(N) DichotomieO(logN)O(N) Arbres binaires O(N) "Hashing" (dispersion) O(N)
27
Soit un tableau T de 12 éléments (d'indice de 1 à 12), et soit des enregistrements de clé A, B, C, D, E, F, G et H avec les adresses calculées, par une fonction de hachage donné, suivantes : enregistrement :A B C D E F G H H(k):5 9 9 5 6 9 12 12 a) En supposant que le tableau est remplie par ces enregistrements dans un ordre de gauche à droite, et que la technique de résolution des collisions est celle de ladressage ouvert, donner son aspect (graphique) une fois que tous les enregistrements soient insérés. b) Estimer le nombre moyen S de sondage pour une recherche couronnée de succès. c) Estimer le nombre de sondages moyen U pour une recherche infructueuse. Exercices
28
Exemple dans les notes de cours pages 220-221: #define MAX 11 typedef struct { TypeElinfo; intlink; }Element; typedef Element* TableauT; /* le TABLEAU T */ typedef int Table[MAX];/* la TABLE*/ Donnez limplantation en C de la fonction qui permet la recherche dun nouvel élément dans les deux structures ci-haut et dont le prototype obligatoire est : Bool rechercheElement(Table LaTable, TableauT LeTableau, TypeEl info, int AVAIL); Vous pouvez supposer comme connue (déjà écrite) une fonction de hachage H dont le prototype est : int H (TypeEl K);
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.