Académique Documents
Professionnel Documents
Culture Documents
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)
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
70 1 20 Sapin 12.99 1
50 Chêne 22.99 3
80 Poirier 26.99 6
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
Bloc 2 Bloc 6
25 40 45 60
E space
C1 R1 ... Cn Rn S
libre
Ci : Clé
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
FBM = 3, OrdreI = 4
B loc 0
40 ...
B loc 0
20 ... 40 ...
B loc 0
20 ... 40 ... 60 ...
Bloc 2
40
Bloc 0 Bloc 1
20 ... 30 ... 40 ... 60 ...
Bloc 0 Bloc 1
20 ... 30 ... 40 ... 60 ...
Bloc 2
40
Bloc 0 Bloc 1
20 25 30 40 60
Bloc 0 Bloc 1
20 25 30 40 60
Bloc 2
25 40
Bloc 2
25 40
B loc 2
25 40
Bloc 2
25 40 60
Bloc 2
25 40 60
Bloc 7
50
Bloc 2 Bloc 6
25 40 60
Bloc 2
25 40
Bloc 2
25 60
B loc 2 B loc 6
25 40 45 60
B loc 7
53
B loc 2 B loc 6
25 40 45 60
Bloc 0 Bloc 1
20 25 30 40 60
Bloc 2
30
Bloc 0 Bloc 1
20 25 30 60
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 7
50 Violation de la
règle du minimum
R edistribution
B loc 2 B loc 6
25 40 60
R edistribution
Bloc 2 Bloc 6
25 40 60
Bloc 7
40
Bloc 2 Bloc 6
25 50
B loc 2 B loc 6
Violation de la
règle du minimum 25 50
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
Bloc 2 Bloc 6
25 50
F usion des deux frères
Bloc 2
40 50
B loc 2
25 40 60 Arbre-B+
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
... ...
... ...
... ...
...
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
A B C
A C A B
«A» «C»
A B
«ACA» «ACB»
20 Sapin 12.99
50 Chêne 22.99
2
95 G énév rier 15.99
80 Poirier 26.99
(tidy functions)
clé1 < clé2 h(clé1) < h(clé2)
Connaissances préalables au sujet de la
distribution des clés
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
p
Division du bloc 01 2 ( p = 01 2 )
10111 2
10111 2
p
10111 2
p
D ivision du bloc 10 2 (p = 10 2 )
10111 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
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
0 1
0 1 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
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
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
50 Chêne 22.99 20
60 Erable argenté 15.99 20
2
43 M agnolia 28.99 5
Hachage sur
– (clé de hachage, IDE)