Vous êtes sur la page 1sur 64

8 Organisations unidimentionnelles :

indexage et hachage
 Sélection basée sur une clé d'accès
– recherche associative
– Ex: Chercher le plant dont le noCatalogue = 10
 Sériel
– lire tout le fichier en pire cas
– O(N)
 Indexage
– O(log(N))
– sélection par intervalle
 Hachage
– ~O(1)

30/01/24 © Robert Godin. Tous droits réservés. 1


8.1 Indexage
 Index et clé d'index (index key)
– valeur de la clé =>adresse de(s) l'enregistrement
Num éro
Num éro d'enregistrem ent
Index de bloc relatif
10 0 10 Cèdre en boule 10.99 0

20 8 40 Epinette bleue 25.99 1

40 1 0 90 Pom m ier 25.99 2

50 4 60 Erable argenté 15.99 3

60 3 50 Chêne 22.99 4

70 7
81 Catalpa 25.99 5
80 9
95 G énév rier 15.99 6
81 5
70 Herbe à puce 10.99 7
90 2 1
20 Sapin 12.99 8
95 6
80 Poirier 26.99 9

Index dense secondaire


30/01/24 © Robert Godin. Tous droits réservés. 2
Fichier séquentiel indexé
Num éro
Num éro d'enregistrem ent
Index de bloc relatif
10 0 10 Cèdre en boule 10.99 0

70 1 20 Sapin 12.99 1

0 40 Epinette bleue 25.99 2

50 Chêne 22.99 3

60 Erable argenté 15.99 4

70 Herbe à puce 10.99 5

80 Poirier 26.99 6

 Non dense 81 Catalpa 25.99 7


1
90 Pom m ier 25.00 8
 Index plus petit
95 G énév rier 15.99 9
 Accès séquentiel rapide
 Primaire

30/01/24 © Robert Godin. Tous droits réservés. 3


Index séquentiel hiérarchique
N iv eau 1 N iv eau 2
d'index d'index
10 10 10 C èdre en boule 10.99
80 40 20 S apin 12.99
... ... 60
40 E pinette bleue 25.99
80
50 C hêne 22.99
90
... ... 60 E rable argenté 15.99
70 H erbe à puce 10.99

80 P oirier 26.99
81 C atalpa 25.99
 Ex: ISAM de IBM
90 P om m ier 25.00
 Zone de débordement 95 G énév rier 15.99

 Réorganisations chroniques

30/01/24 © Robert Godin. Tous droits réservés. 4


8.1.1 Indexage par
Arbre-B et variantes
 Arbre-B (B-arbre, B-tree)
– forme d ’index hiérarchique
– équilibré
– O(log(N)) en pire cas
 Réoganisation dynamique
– division/fusion des blocs
– taux d ’occupation minimum de 50%

30/01/24 © Robert Godin. Tous droits réservés. 5


8.1.2 Arbre-B+
 Hypothèse initiale : clé simple et unique
 Nœud = bloc
Bloc 7
50

Bloc 2 Bloc 6
25 40 45 60

Bloc 0 Bloc 3 Bloc 1 Bloc 8 Bloc 5 Bloc 4


10 20 25 30 40 43 44 45 48 50 53 60 70

30/01/24 © Robert Godin. Tous droits réservés. 6


Structure d ’une feuille
 1. Remplie à moitié au minimum FBMf/2 ≤ n = nombre de clés ≤ FBMf

 2. Clés triées : i < j  Ci < Cj


 3. Clés d'une feuille < clés de la suivante
 4. Au même niveau (équilibré)

E space
C1 R1 ... Cn Rn S
libre
 Ci : Clé

 Ri : reste de l'enregistrement ou référence

 S : Pointeur sur le bloc suivant dans la liste des feuilles

30/01/24 © Robert Godin. Tous droits réservés. 7


Structure d’un bloc interne
 1. Remplie à moitié au minimum:
– OrdreI /2 ≤ n = nombre de pointeurs ≤ OrdreI

 2. Clés triées : i < j  Ci < Cj

 3. Ci-1 <= Clés sous Pi-1 < Ci


