Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parPaul Gay Modifié depuis plus de 10 années
1
Le problème de recherche Entrée: n clefs distinctes k 1, k 2, …, k n et un ensemble T de n enregistrements de la forme (k 1, I 1 ), (k 2, I 2 ), …, (k n, I n ) où I j est linformation associée à la clef k j pour 1 <= j <= n. Problème: Pour une clef K, trouver lenregistrement (k j, I j ) dans T tel que k j = K. Recherche: algorithme pour trouver un enregistrement à partir dune clef k j = K.
2
Succès vs. Échec Succès: Un enregistrement avec clef k j = K est trouvé. Échec: Aucun enregistrement avec clef k j = K nest trouvé (sans doute quun tel enregistrement nexiste pas).
3
Les différentes approches 1. Méthodes séquentielle (listes, tableaux). 2. Adressage dispersé (hashing) 3. Méthodes dindexation par arbres.
4
Recherche dans un tableau ordonné Recherche séquentielle Recherche dychotomique Méthode du dictionnaire
5
Listes ordonnées par fréquence daccès Listes ordonnées par la fréquence (espérée) daccès. Exécuter une recherche séquentielle Coût daccès à lenregistrement 1: 1 Coût daccès à lenregistrement 2: 2 Coût daccès moyen:
6
Exemple(1) (1) Tous les enregistrements ont la même fréquence daccès.
7
Exemple(2) (2) Fréquence exponentielle
8
Distribution de Zipf Applications: –Utilisation des mots dans les langues naturelles. –Taille des populations des villes. où
9
Règle 80/20 Phénomène courant dans des applications cormerciales: –80% des accès vont à 20% des enregistrements. –La même règle sapplique aux 20% des enregistrements les plus fréquents. –Etc.
10
Listes auto-organisées Listes auto-organisées: La position dun enregistrement dans la liste peut être modifiée après un accès. Une heuristique est utilisé pour déterminer comment réordonner la liste.
11
Heuristique Ordonner par la fréquence daccès observée. 1.Lorsquun enregistrement est trouvé, le déplacer au début de la liste. 2.Lorsquun enregistrement est trouvé, léchanger avec lenregistrement précédent.
12
Exemple: compression de texte Compression dun message à transmettre: Conserver une liste des mots rencontrés (heuristique: déplacer au début). Envoyer directement les mots nouveaux. Envoyer la position dans la liste des mots déjà rencontrés. The car on the left hit the car I left. The car on 3 left hit 3 5 I 5.
13
Recherche dans un ensemble Lorsque le domaine nest pas trop grand: On peut utiliser les opérateurs de bits. Exemple: Pour trouver les nombre premiers impairs: 0011010100010100 & 0101010101010101
14
Adressage dispersé (1) Adressage dispersé (hashing): On associe chaque clef à une position dans une table. Une fonction de hachage transforme la valeur dune clef en une position. Nous la dénoterons h. Une table de hachage est un tableau contenant les enregistrements. Nous la dénoterons par HT. HT possède M cases indexées de 0 à M-1.
15
Adressage dispersé (2) Pour toute valeur de clef K, h(K) = i, 0 <= i < M, tel que HT[i].clef = K. Répond à la question: Quel enregistrement, sil existe, possède la valeur de clef K? Bon pour mémoire et disque.
16
Exemples simples (1) Stocker n enregistrements (clefs entre 0 et n-1) –Mettre lenregistrement avec clef i dans la case i. –Fonction de hachage h(K) = K. (2) Autre exemple: –Stocker 1000 enregistrements (clefs entre 0 et 16383). –On ne peut conserver en mémoire une table de 16384 cases. –On doit trouver une fonction de hachage nous permettant dutiliser une plus petite table.
17
Collisions (1) Entrée: fonction de hachage h et clefs k 1 et k 2. est lindice dune case dans la table de hachage. Si h(k 1 ) = = h(k 2 ), alors on dit quil y a collision. Recherche de lenregistrement avec clef K: 1.Calculer lindice de la table h(K). 2.Partant de h(K), trouver lenregistrement contenant la clef K en utilisant (si nécessaire) une politique de résolution des collisions.
18
Collisions (2) Dans la plupart des applications, les collisions sont inévitables. –Exemple: Il y a plus de 56% de probabilité quau moins deux personnes parmi un groupe de 25 aient la même date danniversaire..
19
Fonctions de hachage (1) Une fonction de hachage doit retourner une valeur entre 0 et M-1, où M est la taille de la table de hachage. Une fonction de hachage doit idéalement distribuer les enregistrements uniformément dans la table. En pratique, lefficacité dépend de la distribution des enregistrements..
20
Exemples (1) int h(int x) { return(x % 16); } Cette fonction dépend entièrement des derniers 4 bits de la clef. Méthode des carrés moyens: Mettre la clef au carré et prendre les r bits du millieu. Pour une table de hachage de 2 r cases.
21
Exemples (2) Pour les mots: Additionner (modulo M) la valeur ASCII des lettres. int h(char* x) { int i, sum; for (sum=0, i=0; x[i] != '\0'; i++) sum += (int) x[i]; return(sum % M); } Bon si la somme est grande par rapport à M. A=65 et Z=90 pour des mots de 10 caractères, sum est entre 650 et 900.
22
Exemples (3) ELF Hash: Executable and Linking Format (ELF), UNIX System V Release 4. int ELFhash(char* key) { unsigned long h = 0; while(*key) { h = (h << 4) + *key++; unsigned long g = h & 0xF0000000L; if (g) h ^= g >> 24; h &= ~g; } return h % M; }
23
Adressage ouvert Comment résoudre les collisions? Adressage ouvert: utilisation de listes. Meilleur lorsque la table est conservé en mémoire
24
Adressage par section Divise la table en section. –Exemple: 8 cases/section. Inclut une section suplémentaire pour les surcharges. On ajoute les enregistrements à partir de la première case de sa section. Si elle est pleine, on ajoute lenregitrement dans la section suplémentaire.
25
Adressage fermé Tous les enregistrement sont stocker directement dans la table. Chaque enregistrement i a une case maîson h(k i ). Si un autre enregistrement occupe la case maîson de is alors une autre position doit être trouvée. La nouvelle case dépend de la politique de résolution des conflits. Les recherche doit utiliser la même politique de résolution des conflits.
26
Résolution des conflits Pendant une insertion, le but dune politique de résolution est de trouver une nouvelle case dans la table. Séquence de recherche: La série de cases visitées au cours dune opération insertion/recherche en suivant une politique de résolution des collision. Soit 0 = h(K). Soit ( 0, 1, …) la séquence de recherche.
27
Fonction séquentielle On suppose lexistence dune fonction p(k,i) qui retourne le i-ième élément de la séquence de recherche.
28
Insertion // Insère e dans la table HT bool hashInsert(const Elem& e){ int home; int pos = home = h(e.clef)); for (int i=1; HT[pos]!=VIDE; i++) { pos=(home + p(e.clef, i) if (e == HT[pos]) return false; } HT[pos] = e; return true; }
29
Recherche // Recherche lenregistrement avec clef K bool hashSearch(const Key& K, Elem& e){ int home; int pos = home = h(K); for (int i = 1; (K != HT[pos].clef) && (HT[pos]!= VIDE); i++) pos = (home + p(K, i)) % M; if (K== HT[pos].clef){ e = HT[pos]; return true; } else return false; }
30
Séquence linéaire La fonction séquentielle la plus simple est la suivante: p(K, i) = i % M Après la fin, on revient au début. Pour éviter de boucler à linfini, une des case de la séquence est toujour VIDE.
31
Exemple Amas primaire: Les enregistrement tendent à former des amas. Chaque case na pas la même probabilité de recevoir un nouvel élément
32
Idée damélioration On incrémente la position par une constante c>1 –On doit alors choisir M et c minutieusement. La séquence de recherche doit pouvoir visiter TOUTES les cases de la table. –Prendre c relativement premier à M. Les amas existent toujours –Ex: c=2, h(k 1 ) = 3; h(k 2 ) = 5. –Les séquences pour k 1 et k 2 sont liées.
33
Séquence pseudo-aléatoire(1) La fonction séquentielle idéale choisirait la prochaine case de façon aléatoire. Cela causerait cependant un problème sérieux (lequel?)
34
Séquence pseudo-aléatoire(2) Choisir une permutation aléatoire des nombres entre 1 et M-1: r 1, r 2, …, r M-1 Toutes les insertions et recherche utilise la même permutation. Exemple: Table de taille M = 101 –r 1 =2, r 2 =5, r 3 =32. –h(k 1 )=30, h(k 2 )=28. –Séquence pour k 1 : 30. 32, 35, 62 –Séquence pour k 2 : 28, 30, 32, 60
35
Séquence quadratique Prendre: p(K, i) = i 2 ; Exemple: M=101 –h(k 1 )=30, h(k 2 ) = 29. –Séquence pour k 1 is: 30, 31, 34, 39 –Séquence pour k 2 is: 29, 30, 33, 38
36
Amas secondaire Les séquence pseudo-aléatoires et quadratiques éliminent les amas primaires. Si h(x)=h(y), alors ils suivent la même séquence. Cela est appelé amas secondaires. Pour éviter les amas secondaires, on a besoin dune fonction séquentielle p(K,i) qui utilise ses deux paramètres. position.
37
Hachage double p(K,i)=i*h 2 (K) Exemple: Table de taille M=101 –h(k 1 )=30, h(k 2 )=28, h(k 3 )=30. –h 2 (k 1 )=2, h 2 (k 2 )=5, h 2 (k 3 )=5. –Séquence pour k 1 : 30, 32, 34, 36 –Séquence pour k 2 : 28, 33, 38, 43 –Séquence pour k 3 : 30, 35, 40, 45
38
Enlever un enregistrement Ne doit pas nuire aux recherches futures. On ne veut pas rendre une position inutilisable.
39
Marqueur (1) Utilisation dun marqueur. Narrête pas une recherche mais indique quune case est vide.
40
Marqueur (2) Ajoute à la longueur des séquences de recherches. Solutions: 1.Réorganisation locale 2.Refaire la table de façon périodique.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.