• Aucun résultat trouvé

FormatPowerPoint97

N/A
N/A
Protected

Academic year: 2022

Partager "FormatPowerPoint97"

Copied!
63
0
0

Texte intégral

(1)

3 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)

(2)

3.1 Indexage

Index et clé d'index (index key)

valeur de la clé =>adresse de(s) l'enregistrement

N u m é r o d e b l o c

N u m é r o d 'e n r e g i s t r e m e n t

r e l a t i f

0

1

0 1 2 3 4

5 6 7 8 9

1 0 C è d r e e n b o u l e 1 0 . 9 9 4 0

9 0 6 0 5 0

E p i n e t t e b l e u e P o m m i e r E r a b l e a r g e n t é

C h ê n e

2 5 . 9 9 2 5 . 9 9 1 5 . 9 9 2 2 . 9 9

2 6 . 9 9 1 2 . 9 9 1 0 . 9 9 1 5 . 9 9

P o i r i e r S a p i n H e r b e à p u c e

G é n é v r i e r

8 0 2 0 7 0 9 5

2 5 . 9 9 C a t a l p a

8 1

1 0 0

2 0 8

4 0 1

5 0 4

6 0 3

7 0 7

8 0 9

8 1 5

9 0 2

9 5 6

I n d e x

Index dense secondaire

(3)

Fichier séquentiel indexé

Non dense

Index plus petit

Accès séquentiel rapide

Primaire

1 0 0

7 0 1

I n d e x N u m é r o

d e b l o c

N u m é r o d 'e n r e g i s t r e m e n t

r e l a t i f

0

1

0 1 2 3 4 5 6 7 8 9

1 0 C è d r e e n b o u l e 1 0 . 9 9 2 0

4 0 5 0 6 0

S a p i n E p i n e t t e b l e u e

C h ê n e E r a b l e a r g e n t é

1 2 . 9 9 2 5 . 9 9 2 2 . 9 9 1 5 . 9 9

1 5 . 9 9 2 5 . 0 0 2 5 . 9 9 2 6 . 9 9

G é n é v r i e r P o m m i e r

C a t a l p a P o i r i e r

9 5 9 0 8 1 8 0

1 0 . 9 9 H e r b e à p u c e

7 0

(4)

Index séquentiel hiérarchique

 Ex: ISAM de IBM

Zone de débordement

Réorganisations chroniques

1 0 C è d r e e n b o u l e 1 0 . 9 9

2 0 4 0 5 0

S a p i n E p i n e t t e b l e u e

C h ê n e

1 2 . 9 9 2 5 . 9 9 2 2 . 9 9

6 0 E r a b l e a r g e n t é 1 5 . 9 9

1 0 . 9 9 H e r b e à p u c e

7 0

2 5 . 9 9 2 6 . 9 9 C a t a l p a

P o i r i e r 8 1

8 0

1 5 . 9 9 2 5 . 0 0 G é n é v r i e r

P o m m i e r 9 5

9 0

1 0 4 0

N i v e a u 2 d 'i n d e x

6 0 8 0 9 0

. . . . 1 0

8 0

. . . .

N i v e a u 1 d ' i n d e x

(5)

3.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%

(6)

3.1.2 Arbre-B+

 Hypothèse initiale : clé simple et unique

 Nœud = bloc

1 0 B l o c 0

2 0

2 5 4 0 4 5

B l o c 2

2 5 B l o c 3

3 0 4 0

B lo c 1

4 3 4 4 6 0

B l o c 4 7 0 5 0

B lo c 5 5 3

6 0 B lo c 6 5 0

B l o c 7

4 5 4 8

B l o c 8

(7)

Structure d ’une feuille

1. Remplie à moitié au minimum FBM

f

/2 ≤ n = nombre de clés ≤ FBM

f

2. Clés triées : i < j  C

i

< C

j

3. Clés d'une feuille < clés de la suivante

4. Au même niveau (équilibré)

Ci : Clé

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

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

C

1

R

1

. . . C

n

R

n

E s p a c e S

l i b r e

(8)

Structure d’un bloc interne

