Indexes Hachage Sections slectionnes du Chapitre 11 1

  • Slides: 11
Download presentation
Indexes à Hachage Sections sélectionnées du Chapitre 11 1

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

Introduction v Indexes à Hachage : meilleurs pour les recherches d’égalité; ne supportent pas

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

Hachage Statique v Pages primaires : § forment une collection de compartiments en nombre

Hachage Statique v 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 v h(k) mod M = compartiment où mettre l’entrée des données dont la clé est k (M = # de compartiments). h(key) mod N key 0 1 h M-1 Pages (compartiments) primaires Pages de débordement 3

Hachage Statique (Suite) v v v Les compartiments contiennent les entrées données triées. La

Hachage Statique (Suite) v v v Les compartiments contiennent les entrées données triées. La fonction de hachage utilise le champ de la clé de recherche de l’enregistrement 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); cher 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 l’espace, créer une page de débordement et y inserer key. § Effacement: calculer b= h(key); cher 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. v 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 d’espace se perd dans les compartiments § Solution: hachage dynamique (Hachage extensible et hachage linéaire) 4

Hachage Extensible v Situation: un compartiment (page primaire) se remplit. Pourrait-on réorganiser le fichier

Hachage Extensible v 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, d’où doubler le répertoire est moins coûteux. Plus besoin de pages de débordement! 5

Exemple PROFONDEUR LOCALE PROFONDEUR GLOBALE 2 v v v 00 Le répertoire est de

Exemple PROFONDEUR LOCALE PROFONDEUR GLOBALE 2 v v v 00 Le répertoire est de taille 4. La capacité du compartiment est de 01 10 4 entrées de données. Recherche: pour trouver la page de 11 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 01. Si h(key(r)) = 4 (= binaire 100), r est dans la page vers laquelle pointe 00. compartiment A 2 4* 12* 32* 16* compartiment B 2 1* 5* 21* 2 compartiment C 10* REPERTOIRE 2 compartiment D 15* 7* 19* PAGES DE DONNEES 6

Exemple (Suite) v Insertion (page non pleine): recher la page de r, insérer l’entrée

Exemple (Suite) v Insertion (page non pleine): recher la page de r, insérer l’entrée de données de r; p. ex. § § § v PROFONDEUR LOCALE PROFONDEUR GLOBALE 2 00 4* 12* 32* 16* compartiment B 2 1* 5* 21* 13* 01 Nous voulons insérer 13* 10 Puisque h(key(r)) = 13 (= binaire 1101), l’entrée de données de r est dans 11 la page vers laquelle pointe 01. Insérer 13* dans le compartiment B. Insertion (page pleine): P. ex. insérer 20* (= binaire 10100) 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) § compartiment A 2 2 compartiment C 10* REPERTOIRE 2 compartiment D 15* 7* 19* PAGES DE DONNEES 7

Exemple: Insertion de h(r)=20 v 20 = binaire 10100. Les derniers 2 bits (00)

Exemple: Insertion de h(r)=20 v 20 = binaire 10100. Les derniers 2 bits (00) indiquent que r appartient au compartiment A qui est déjà plein! On divise A en A et A 2, 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 d’un compartiment (PL): # de bits utilisés pour déterminer si une entrée appartient à ce compartiment. v Nous plaçons les entrées dont le troisième bit est 1 dans A 2 (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 qu’un maximum de 4 pointeurs, alors que 5 sont nécessaires. Solution: doubler la taille du répertoire. v Lorsque une insertion entraîne PL > PG. , on double le v répertoire par copie et réarrangement des pointeurs. 8

Exemple: Insertion de h(r)=20 (Suite) PROFONDEUR LOCALE 2 32*16* PROFONDEUR GLOBALE 2 00 comp.

Exemple: Insertion de h(r)=20 (Suite) PROFONDEUR LOCALE 2 32*16* PROFONDEUR GLOBALE 2 00 comp. A 2 1* 5* 21*13* comp. B 10 2 11 10* 2 4* 12* 20* 32* 16* comp. A 3 000 2 1* 5* 21* 13* comp. B 001 comp. C 010 2 011 10* comp. C 100 2 15* 7* 19* 3 PROFONDEUR GLOBALE 01 REPERTOIRE PROFONDEUR LOCALE comp. D 101 2 110 15* 7* 19* comp. D 111 compartiment A 2 REPERTOIRE (`image' du compartiment A) 3 4* 12* 20* comp. A 2 (`image' du comp. A) 9

Autres Considérations v Partager une page ne nécessite pas toujours un doublement du répertoire.

Autres Considérations v Partager une page ne nécessite pas toujours un doublement du répertoire. P. ex. pour 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 B 2 (5*, 21*, 13*). § Ainsi donc, nous n’avons pas doublé la taille du répertoire. § v Effacement: § Si l’effacement 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 que son image, nous pouvons réduire le répertoire de moitié. § Si le répertoire est contenu en mémoire principale, les requêtes sont répondues en un seul accès au disque! 10

Résumé Le hachage est approprié pour les recherches d’égalité. v Le hachage statique peut

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