Espace
P1 C1 P2 ... C i-1 P i-1 Ci ... P n-1 C n-1 Pn
libre

C < C1 C i-1 <= C < C i C n-1 <= C

30/01/24 © Robert Godin. Tous droits réservés. 8


8.1.2.1 Recherche
dans un arbre-B+
RechercherClé (noBloc, clé, indice)

Entrée
noBloc : typeNuméroBloc {numéro du bloc à chercher; racine au premier appel}
clé : typeClé {la clé à chercher}
Sortie
noBloc : typeNuméroBloc {numéro du bloc où est la clé }
indice : 1..FBMf { si clé trouvée, indice de la clé dans le tableauClés du bloc}
valeur de retour : BOOLÉEN;{vrai si clé a été trouvée}
Pré-condition : arbre n'est pas vide

DÉBUT
lireBloc(fichierArbre-BPlus, noBloc, bloc);
TANT QUE bloc n'est pas une feuille
indice := l'indice de la plus petite clé de tableauClés plus grande que clé (ou n);
noBloc:= tableauEnfants[indice];
lireBloc(fichierArbre-BPlus, noBloc, bloc);
FIN TANT QUE;
SI la clé est présente dans tableauClés
indice := l'indice de la clé dans le tableauClés;
retourner VRAI;
SINON
retourner FAUX
FIN SI
FIN
30/01/24 © Robert Godin. Tous droits réservés. 9
Rechercher 43

Bloc 7
50

Bloc 2 Bloc 6
25 40 45 60

Bloc 0 Bloc 3 Bloc 1 Bloc 8 Bloc 5 Bloc 4


10 20 25 30 40 43 44 45 48 50 53 60 70

30/01/24 © Robert Godin. Tous droits réservés. 10


8.1.2.2 Complexité de la
recherche et hauteur de l'arbre

 FBMf = 20 et OrdreI = 200


 Hauteur = nombre de niveaux
 Hauteur 2 N  2 * 10 = 20 clés (pire cas)
 Hauteur 3 N  2 * 100 * 10 = 2 000 clés
 Hauteur 4 N  2 * 100 * 100 * 10 = 200 000 clés
 Hauteur 5 N  2 * 100 * 100 * 100 * 10 = 20 000 000 clés
 Hauteur H N  2*OrdreI /2H-2 * FBMf/2 pour H  2

 H  2 + log OrdreI /2 (N /(2*FBMf/2))


– O(log N)

30/01/24 © Robert Godin. Tous droits réservés. 11


Hauteur moyenne
 H ~ 1 + log OrdreMoyenI (N / FBf)
– OrdreMoyenI = 2/3 OrdreI 
– FBf = 2/3 FBMf 
 Index secondaire
– FBf ~ OrdreMoyenI
– H = log OrdreMoyenI (N)

30/01/24 © Robert Godin. Tous droits réservés. 12


8.1.2.3 Insertion dans un arbre-B+

 FBM = 3, OrdreI = 4
B loc 0
40 ...

B loc 0
20 ... 40 ...

B loc 0
20 ... 40 ... 60 ...

30/01/24 © Robert Godin. Tous droits réservés. 13


Débordement et division
 Insertion de 30
 Débordement et la division du bloc 0
 40 est promue
 Nouvelle racine
Bloc 0
20 ... 40 ... 60 ...

Bloc 2
40

Bloc 0 Bloc 1
20 ... 30 ... 40 ... 60 ...

30/01/24 © Robert Godin. Tous droits réservés. 14


Insertion de 25
Bloc 2
40

Bloc 0 Bloc 1
20 ... 30 ... 40 ... 60 ...

Bloc 2
40

Bloc 0 Bloc 1
20 25 30 40 60

30/01/24 © Robert Godin. Tous droits réservés. 15


Insertion de 10
 Débordement et la division du bloc 0
 25 est promue Bloc 2
40

Bloc 0 Bloc 1
20 25 30 40 60

Bloc 2
25 40

Bloc 0 Bloc 3 Bloc 1


10 20 25 30 40 60

30/01/24 © Robert Godin. Tous droits réservés. 16


Insertion de 70

Bloc 2
25 40

Bloc 0 Bloc 3 Bloc 1