1. Remplie à moitié au minimum:

Ordre

I

/2 ≤ n = nombre de pointeurs ≤ Ordre

I

2. Clés triées : i < j  C

i

< C

j

3. C

i-1

<= Clés sous P

i-1

< C

i

P 1 C 1 P 2 . . . C i- 1 P i- 1 C i . . . P n - 1 C n - 1 P n

C i- 1 < = C < C i

E s p a c e l i b r e

C < C 1 C n - 1 < = C

(9)

3.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

(10)

Rechercher 43

1 0 B l o c 0

2 0

2 5 4 0 4 5

B lo c 2

2 5 B lo c 3

3 0 4 0

B l o c 1

4 3 4 4 6 0

B lo c 4 7 0 5 0

B l o c 5 5 3

6 0 B l o c 6 5 0

B lo c 7

4 5 4 8

B lo c 8

(11)

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

FBM f = 20 et Ordre I = 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,000clés

Hauteur 5 N  2 * 100 * 100 * 100 * 10 = 20,000,000 clés

Hauteur H N  2*Ordre

I

/2

H-2

* FBM

f

/2 pour H  2

H  2 + log OrdreI /2 (N /(2*FBM f /2))

O(log N)

(12)

Hauteur moyenne

H ~ 1 + log OrdreMoyenI (N / FB f ) 

OrdreMoyen

I

=  2/3 Ordre

I

FB

f

=  2/3 FBM

f

 Index secondaire

FB

f

~ OrdreMoyen

I

H = log

OrdreMoyenI

(N) 

(13)

3.1.2.3 Insertion dans un arbre-B+

FBM = 3, Ordre I = 4

4 0 . . .

B l o c 0

2 0 . . . 4 0 . . .

B l o c 0

2 0 . . . 4 0 . . . 6 0 . . .

B l o c 0

(14)

Débordement et division

Insertion de 30

Débordement et la division du bloc 0

40 est promue

Nouvelle racine

2 0 . . . 4 0 . . . 6 0 . . .

B l o c 0

2 0 . . . 3 0 . . .

B l o c 0

4 0 . . . 6 0 . . .

B l o c 1 4 0

B l o c 2

(15)

Insertion de 25

2 0 . . . 3 0 . . .

B l o c 0

4 0 . . . 6 0 . . .

B l o c 1 4 0

B l o c 2

4 0 B l o c 2

2 0 B l o c 0

2 5 3 0 4 0

B l o c 1

6 0

(16)

Insertion de 10

4 0 B l o c 2

2 0 B l o c 0

2 5 3 0 4 0

B l o c 1 6 0

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1 6 0

Débordement et la division du bloc 0

25 est promue

(17)

Insertion de 70

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1 6 0

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

6 0 7 0

(18)

Insertion de 50

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

6 0 7 0

1 0 B l o c 0

2 0

2 5 4 0 6 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

5 0 6 0

B l o c 4 7 0

Débordement et la division du bloc 1

60 est promue

(19)

Insertion de 53

1 0 B l o c 0

2 0

2 5 4 0 6 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

5 0 6 0

B l o c 4 7 0

1 0 B l o c 0

2 0

2 5 4 0 6 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

5 0 5 3 6 0

B l o c 4 7 0

(20)

Insertion de 45

1 0 B l o c 0

2 0

2 5 4 0 6 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

5 0 5 3 6 0

B l o c 4 7 0

10 Bloc 0

20

25 40

Bloc 2

25 Bloc 3

30 40

Bloc 1

45 60

Bloc 4 70 50

Bloc 5 53

60 Bloc 6 50

Bloc 7

Division du bloc 1

50 est promue

Division de la racine

(21)

3.1.2.4Suppression dans un arbre-B+

Cas simple

minimum préservé

pas la première

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

6 0 7 0

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1 6 0

(22)

Première clé du bloc et pas la première feuille

 Remplacer dans le parent (si pas « aîné »)

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

6 0 7 0

1 0 B l o c 0

2 0

2 5 6 0

B l o c 2

2 5 B l o c 3

3 0 6 0

B l o c 1 7 0

(23)

