La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Indexes à Hachage Sections sélectionnées du Chapitre 11.

Présentations similaires


Présentation au sujet: "1 Indexes à Hachage Sections sélectionnées du Chapitre 11."— Transcription de la présentation:

1 1 Indexes à Hachage Sections sélectionnées du Chapitre 11

2 2 Introduction Indexes à Hachage : meilleurs pour les recherches dégalité; ne supportent pas les recherches des valeurs des plages. Hachage statique Hachage dynamique Hachage linéaire

3 3 Hachage Statique Pages primaires : forment une collection de compartiments en nombre fixe sont affectées séquentiellement en mémoire et ne sont jamais désaffectées; pages de débordement si nécessaire h ( k ) mod M = compartiment où mettre lentrée des données dont la clé est k (M = # de compartiments). h(key) mod N h key Pages (compartiments) primaires Pages de débordement 2 0 N-1

4 4 Hachage Statique (Suite) Les compartiments contiennent les entrées des données triées. La fonction de hachage utilise le champ de la clé de recherche de lenregistrement r. Les valeurs des clés doivent être distribuées sur une plage allant de 0 à M-1. Opérations: Recherche: calculer b= h(key) ; chercher key dans le compartiment b et dans déventuelles pages de débordement si nécessaire. Insertion: calculer b= h(key) ; insérer key dans le compartiment b. Si la page b manque de lespace, créer une page de débordement et y inserer key. Effacement: calculer b= h(key) ; chercher key dans le compartiment b et dans déventuelles pages de débordement si nécessaire. Effacer key et désaffecter une page de débordement si nécessaire. Défauts: le nombre de compartiments étant fixe Si le fichier grandit énormément, de longues chaînes de débordement se forment Si le fichier se rétrécit énormément, beaucoup despace se perd dans les compartiments Solution: hachage dynamique ( Hachage extensible et hachage linéaire )

5 5 Hachage Extensible Situation: un compartiment (page primaire) se remplit. Pourrait-on réorganiser le fichier en doublant le # de compartiments? Lire tout le fichier original et réécrire ce fichier en deux fois plus de pages est très coûteux! Solution: Utiliser un répertoire de pointeurs vers les compartiments; ainsi, pour doubler le nombre de compartiments il suffit de doubler la taille du répertoire ne partager que les compartiments débordants Avantages: Le répertoire est bien plus petit que le fichier lui-même, doù doubler le répertoire est moins coûteux. Plus besoin de pages de débordement !

6 6 Exemple Le répertoire est de taille 4. La capacité du compartiment est de 4 entrées de données. Recherche: pour trouver la page de r, prendre 2 bits à la fin de h (key(r)) pour obtenir un # entre 0 et 3; p.ex. Si h (key(r)) = 5 (= binaire 101 ), r est dans la page vers laquelle pointe PROFONDEUR LOCALE PROFONDEUR GLOBALE REPERTOIRE compartiment A compartiment B compartiment C compartiment D PAGES DE DONNEES 10* 1*21* 4*12*32* 16* 15*7*19* 5*

7 7 Exemple (Suite) Insertion (page non pleine): rechercher la page de r, insérer lentrée de données de r ; p.ex. Nous voulons insérer 13* Puisque h (key(r)) = 13 (= binaire 1101 ), lentrée de données de r est dans la page vers laquelle pointe 01. Insérer 13* dans le compartiment B. Insertion (page pleine): P.ex. insérer 20* dans la page A. Partager la page pleine (i.e., créer une nouvelle page et redistribuer les entrées de données). Doubler la taille du répertoire (nécessaire sous une condition à venir) 13* PROFONDEUR LOCALE PROFONDEUR GLOBALE REPERTOIRE compartiment A compartiment B compartiment C compartiment D PAGES DE DONNEES 10* 1*21* 4*12*32* 16* 15*7*19* 5*

8 8 Exemple: Insertion de h (r)=20 20 = binaire Les derniers 2 bits (00) indiquent que r appartient au compartiment A qui est déjà plein! On divise A en A et A2, mais on a besoin des 3 derniers bits pour déterminer à quel compartiment appartient chaque entrée de données (les 2 derniers ne suffisent plus!): Profondeur Globale du répertoire (PG) : # maximum de bits nécessaires pour décider du compartiment auquel une entrée appartient. Profondeur Locale dun compartiment (PL) : # de bits utilisés pour déterminer si une entrée appartient à ce compartiment. Nous plaçons les entrées dont le troisième bit est 1 dans A2 (4*, 12*, 20*) et ceux dont il est 0 dans A (32*, 16*). Avec PL=3, on bute au problème suivant: le répertoire ne peut stocker quun maximum de 4 pointeurs, alors que 5 sont nécessaires. Solution: doubler la taille du répertoire. Lorsque une insertion entraîne PL > PG., on double le répertoire par copie et réarrangement des pointeurs.

9 9 Exemple: Insertion de h (r)=20 (Suite) 20* PROFONDEUR LOCALE 2 2 REPERTOIRE PROFONDEUR GLOBALE comp. A comp. B comp. C comp. D compartiment A2 (`image' du compartiment A) 1* 5*21*13* 32* 16* 10* 15*7*19* 4*12* 19* REPERTOIRE comp. A comp. B comp. C comp. D comp. A2 (`image' du comp. A) 32* 1*5*21*13* 16* 10* 15* 7* 4* 20* 12* PROFONDEUR LOCALE PROFONDEUR GLOBALE

10 10 Autres Considérations Partager une page ne nécessite pas toujours un doublement du répertoire. P.ex. insérer 9 * dans la page B. Partager la page pleine (i.e., créer une nouvelle page et redistribuer les entrées de données). Rediriger le pointeur 001 vers B (1*, 9*) et le pointeur 101 vers une nouvelle page B2 (5*,21*,13*). Ainsi donc, nous navons pas doublé la taille du répertoire. Effacement : Si leffacement des données a comme effet que un compartiment (ou page) devient vide, nous pouvons le fusionner avec son image. Si chaque élément du répertoire pointe vers le même compartiment, nous pouvons réduire le répertoire de moitié.

11 11 Résumé Le hachage est approprié pour les recherches dégalité. Le hachage statique peut conduire à des chaines de débordement ou à du gaspillage de lespace. Le hachage extensible évite les chaines de débordement par le partage des pages pleines. Un répertoire (qui double ou se réduit de moitié périodiquement) maintient les pages.


Télécharger ppt "1 Indexes à Hachage Sections sélectionnées du Chapitre 11."

Présentations similaires


Annonces Google