10 20 25 30 40 60

B loc 2
25 40

B loc 0 B loc 3 B loc 1


10 20 25 30 40 60 70

30/01/24 © Robert Godin. Tous droits réservés. 17


Insertion de 50
 Débordement et la division du bloc 1

B loc 2
60 est promue
25 40

B loc 0 B loc 3 B loc 1


10 20 25 30 40 60 70

Bloc 2
25 40 60

Bloc 0 Bloc 3 Bloc 1 Bloc 4


10 20 25 30 40 50 60 70

30/01/24 © Robert Godin. Tous droits réservés. 18


Insertion de 53
Bloc 2
25 40 60

Bloc 0 Bloc 3 Bloc 1 Bloc 4


10 20 25 30 40 50 60 70

Bloc 2
25 40 60

Bloc 0 Bloc 3 Bloc 1 Bloc 4


10 20 25 30 40 50 53 60 70

30/01/24 © Robert Godin. Tous droits réservés. 19


Insertion de 45
 Division du bloc 1
 Bloc 2
50 est promue
25 40 60
 Division de la racine

Bloc 0 Bloc 3 Bloc 1 Bloc 4


10 20 25 30 40 50 53 60 70

Bloc 7
50

Bloc 2 Bloc 6
25 40 60

Bloc 0 Bloc 3 Bloc 1 Bloc 5 Bloc 4


10 20 25 30 40 45 50 53 60 70

30/01/24 © Robert Godin. Tous droits réservés. 20


8.1.2.4 Suppression
dans un arbre-B+
 Cas simple
– minimum préservé B loc 2
– pas la première 25 40

B loc 0 B loc 3 B loc 1


10 20 25 30 40 60 70

Bloc 2
25 40

Bloc 0 Bloc 3 Bloc 1


10 20 25 30 40 60

30/01/24 © Robert Godin. Tous droits réservés. 21


Première clé du bloc et
pas la première feuille
 Remplacer dans le parent (si pas « aîné »)
B loc 2
25 40

B loc 0 B loc 3 B loc 1


10 20 25 30 40 60 70

Bloc 2
25 60

Bloc 0 Bloc 3 Bloc 1


10 20 25 30 60 70

30/01/24 © Robert Godin. Tous droits réservés. 22


Première clé du bloc et
pas la première feuille
 Remonter tant que l'enfant est l ’« aîné » B loc 7
50

B loc 2 B loc 6
25 40 45 60

B loc 0 B loc 3 B loc 1 B loc 8 B loc 5 B loc 4


10 20 25 30 40 43 44 45 48 50 53 55 60 70

B loc 7
53

B loc 2 B loc 6
25 40 45 60

B loc 0 B loc 3 B loc 1 B loc 8 B loc 5 B loc 4


10 20 25 30 40 43 44 45 48 53 55 60 70

30/01/24 © Robert Godin. Tous droits réservés. 23


Violation du minimum :
redistribution si possible
Bloc 2
 Ajuster séparateur 40

Bloc 0 Bloc 1
20 25 30 40 60

Bloc 2
30

Bloc 0 Bloc 1
20 25 30 60

30/01/24 © Robert Godin. Tous droits réservés. 24


Violation du minimum :
fusion
B loc 2
Violation de la 25 60
règle du minimum

B loc 0 B loc 3 B loc 1


10 20 25 30 60 70
F usion des deux frères

B loc 2
60

B loc 0 B loc 1
10 25 30 60 70
30/01/24 © Robert Godin. Tous droits réservés. 25
Cas de fusion de feuilles et de
redistribution au niveau du parent
B loc 7
50

B loc 2 B loc 6
25 40 60 Violation de la
règle du minimum

B loc 0 B loc 3 B loc 1 B loc 5 B loc 4


10 20 25 30 40 45 50 53 60 70
F usion des deux frères

B loc 7
50 Violation de la
règle du minimum

R edistribution
B loc 2 B loc 6
25 40 60

B loc 0 B loc 3 B loc 1 B loc 5


10 20 25 30 40 45 50 60 70

30/01/24 © Robert Godin. Tous droits réservés. 26