Première clé du bloc et pas la première feuille

 Remonter tant que l'enfant est l ’«

aîné »

1 0 B l o c 0

2 0

2 5 4 0 4 5

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

4 3 4 4 6 0

B l o c 4 7 0 5 0

B l o c 5

5 3 5 5

6 0 B l o c 6 5 0

B l o c 7

4 5 4 8

B l o c 8

B l o c 0

2 5 4 0 4 5

B l o c 2

B l o c 3 B l o c 1 B l o c 5 B l o c 4

6 0 B l o c 6 5 3

B l o c 7

B l o c 8

(24)

Violation du minimum : redistribution si possible

 Ajuster séparateur B l o c 2 4 0

2 0 B l o c 0

2 5 3 0 4 0

B l o c 1 6 0

3 0 B l o c 2

2 0 B l o c 0

2 5 3 0

B l o c 1

6 0

(25)

Violation du minimum : fusion

F u s i o n d e s d e u x f r è r e s 1 0

B l o c 0 2 0

2 5 6 0

B l o c 2

2 5 B l o c 3

3 0 6 0

B l o c 1 7 0

1 0 B l o c 0

2 5 3 0

6 0 B l o c 2

6 0 B l o c 1

7 0

V io la t io n d e la r è g le d u m in im u m

(26)

Cas de fusion de feuilles et de

redistribution au niveau du parent

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

4 5 6 0

B l o c 4 7 0 5 0

B l o c 5 5 3

6 0 B l o c 6 5 0

B l o c 7

V io la t io n d e la r è g l e d u m in im u m

B l o c 0

2 5 4 0

B l o c 2

B l o c 3 B l o c 1 B l o c 5

6 0 B l o c 6 5 0

B l o c 7

V io la t io n d e la r è g le d u m in im u m

R e d i s t r i b u t i o n

F u s i o n d e s d e u x f r è r e s

(27)

Cas de fusion de feuilles et de

redistribution au niveau du parent (suite)

1 0 B l o c 0

2 0

2 5 4 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

4 5 5 0

B l o c 5

6 0 7 0

6 0 B l o c 6 5 0

B l o c 7

V io la t io n d e la r è g le d u m in im u m

R e d i s t r i b u t i o n

B l o c 0

2 5 B l o c 2

B l o c 3 B l o c 1 B l o c 5

5 0 B l o c 6 4 0

B l o c 7

(28)

Cas de fusion en cascade

F u s i o n d e s d e u x f r è r e s 1 0

B l o c 0 2 0

2 5 B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

4 5 5 0

B l o c 5

6 0 7 0

5 0 B l o c 6 4 0

B l o c 7

V io l a t i o n d e l a r è g le d u m i n i m u m

F u s i o n d e s d e u x f r è r e s

1 0 B l o c 0

2 5 3 0

2 5 B l o c 2

4 0 B l o c 1

4 5 5 0

B l o c 5

6 0 7 0

5 0 B l o c 6 4 0

B l o c 7

V i o l a t io n d e la r è g le d u m in im u m

(29)

Cas de fusion en cascade (suite) : réduction de la hauteur

F u s i o n d e s d e u x f r è r e s

1 0 B l o c 0

2 5 3 0

2 5 B l o c 2

4 0 B l o c 1

4 5 5 0

B l o c 5

6 0 7 0

5 0 B l o c 6 4 0

B l o c 7

V io la t io n d e la r è g le d u m in im u m

1 0 B l o c 0

2 5 3 0

4 0 5 0

B l o c 2

4 0 B l o c 1

4 5 5 0

B l o c 5

6 0 7 0

(30)

3.1.3 Arbre-B

4 0

2 5 6 0

3 0 5 0 5 3 7 0

1 0 2 0

B l o c 0 B l o c 3 B l o c 1 B l o c 4

B l o c 2 B l o c 5

B l o c 6

1 0 B l o c 0

2 0

2 5 4 0 6 0

B l o c 2

2 5 B l o c 3

3 0 4 0

B l o c 1

5 0 5 3 6 0

B l o c 4 7 0

Arbre-B

Arbre-B

+