Cas de fusion de feuilles et de
redistribution au niveau du parent
(suite)
Bloc 7
50 Violation de la
règle du minimum

R edistribution
Bloc 2 Bloc 6
25 40 60

Bloc 0 Bloc 3 Bloc 1 Bloc 5


10 20 25 30 40 45 50 60 70

Bloc 7
40

Bloc 2 Bloc 6
25 50

Bloc 0 Bloc 3 Bloc 1 Bloc 5


10 20 25 30 40 45 50 60 70

30/01/24 © Robert Godin. Tous droits réservés. 27


Cas de fusion en cascade
B loc 7
40

B loc 2 B loc 6
Violation de la
règle du minimum 25 50

B loc 0 B loc 3 B loc 1 B loc 5


10 20 25 30 40 45 50 60 70
F usion des deux frères

B loc 7
Violation de la
règle du minimum 40

B loc 2 B loc 6
25 50
F usion des deux frères

B loc 0 B loc 1 B loc 5


10 25 30 40 45 50 60 70

30/01/24 © Robert Godin. Tous droits réservés. 28


Cas de fusion en cascade (suite) :
réduction de la hauteur
Bloc 7
Violation de la
règle du minimum 40

Bloc 2 Bloc 6
25 50
F usion des deux frères

Bloc 0 Bloc 1 Bloc 5


10 25 30 40 45 50 60 70

Bloc 2
40 50

Bloc 0 Bloc 1 Bloc 5


10 25 30 40 45 50 60 70

30/01/24 © Robert Godin. Tous droits réservés. 29


8.1.3 Arbre-B
 Bloc 6
Clés non dupliquées Arbre-B
40
 Ordre <
 Hauteur >
Bloc 2 Bloc 5
25 60

Bloc 0 Bloc 3 Bloc 1 Bloc 4


10 20 30 50 53 70

B loc 2
25 40 60 Arbre-B+

B loc 0 B loc 3 B loc 1 B loc 4


10 20 25 30 40 50 53 60 70

30/01/24 © Robert Godin. Tous droits réservés. 30


8.1.4 Autres variantes
du concept d'arbre-B
 Redistribuer plutôt que diviser
– occupation moyenne 67% => 86%
 Diviser deux en trois
– Arbre-B*
 Ordre variable
– clés de taille variable
 Arbre B préfixe
– comprimer les clés diminue la hauteur
 Algorithme de chargement en lot
– feuilles consécutives
– taux de remplissage prédéterminé

30/01/24 © Robert Godin. Tous droits réservés. 31


Cas d'une clé non unique

 Arbre-B+ primaire sur une clé non unique


– IDE difficile
 Arbre B+ secondaire avec clés répétées
– clé d ’accès + pointeur (unique)
 Arbre B+ secondaire avec collection de références
– listes inversées dans les feuilles
 Arbre B+ secondaire avec référence à une collection d'enregistrements
– Index groupant (“ clustering index ”)
 organisation primaire par grappe et index secondaire sur même clé

 Arbre B+ secondaire avec référence à collection de références


– listes inversées à part
 Arbre B+ avec vecteurs booléens
– index « bitmap »

30/01/24 © Robert Godin. Tous droits réservés. 32


8.1.5 Réalisation de l'accès par IDE à l'aide
d'une organisation par index

 Index primaire
– IDE = id_fichier, valeur de la clé unique
– nécessite le passage par l ’index
 IDE logique
– index secondaire
– clé d ’index = IDE

30/01/24 © Robert Godin. Tous droits réservés. 33


8.1.6 Sélection par
intervalle ou préfixe
 Arbre B+
– recherche de la valeur minimale
– parcours des feuilles jusqu ’à la valeur maximale

... ...

... ...

... ...
...

Feuilles à transférer
30/01/24 © Robert Godin. Tous droits réservés. 34
8.1.7 Index sur une
clé composée
 Clé composée ~ clé simple formée de la
concaténation des champs
 Sélection par préfixe de la clé composée

30/01/24 © Robert Godin. Tous droits réservés. 35


8.1.8 Index bitmap
indice noPermis sexe couleurYeux bitmap bitmap bitmap bitmap bitmap
sexe = M sexe = F couleurYeux couleurYeux couleurYeux
= bleu = brun = rouge
1 G111 M brun 1 0 0 1 0
2 G555 M bleu 1 0 1 0 0
3 G222 F brun 0 1 0 1 0
4 G888 M brun 1 0 0 1 0
5 G777 F brun 0 1 0 1 0
6 G666 M rouge 1 0 0 0 1
7 G333 F bleu 0 1 1 0 0
8 G444 F brun 0 1 0 1 0

 couleurYeux = brun et sexe = M


– 10111001 ET 11010100 = 10010000

30/01/24 © Robert Godin. Tous droits réservés. 36


8.2 Arbre digital (trie)
 Chaque niveau : position d'un symbole de la clé vue comme une
séquence de symboles s1s2…sn

A B C

A C A B

«A» «C»

A B

«AA» «BA» «BB»

«ACA» «ACB»

30/01/24 © Robert Godin. Tous droits réservés. 37


8.3 Hachage
 Hachage ou adressage dispersé (hashing)
 Fonction h(clé de hachage) => l'adresse d'un paquet
 Fichier = tableau de paquets (bucket)
– ~ARRAY paquet [0..TH-1]
– TH : taille de l'espace d'adressage primaire

 Habituellement paquet = bloc


 Pas d ’index à traverser : O(1) en meilleur cas
 Sélection par égalité (pas intervalle)

30/01/24 © Robert Godin. Tous droits réservés. 38


8.3.1 Hachage statique
60 Erable argenté 15.99
90 Pom m ier 25.99
0
81 Catalpa 25.99
clé = 10
70 Herbe à puce 10.99
40 Epinette bleue 25.99
h(10) = 10 M O D 3 = 1 1
10 Cèdre en boule 10.99

20 Sapin 12.99
50 Chêne 22.99
2
95 G énév rier 15.99
80 Poirier 26.99

30/01/24 © Robert Godin. Tous droits réservés. 39


8.3.1.1 Problème de
débordement dû aux collisions
 Méthode de résolution des collisions
– Adressage ouvert
 AC+1, AC+2,....., n-1, 0, 1, ....AC-1
– Chaînage
60 Erable argenté 15.99
90 Pom m ier 25.99
0
81 Catalpa 25.99

70 Herbe à puce 10.99 52 Pin 18.99


40 Epinette bleue 25.99
1
10 Cèdre en boule 10.99
43 M agnolia 28.99
20 Sapin 12.99
50 Chêne 22.99
2
95 G énév rier 15.99
80 Poirier 26.99

30/01/24 © Robert Godin. Tous droits réservés. 40


Fonction de hachage
 Répartition uniforme des clés dans [0..TH-1]
– h(clé) = clé MOD TH
 TH est premier
– h(clé) = clé p MOD TH
 TH et p sont relativement premiers
– h(clé) = (∑ si) MOD TH
 si est une sous-séquence des bits de la clé
 Clé non numérique
– représentation binaire vue comme un entier

30/01/24 © Robert Godin. Tous droits réservés. 41


Hachage vs indexage
 O(1) en meilleur cas vs O(log(N))
 Pas d ’espace supplémentaire d ’index
 Gaspillage d ’espace si TH trop >
 Performance dégradée si TH trop <
 Gestion plus délicate
– déterminer h et TH
– maintenance : réorganisations
 Clé non numérique ?
– représentation binaire vue comme un entier

30/01/24 © Robert Godin. Tous droits réservés. 42


Calcul d ’espace
 Heuristique : Taux d ’occupation moyen ~
80%
– TauxOccupation = N/(TH  FB)  0.8
 Taux de débordement moyen sous distribution