Clés non dupliquées

Ordre <

Hauteur >

(31)

3.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é

(32)

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 »

(33)

3.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

(34)

3.1.6 Sélection par intervalle ou préfixe

 Arbre B

+

recherche de la valeur minimale

parcours des feuilles jusqu ’à la valeur maximale

. . . . . .

. . .

. . . . . . . . .

. . .

(35)

3.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

(36)

3.2Arbre digital (trie)

Chaque niveau : position d'un symbole de la clé vue comme une séquence de symboles s

1

s

2

…s

n

« A C B »

A B C

« A »

A C

« A A »

A B

« A C A »

« B A »

A

« C »

B

« B B »

(37)

3.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)

(38)

3.3.1 Hachage statique

6 0 E r a b l e a r g e n t é 1 5 . 9 9

9 0 P o m m i e r 2 5 . 9 9

8 1 C a t a l p a 2 5 . 9 9

7 0 H e r b e à p u c e 1 0 . 9 9

4 0 E p i n e t t e b l e u e 2 5 . 9 9 1 0 C è d r e e n b o u l e 1 0 . 9 9

2 0 S a p i n 1 2 . 9 9

5 0 C h ê n e 2 2 . 9 9

9 5 G é n é v r i e r 1 5 . 9 9

8 0 P o i r i e r 2 6 . 9 9

0

1

2 c l é = 1 0

h ( 1 0 ) = 1 0 M O D 3 = 1

(39)

3.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

6 0 E r a b l e a r g e n t é 1 5 . 9 9

9 0 P o m m i e r 2 5 . 9 9

8 1 C a t a l p a 2 5 . 9 9

7 0 H e r b e à p u c e 1 0 . 9 9

4 0 E p i n e t t e b l e u e 2 5 . 9 9 1 0 C è d r e e n b o u l e 1 0 . 9 9

4 3 M a g n o l i a 2 8 . 9 9

2 0 S a p i n 1 2 . 9 9

5 0 C h ê n e 2 2 . 9 9

9 5 G é n é v r i e r 1 5 . 9 9

8 0 P o i r i e r 2 6 . 9 9

0

1

2

5 2 P i n 1 8 . 9 9

(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 relativements premiers

h(clé) = (∑ s

i

) MOD TH

s

i

est une sous-séquence des bits de la clé

 Clé non numérique

– représentation binaire vue comme un entier

(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

(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%

(43)

3.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

(44)

3.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

(45)

3.3.2.1Hachage linéaire

 Adaptation de TH

– suite d ’expansions

 Début de dième expansion, d  {0, 1,

…}

TH passera de 2

d

à 2

d+1

– adresse du paquet : h

d

(clé) = b

d-1

, b

d-2

,…, b

1

, b

0

1 0 1 0 0

2

1 1 1 0 1

2

0 0 0 0 1

2

1 1 0 1 0

2

0 1 1 1 1

2

1 1 0 1 1

2

0 0

2

0 1

2

1 0

2

1 1

2

p

d = 2

(46)

Insertion de h(clé) = 10101 2

1 0 1 0 0 2 1 1 1 0 1 2 0 0 0 0 1 2

1 1 0 1 0 2 0 1 1 1 1 2 1 1 0 1 1 2

0 0 2 0 1 2 1 0 2 1 1 2

p

1 1 1 0 1 2 0 0 0 0 1 2

1 1 0 1 0 2 0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 1 2 1 0 2 1 1 2

p 1 0 1 0 1 2

1 0 1 0 0 2 1 0 0 2 D i v i s i o n d u b l o c 0 0 2

Bloc #01

2

déborde

Division du bloc p = #00

2

(pas #01

2

)

p := p+1

FONCTION AdresseLinéaire (clé) DÉBUT

SI hd(clé) >= p Retourner hd(clé)

SINON Retourner hd+1(clé) FINSI

FIN

(47)

Insertion de h(clé) = 10111 2

1 1 1 0 1 2 0 0 0 0 1 2

1 1 0 1 0 2 0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 1 2 1 0 2 1 1 2

p 1 0 1 0 1 2

1 0 1 0 02

1 0 0 2

 Bloc #11

2

déborde

00001 2 11010 2 01111 2 11011 2

000 2 001 2 10 2 11 2

p

10111 2

10100 2

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

10101 2 11101 2 101 2

(48)

Insertion de 11000 2 , 11001 2 et 10110 2

0 0 0 0 1 2 1 1 0 1 0 2 0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 0 1 2 1 0 2 1 1 2

p

1 0 1 1 1 2

1 0 1 0 0 2 1 0 0 2

1 0 1 0 1 2 1 1 1 0 1 2 1 0 1 2

1 1 0 0 0 2 0 0 0 0 1 2 1 1 0 0 1 2

1 1 0 1 0 2 1 0 1 1 0 2

0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 0 1 2 1 0 2 1 1 2

p

1 0 1 1 1 2

1 0 1 0 0 2 1 0 0 2

1 0 1 0 1 2 1 1 1 0 1 2 1 0 1 2

(49)

Insertion de 10010 2

1 1 0 0 0 2 0 0 0 0 1 2 1 1 0 0 1 2

1 1 0 1 0 2 1 0 0 1 0 2

0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 0 1 2 0 1 0 2 1 1 2

p 1 0 1 1 1 2

1 0 1 0 0 2 1 0 0 2

D i v i s i o n d u b l o c 1 0 2 (p = 1 0 2)

1 0 1 0 1 2 1 1 1 0 1 2 1 0 1 2

1 0 1 1 0 2 1 1 0 2 1 1 0 0 0 2 0 0 0 0 1 2

1 1 0 0 1 2

1 1 0 1 0 2 1 0 1 1 0 2

0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 0 1 2 1 0 2 1 1 2

p

1 0 1 1 1 2

1 0 1 0 0 2 1 0 0 2

1 0 1 0 1 2 1 1 1 0 1 2 1 0 1 2

 Bloc #10

2

déborde et est

divisé

(50)

Insertion de 01101 2

1 1 0 0 0 2 0 0 0 0 1 2 1 1 0 0 1 2

1 1 0 1 0 2 1 0 0 1 0 2

0 1 1 1 1 2 1 1 0 1 1 2

0 0 0 2 0 0 1 2 0 1 0 2 1 1 2

p 1 0 1 1 1 2

1 0 1 0 0 2 1 0 0 2

1 0 1 0 1 2 1 1 1 0 1 2 1 0 1 2

1 0 1 1 0 2 1 1 0 2

 Bloc #101

2

déborde

zone d ’expansion !

 Fin de l ’expansion

p := 0

d := d+1 = 3

1 1 0 0 0 2 0 0 0 0 1 2 1 1 0 0 1 2

1 1 0 1 0 2 1 0 0 1 0 2

1 1 0 1 1 2

0 0 0 2 0 0 1 2 0 1 0 2 0 1 1 2

p

1 0 1 0 0 2 1 0 0 2

D i v i s i o n d u b l o c 1 1 2

1 0 1 0 1 2 1 1 1 0 1 2 1 0 1 2

1 0 1 1 0 2 1 1 0 2 0 1 1 0 1 2

0 1 1 1 1 2 1 0 1 1 1 2 1 1 1 2

d = 3

(51)

3.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 contiguité de l ’espace malgré expansions ?

(52)

3.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

(53)

Analogie avec arbre digital

 Répertoire vu comme arbre digital

 Chemin = suffixe

 Pas de lien direct entre suffixe et #bloc

1 0 1 0 0 2 1 1 0 0 0 2

0 1

0 1 0 1 0 2 0 1 1 1 0 2

0 1 1 0 0 0 1 2

1 1 1 0 1 2

B l o c 0

B l o c 1

B l o c 2

(54)

Insertion de h(clé) = 10011 2

Débordement et division du bloc #1

Utilisation d ’un bit de plus

1 0 1 0 0

2

1 1 0 0 0

2

0 1

0 1 0 1 0

2

0 1 1 1 0

2

0 1 1 0 0 0 1

2

1 1 1 0 1

2

B l o c 0

B l o c 1

B l o c 2

1 0 1 0 0

2

1 1 0 0 0

2

0 1

0 1 0 1 0

2

0 1 1 1 0

2

0 1

1 0 0 0 1

2

1 1 1 0 1

2

B l o c 0 B l o c 2 B l o c 1

0 1

1 0 0 1 1

2

B l o c 3

(55)

«Remplacer» l'arbre digital par un répertoire

1 0 1 0 0

2

1 1 0 0 0

2

0 1

0 1 0 1 0

2

0 1 1 1 0

2

0 1 1 0 0 0 1

2

1 1 1 0 1

2

B l o c 0

B l o c 1

B l o c 2

1 0 1 0 0

2

1 1 0 0 0

2

0 1

0 1 0 1 0

2

0 1 1 1 0

2

0 1

1 0 0 0 1

2

1 1 1 0 1

2

B l o c 0 B l o c 2 B l o c 1

0 1

 « Compléter » l ’arbre

(56)

Arbre digital => un répertoire

1 0 1 0 0

2

1 1 0 0 0

2

0 1

0 1 0 1 0

2

0 1 1 1 0

2

0 1

1 0 0 0 1

2

1 1 1 0 1

2

B l o c 0 B l o c 2 B l o c 1

0 1

Bijection chemin <-> indice

1 0 1 0 0

2

1 1 0 0 0

2

2 1 0 0 0 1

2

1 1 1 0 1

2

1 0 1 0 1 0

2

0 1 1 1 0

2

2

2

0 0

2

0 1

2

1 0

2

1 1

2

P r o f o n d e u r g lo b a l e d u r é p e r t o i r e ( d )

P r o f o n d e u r lo c a le d u

b lo c

Sens de

lecture

des

indices

(57)

Insertion de h(clé) = 10011 2 avec répertoire

1 0 1 0 0

2

1 1 0 0 0

2

B l o c 0

2 1 0 0 0 1

2

1 1 1 0 1

2

B l o c 1

1 0 1 0 1 0

2

0 1 1 1 0

2

B l o c 2 2

2

0 0

2

0 1

2

1 0

2

1 1

2

P r o f o n d e u r g lo b a l e d u r é p e r t o ir e ( d )

P r o f o n d e u r lo c a le d u

b lo c

1 0 1 0 0

2

1 1 0 0 0

2

2 1 0 0 0 1

2

1 1 1 0 1

2

2 0 1 0 1 0

2

0 1 1 1 0

2

2

2

0 0

2

0 1

2

1 0

2

1 1

2

P r o f o n d e u r g lo b a l e d u r é p e r t o i r e ( d )

P r o f o n d e u r l o c a l e d u

b l o c

1 0 0 1 1

2

2

(58)

Cas de dédoublement de répertoire : insertion de h(clé) = 10110 2

1 0 1 0 02 1 1 0 0 02 B l o c 0

2 1 0 0 0 1 2

1 1 1 0 1 2 B l o c 1

1 0 1 0 1 02

0 1 1 1 02 B l o c 2 2 2

0 02 0 12 1 02 1 12

P r o f o n d e u r g lo b a l e d u r é p e r t o ir e ( d )

P r o f o n d e u r lo c a le d u

b lo c

1 0 1 0 02 1 1 0 0 02

0 1

0 1 0 1 02 0 1 1 1 02

0 1 1 0 0 0 12

1 1 1 0 12

B l o c 0

B l o c 1 B l o c 2

1 0 1 0 02 1 1 0 0 02

0 1

0 1 1 0 0 0 12

1 1 1 0 12

B l o c 0

B l o c 1

0 1 0 1 02 0 1 1 1 02 1 0 1 1 02

0 1

B l o c 2 B l o c 3

1 0 1 0 02 1 1 0 0 02

0 1

0 1

1 0 0 0 12 1 1 1 0 12 0 1 0 1 02 0 1 1 1 02

1 0 1 1 02

0 1 0 1

0 1

0 1

0 1 1 0 1 0 02

1 1 0 0 02 B l o c 0

2 1 0 0 0 12

1 1 1 0 12 B l o c 1

1 0 1 0 1 02

B l o c 2 3 3

0 0 02 0 0 12 0 1 02 0 1 12 1 0 02 1 0 12 1 1 02 1 1 12

0 1 1 1 02 1 0 1 1 02 B l o c 3 3

Profondeur locale dépasse

profondeur globale

(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

(60)

3.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

(61)

3.3.4 Hachage sur une clé non unique et effet de grappe

 Regroupement des mêmes valeurs de clé

v 1 = v 2  h(v 1 ) = h(v 2 )

6 0 E r a b l e a r g e n t é 1 5 . 9 9

9 0 P o m m i e r 2 5 . 9 9

8 1 C a t a l p a 2 5 . 9 9

7 0 H e r b e à p u c e 1 0 . 9 9

4 0 E p i n e t t e b l e u e 2 5 . 9 9

1 0 C è d r e e n b o u l e 1 0 . 9 9

4 3 M a g n o l i a 2 8 . 9 9

2 0 S a p i n 1 2 . 9 9

5 0 C h ê n e 2 2 . 9 9

9 5 G é n é v r i e r 1 5 . 9 9

8 0 P o i r i e r 2 6 . 9 9

0

1

2

1 5

2 0 1

6

2 0 6 1 5

1 1 5

1

5

5 2 P i n 1 8 . 9 9 1 5

h(t a il l e) = t a il l e M O D 3

t a il l e

(62)

3.3.5 Hachage secondaire

 Hachage sur

– (clé de hachage, IDE)

(63)

3.4 Tableau comparatif des organisations

Critère Sériel Arbre-B+

primaire Arbre-B+

secondaire Hachage

statique Hachage dynamique Sélection par égalité sur

clé unique O(N/ FB)

Cas moyen : O(N/ FB/ 2)

O(log (N)) O(log (N)) Meilleur cas :O(1)

Pire cas : O(N/ FB)

Meilleur cas :O(1)

Pire cas : O(N/ FB) Sélection par égalité sur

clé non unique O(N/ FB) O(log (Card(clé))+

Sel/ FB) Approche par duplication O(log (N)+

Sel)

Meilleur cas : O(Sel/ FB) Pire cas : O(N/ FB)

Meilleur cas : O(Sel/ FB) Pire cas : O(N/ FB) Sélection par intervalle O(N/ FB) O(log (Card(clé))+

Sel/ FB) O(log (N)+

Sel) O(N/ FB) O(N/ FB)

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

:O(1)

Pire cas : O(N/ FB)

Meilleur cas :O(1)

Pire cas : O(N/ FB) Taux d'occupation

mémoire secondaire Maximal

approche 100% En moyennne :

66% (2/ 3) Ajouter à

l'organisation primaire

~80%À ajuster Pire cas non borné

~69% (ln 2) Peut augmenter au prix d'une diminution de performance.

Autres considérations Support difficile de l'accès par IDE et donc des organisations secondaires

Peut y avoir plusieurs index secondaires sur la même table

Distribution des clés par fonction de hachage ? Problème avec tables volatiles

Disponibilité restreinte

Références

Documents relatifs

On cherche l’écart (donc la différence) entre les 26 élèves et les 12 livres déjà là!. On doit enlever les 35 places qui sont

f) Calculer la valeur du courant qui circule dans une résistance de 1,8 MΩ lorsqu’une tension de 62 kV est appliquée à

f) Calculer la valeur du courant qui circule dans une résistance de 1,8 MΩ lorsqu’une tension de 62 kV est appliquée à

Calculer sa hauteur (arrondi au millimètre). Calculer la longueur du coté [BC].. Calculer la longueur du coté [IK]. d) Avec les données de la figure ci-dessous, calculer BD.. Quelle

Trouvez la norme et l’angle d’orientation du vecteur

[r]

Mettre Mettre à Mettre Mettre à à à jour jour jour en jour en en en cascade cascade cascade les cascade les les les champs champs champs champs correspondants

Chapeau souvent conique ou mamelonné (parfois plus plat), souvent vergeté, rimeux, squamuleux (parfois lisse).. Odeur spermatique