uniforme [Merrett, 1984 #217] :
– FB = 1 ~ 30%
– FB = 10 ~ 5%
– FB = 100 ~1%

30/01/24 © Robert Godin. Tous droits réservés. 43


8.3.1.2 Fonction de hachage
préservant la relation d'ordre

 (tidy functions)
 clé1 < clé2  h(clé1) < h(clé2)
 Connaissances préalables au sujet de la
distribution des clés

30/01/24 © Robert Godin. Tous droits réservés. 44


8.3.2 Hachage dynamique

 Adaptation de TH et h aux variations du


volume des données
 ~ arbre-B
– division et fusion de paquets (blocs)
 Deux variantes de base
– linéaire
– extensible

30/01/24 © Robert Godin. Tous droits réservés. 45


8.3.2.1 Hachage linéaire
 Adaptation de TH
– suite d ’expansions
 Début de dième expansion, d  {0, 1, …}
– TH passera de 2d à 2d+1
– adresse du paquet : hd(clé) = bd-1, bd-2,…, b1, b0
10100 2 11101 2 11010 2 01111 2
d=2
00001 2 11011 2
00 2 01 2 10 2 11 2

p
30/01/24 © Robert Godin. Tous droits réservés. 46
Insertion de h(clé) = 101012
10100 2 11101 2 11010 2 01111 2  Bloc #012 déborde
00001 2 11011 2
00 2 01 2 10 2 11 2  Division du bloc p = #002 (pas #012)
 p := p+1
p
D ivision du bloc 00 2
FONCTION AdresseLinéaire (clé)
DÉBUT
10101 2 SI hd(clé) >= p Retourner hd(clé)
SINON Retourner hd+1(clé) FINSI
FIN

11101 2 11010 2 01111 2 10100 2


00001 2 11011 2
000 2 01 2 10 2 11 2 100 2

Zône primaire Zône d'expansion

30/01/24 © Robert Godin. Tous droits réservés. 47


Insertion de h(clé) = 101112
10101 2
 Bloc #112 déborde
11101 2 11010 2 01111 2 10100 2
00001 2 11011 2
000 2 01 2 10 2 11 2 100 2

p
Division du bloc 01 2 ( p = 01 2 )

10111 2

00001 2 11010 2 01111 2 10100 2 10101 2


11011 2 11101 2
000 2 001 2 10 2 11 2 100 2 101 2

Zône primaire Zône d'expansion


30/01/24 © Robert Godin. Tous droits réservés. 48
Insertion de 110002, 110012 et 101102

10111 2

00001 2 11010 2 01111 2 10100 2 10101 2


11011 2 11101 2
000 2 001 2 10 2 11 2 100 2 101 2

p
10111 2

11000 2 00001 2 11010 2 01111 2 10100 2 10101 2


11001 2 10110 2 11011 2 11101 2
000 2 001 2 10 2 11 2 100 2 101 2

Zône primaire Zône d'expansion


30/01/24 © Robert Godin. Tous droits réservés. 49
Insertion de 100102
10111 2
 Bloc #102 déborde et est divisé
11000 2 00001 2 11010 2 01111 2 10100 2 10101 2
11001 2 10110 2 11011 2 11101 2
000 2 001 2 10 2 11 2 100 2 101 2

p
D ivision du bloc 10 2 (p = 10 2 )

10111 2

11000 2 00001 2 11010 2 01111 2 10100 2 10101 2 10110 2


11001 2 10010 2 11011 2 11101 2
000 2 001 2 010 2 11 2 100 2 101 2 110 2

30/01/24 © Robert Godin. Tous droits réservés. 50


Zône primaire Zône d'expansion
Insertion de 011012
10111 2  Bloc #1012 déborde
– zone d ’expansion !
11000 2 00001 2 11010 2 01111 2 10100 2 10101 2 10110 2
 Fin de l ’expansion
11001 2 10010 2 11011 2 11101 2
000 2 001 2 010 2 11 2 100 2 101 2 110 2  p := 0
p  d := d+1 = 3
D ivision du bloc 11 2

01101 2
d=3
11000 2 00001 2 11010 2 11011 2 10100 2 10101 2 10110 2 01111 2
11001 2 10010 2 11101 2 10111 2
000 2 001 2 010 2 011 2 100 2 101 2 110 2 111 2

30/01/24 © Robert Godin. Tous droits réservés. 51


Zone primaire
8.3.2.1.1 Variantes du
hachage linéaire
 Variante du contrôle de la division
– algorithme de base
 débordement => division : taux d ’occupation ~ 60%
– division/fusion contrôlée par taux d ’occupation
 Variante de gestion des débordements
– hachage linéaire au niveau suivant
 Variante de division
– biais dans les chaînages (à droite de p)
– expansions partielles
 diviser n blocs en n+1
– fonction de hachage exponentielle
 Gestion de l ’espace d ’adressage primaire
– préserver la contiguïté de l ’espace malgré expansions ?

30/01/24 © Robert Godin. Tous droits réservés. 52


8.3.2.2 Hachage extensible

 Ajoute un niveau d ’indirection


 Répertoire d'adresses de paquets
– espace supplémentaire
– accès disque supplémentaire pour répertoire
 antémémoire
 Bloc qui déborde est divisé
– pas de dégradation due au chaînage
– pire cas : 2 transferts

30/01/24 © Robert Godin. Tous droits réservés. 53


Analogie avec arbre digital
 Répertoire vu comme arbre digital
 Chemin = suffixe
0 1

10001 2
0 1
11101 2
10100 2 01010 2 B loc 1
11000 2 01110 2
B loc
 Pas de 0 directBentre
lien loc 2 suffixe et #bloc

30/01/24 © Robert Godin. Tous droits réservés. 54


Insertion de h(clé) = 100112
 Débordement et division du bloc #1 0 1
 Utilisation d ’un bit de plus
10001 2
0 1
11101 2
10100 2 01010 2 B loc 1
11000 2 01110 2
B loc 0 B loc 2

0 1

0 1 0 1

10100 2 01010 2 10001 2 10011 2


11000 2 01110 2 11101 2
B loc 0 B loc 2 B loc 1 B loc 3
30/01/24 © Robert Godin. Tous droits réservés. 55
«Remplacer» l'arbre digital
par un répertoire
 « Compléter » l ’arbre 0 1

10001 2
0 1
11101 2
10100 2 01010 2 B loc 1
11000 2 01110 2
B loc 0 B loc 2

0 1

0 1 0 1

10100 2 01010 2 10001 2


11000 2 01110 2 11101 2
B loc 0 B loc 2 B loc 1
30/01/24 © Robert Godin. Tous droits réservés. 56
Arbre digital => un répertoire

 Bijection chemin <-> indice 0 1 Sens


de
0 1 0 1 lecture
des
10100 2 01010 2 10001 2 indices
11000 2 01110 2 11101 2
B loc 0 B loc 2 B loc 1
Profondeur
globale du 00 2 01 2 10 2 11 2
répertoire (d)
2

Profondeur
locale du
bloc
10100 2 10001 2 01010 2
2 1 2
11000 2 11101 2 01110 2
Bloc 0 Bloc 1 Bloc 2
30/01/24 © Robert Godin. Tous droits réservés. 57
Insertion de h(clé) = 100112
avec répertoire
Profondeur
globale du 00 2 01 2 10 2 11 2
répertoire (d)
2

Profondeur
locale du
bloc
10100 2 10001 2 01010 2
2 1 2
11000 2 11101 2 01110 2
Bloc 0 Bloc 1 Bloc 2
Profondeur
globale du 00 2 01 2 10 2 11 2
répertoire (d)
2

Profondeur
locale du
bloc
10100 2 10001 2 01010 2 10011 2
2 2 2 2
11000 2 11101 2 01110 2
Bloc 0 Bloc 1 Bloc 2 Bloc 3
30/01/24 © Robert Godin. Tous droits réservés. 58
Cas de dédoublement de répertoire :
insertion de h(clé) = 101102
Profondeur
0 1 globale du 00 2 01 2 10 2 11 2
répertoire (d)
10001 2 2
0 1
11101 2 Profondeur
10100 2 01010 2 B loc 1 locale du
bloc
11000 2 01110 2 10100 2 10001 2 01010 2
2 1 2
B loc 0 B loc 2 11000 2 11101 2 01110 2
0 1 Bloc 0 Bloc 1 Bloc 2
10001 2
0 1
11101 2
10100 2
11000 2
0 1
Bloc 1
Profondeur locale dépasse
Bloc 0 01010 2 01110 2 profondeur globale
10110 2
Bloc 2 Bloc 3

0 1
000 2 001 2 010 2 011 2 100 2 101 2 110 2 111 2
3
0 1 0 1

10100 2 10001 2 01010 2 01110 2


0 1 0 1 0 1 0 1 2
11000 2
1
11101 2
3 3
10110 2
B loc 0 B loc 1 B loc 2 B loc 3
10100 2 01010 2 01110 2 10001 2
11000 2 10110 2 11101 2
B loc 0 B loc 2 B loc 3 B loc 1

30/01/24 © Robert Godin. Tous droits réservés. 59


Hachage extensible (suite)

 Occupation d ’espace
– comportement oscillatoire assez prononcé
 entre
.53 et .94
 moyenne : ln 2 = .69

 Variation
– contrôle de la division par taux d ’occupation
– gestion des débordements

30/01/24 © Robert Godin. Tous droits réservés. 60


8.3.3 Réalisation de l'accès
par IDE avec le hachage
 Hachage statique
– bloc d ’ancrage fixe
– IDE = idFichier, #blocAncrage, #séquence
 HASH CLUSTER d ’Oracle
– applicable dans le cas non unique
 Cas d ’une clé de hachage unique
– IDE = id_fichier, valeur de la clé unique
– nécessaire avec hachage dynamique

30/01/24 © Robert Godin. Tous droits réservés. 61


8.3.4 Hachage sur une clé
non unique et effet de grappe
 Regroupement des mêmes valeurs de clé
– v1 = v2  h(v1) = h(v2) taille

20 Sapin 12.99 15 52 Pin 18.99 15


90 Pom m ier 25.99 6 80 Poirier 26.99 6
0
81 Catalpa 25.99 15
40 Epinette bleue 25.99 15
70 Herbe à puce 10.99 1
95 G énév rier 15.99 1
h(taille) = taille M O D 3 1
10 Cèdre en boule 10.99 1

50 Chêne 22.99 20
60 Erable argenté 15.99 20
2
43 M agnolia 28.99 5

30/01/24 © Robert Godin. Tous droits réservés. 62


8.3.5 Hachage secondaire

 Hachage sur
– (clé de hachage, IDE)

30/01/24 © Robert Godin. Tous droits réservés. 63


8.4 Tableau comparatif des
organisations
Critère Sériel Arbre-B+ Arbre-B+ Hachage Hachage
primaire secondaire statique dynamique
Sélection par égalité sur O(N / FB) O(log (N )) O(log (N )) Meilleur cas Meilleur cas
clé unique Cas moyen : :O(1) :O(1)
O(N/ FB/ 2) Pire cas : Pire cas :
O(N / FB) O(N / FB)
Sélection par égalité sur O(N / FB) O(log (Card(clé))+ A pproche par Meilleur cas : Meilleur cas :
clé non unique Sel/ FB) duplication O(Sel/ FB) O(Sel/ FB)
O(log (N )+ Pire cas : Pire cas :
Sel) O(N / FB) O(N / FB)
Sélection par intervalle O(N / FB) O(log (Card(clé))+ O(log (N )+ O(N / FB) O(N / FB)
Sel/ FB) Sel)
Itération sérielle O(N / FB) O(N ) O(N / FB) O(N / FB)
Itération séquentielle O(tri) O(N / FB) O(N ) O(tri) O(tri)
Insertion/ suppression O(1) O(log N ) O(log N ) Meilleur cas
Meilleur cas
:O(1) :O(1)
Pire cas :
Pire cas :
O(N / FB) O(N / FB)
Taux d'occupation Maximal En moyennne : Ajouter à ~ 80% ~ 69% (ln 2)
mémoire secondaire approche 100% 66% (2/ 3) l'organisation À ajuster Peut augmenter
primaire Pire cas nonau prix d'une
borné diminution de
performance.
Autres considérations Support difficile Peut y avoir Distribution Disponibilité
de l'accès par plusieurs index des clés par restreinte
IDE et donc des secondaires sur fonction de
organisations la même table hachage ?
secondaires Problème avec
tables volatiles
Stress du DBA

30/01/24 © Robert Godin. Tous droits réservés. 64

Vous aimerez peut-être aussi