Title: Arbres
1Arbres
- Un arbre est une structure de données organisées
de façon hiérarchique, à partir dun nœud
distingué appelé racine. - Très importante en informatique!.
- Arbre de jeux (i.e., Echecs ), système de
fichiers UNIX/Windows, Arbres de tri etc. - Nous étudierons deux types darbres Arbre
Binaires de Recherches et Arbres équilibrés
2Arbres définitions
- Un arbre est un ensemble de Nœuds, reliés par des
Arêtes. Entre deux nœuds il existe toujours un
seul chemin.
noeuds
arêtes
3Arbres définitions
- Les arbres sont enracinés. Une fois la racine
définit tous les nœuds admettent un niveau. - Les arbres ont des noeuds internes et des
feuilles (nœuds externes). Chaque noeud (à
lexception de la racine) a un parent et admet
zéro ou plusieurs fils.
racine
niveau 0
niveau 1
nœuds internes
niveau 2
parent et fils
niveau 3
feuilles
4Arbres binaires
- Un Arbre Binaire est un arbre où chaque nœud
admet au plus 2 fils.
5Arbres Binaires définitions
- Nœuds dun arbre contiennent des clés (mots,
nombres, etc) - Arbre Binaire parfait les feuilles sont toutes
situées dans les deux derniers niveaux. Les
feuilles du dernier niveau sont toutes à gauche.
6Arbres Binaires représentation par tableaux
- Un arbre binaire complet peut être représenté par
un tableau A avec un accès en O(1) à chaque
noeud - Mémoriser les neouds séquentiellement de la
racine aux feuilles et de gauche vers la droite. - Fils gauche de Ai est en A2i
- Fils droit de Ai est en A2i 1
- Parent de Ai est en Ai/2
7Arbres Binaires représentation par tableau
1
2
3
4
5
6
7
9
10
8
11
1 2 3 4 5 6 7 8 9
10 11
14 10 16 8 12 15 18 7 9
11 13
tab A
8Arbres Binaires représentation par pointeurs
- typedef struct n
- int clé
- struct n fGauche, fDroit
- nœud
- typedef nœud Arbre
9Parcours inOrdre
- InOrdre est décrit réursivement
- Visiter le sous-arbre gauche en InOrdre
- Visiter la racine
- Visiter le sous-arbre droit en InOrdre
10Parcours préOrdre
- PréOrdre est décrit réursivement
- Visiter la racine
- Visiter le sous-arbre gauche en PréOrdre
- Visiter le sous-arbre droit en PréOrdre
11Parcours non-récursif
PréOrdre itératif en utilisant une Pile. Pile
S empiler racine dans S répéter jusquà S? v
dépiler S si v ltgt nil visiter v empiler le
fils droit de v dans S empiler le fils gauche de
v dans S
12Parcours postOrdre
- PostOrdre est décrit réursivement
- Visiter le sous-arbre gauche en PostOrdre
- Visiter le sous-arbre droit en PostOrdre
- Visiter la racine
13Parcours levelOrdre
- LevelOrdre visite les noeuds niveau par niveau
depuis la racine - Peut être décrit facilement en utilisant une
File (Comment??) - Parcours appelé Breadth First Search
(parcours en largeur) dans les graphes
14Arbre Binaire de Recherche
- Un Arbre Binaire de Recherche (ABR) est un arbre
binaire avec les propriétés suivantes - La clé associée à un noeud est supérieur aux
clés des nœuds de son sous-arbre gauche - La clé associée à un noeud est inférieur aux
clés des nœuds de son sous-arbre droit
15Arbre Binaire de Recherche Exemples
racine
racine
C
A
D
racine
16Arbre Binaire de Recherche
- ABR est un arbre avec la propriété suivante
- Clé.fGauche lt Clé.parent lt Clé.fDroit
- NOTER! Le parcours InOrdre visite les clés
dans lordre croissant.
void inOrdre(Arbre racine)
inOrdre(racine-gtfGauche) print(racine-gtkey)
inOrdre(racine-gtfDroit)
17ABR InOrdre
Exemple
InOrdre visites
(8) (10) (11) (14) (15) (16) (18)
18ABR Rechercher un élément
- Soit un ABR
- Problème rechercher un noeud avec une clé x ?
19ABR Rechercher un élément
- rechercher(racine, x)
- comparer x à la clé de racine
- - si x clé return
- - si x lt clé gt chercher dans G
- - si x gt clé gt chercher dans D
- chercher de la même manière dans G ou D
-
x8 (oui) x17 (non)
20ABR Rechercher un élément
- bool searchABR(Arbre racine typeCle clé)
- if (racineNULL) return false
- if (racine-gtcléclé)
- return true
- else if (key lt racine-gtclé)
- return searchABR(racine-gtfGauche, clé)
- else
- return searchABR(racine-gtfDroit, clé)
-
Donner une version itérative ?
21ABR Ajout dun élément
- Comment ajouter une clé?
- La même procédure que searchABR sapplique
Déterminer la position dinsertion par searchABR.
Ajouter la nouvelle clé si la recherche échoue.
10
8
ajout 4?
4
3
9
5
2
22Construction dun ABR
Exemple ajouter C A B L M
(dans lordre!)
2) ajouter A
3) ajouter B
1) Ajouter C
4) Ajouter L
5) Ajouter M
23Construction dun ABR
- LABR est-il unique pour une séquence de lettres
A B C L M ? - NON! différentes séquences donnent différents
ABR
Ajout de C A B L M
Ajout de A B C L M
24Trier avec un ABR
- Soit un ABR, peut-on afficher les clés dans
lordre? - Visiter lABR avec un parcours InOrdre
- - visiter le sous-arbre gauche
- - afficher racine
- - visiter le sous-arbre droit
- Comment trouver le minimum?
- Comment trouver le maximum?
Example
InOrdre affichage
A B C L M
25ABR supprimer un élément
- Pour supprimer un nœud contenant x,
- rechercher x, une fois trouvé appliquer lun des
trois cas suivants - CAS A x est une feuille
p
p
q
q
x
r
r
supprimer x
On obtient un ABR
26ABR supprimer un élément
- Cas B x est un nœud interne avec un seul
- sous-arbre
On obtient un ABR
27ABR supprimer un élément
- Cas C x est un nœud interne avec 2 sous-arbres
r
x
suppr x
q
u
W
Z
t s
28ABR supprimer un élément
- Cas C suite ou encore comme suit
- q lt x lt u
- q est inférieur au plus petit
- élément de Z
- r est supérieur au plus grand
- élément de W
r
q
t
u
Z
Dautres façon ?
s
29ABR Compléxité de rechercher
- Quelle est la compléxité de searchABR ?
- Dépend de
- la clé x
- des autres données
- De la forme de larbre
Analyse de la compléxité On est intéréssé par
la compléxité dans le meilleur cas, pire cas
et en moyenne
30ABR Compléxité de rechercher
niveau 0
niveau 1
niveau 2
niveau 3
(h 3)
- hauteur dun ABR niveau max
- hauteur dun noeud
- h(x) 0 si x est la racine
- h(x) 1 h(y), y pere(x)
- hauteur dun ABR B h(B) maxh(x), x nœud de
B
31ABR Compléxité de rechercher
Si tout les nœuds de larbre existent ABR
plein
Si tout les nœuds existent sauf ceux du dernier
niveau niveau-min ABR
32ABR Compléxité de rechercher
Théorème Un ABR plein (complet) de hauteur h a
2 - 1 noeuds
h1
Preuve
Par induction
Cas de base un arbre de hauteur 0 a 1 nœud
(racine) Hypothèse inductive Supposant quun
ABR de hauteur h a
2 - 1 noeuds
h1
33ABR Compléxité de rechercher
Etape dinduction Connecter 2 ABR de hauteur h
pour construire un ABR de hauteur h1. On a
besoin dajouter un noeud supplémentaire
racine
Par hypothèse inductive le nouveau nombre de
noeuds est (2 - 1) (2 -1) 1 2 - 1
CQFD! Ou encore n 122 2 - 1
h1
h1
h2
h
h1
34ABR Compléxité de rechercher
Lemme 1 pour un ABR ayant n nœud et de hauteur
h log2 n lt h lt n -1
Remarque Un ABR parfait avec n noeuds a pour
hauteur h log
n car 2 lt n lt 2 - 1
2
h
h1
35ABR Compléxité de rechercher
- Conséquence pour un ABR plein avec N noeuds
la compléxité de searchABR -
- meilleur cas O(1)
- Pire cas O(log N)
- en moyenne ???
-
36ABR Compléxité de rechercher
- compléxité en moyenne pour une recherche dans
- un ABR plein est une fonction logarithmique
du nombre - de nœuds de larbre
Complexité en moyenne pour des ABR quelconque est
approximativement 39 plus chère que la recherche
dans un ABR plein pour le même nombres de nœuds
37ABR compléxité de rechercher
- Maintenant que nous connaissons la compléxité de
searchABR que peut-on dire des autres opérations?
Insertion O(log N) Suppression
O(log N) Trouver le Min O(log
N) Trouver le Max O(log N) Tri ABR
O(N log N)
Idée ABR tri (Construction de lABR N
insertions)
(Parcourir ABR)
38ABR Compléxité de rechercher
- En résumé, il est nécessaire davoir un ABR
plein ou niveau-min ABR - ? garder un arbre le plus équilibré possible
- à tout moment (Arbre AVL)
39Arbre AVL
- Arbre AVL (Adelson-Velskii et Landis)
- Le meilleur ABR maintenant à tout moment un
arbre raisonnablement équilibré. - Idée si linsertion ou la suppression provoque
un désiquilibre de larbre, rétablir léquilibre. - Toutes les opérations insertion, suppression,
sur un arbre AVL avec N noeuds en O(log N) (en
moyenne et dans le pire cas!)
40AVL Trees
Arbre AVL (propriété) cest un ABR tq. la
différence des hauteurs du sous-arbre gauche et
droit de la racine est dau plus 1 et les
sous-arbres gauche et droit sont des AVL
Exemple
41Arbres AVL
Pour plus lisibilité , remplaçer les clés
associées aux nœuds en utilisant /, \, -, //
et \\ pour représenter le facteur déquilibre
dun nœud
/ léger déséquilibre à gauche \ léger
déséquilibre à droite - équilibré \\
déséquilibre droit // déséquilibre gauche
h(G) 1 h(D)
h(D) 1 h(G)
h(D) h(G)
h(D) gt 1 h(G)
h(G) gt 1 h(D)
42Arbres AVL
Exemples
Les clés ne sont pas montré. On suppose quelles
satisfassent la propriété ABR
43Arbres AVL
Un arbre AVL nest ni un arbre plein ni un arbre
niveau-min. Insertions et suppression sont
éffectuées de la même manière que pour les ABR.
Après chaque opération, on a besion de
vérifier la propriété dAVL!. Car larbre peut ne
plus lêtre!
h diffère de 2!
nouveau noeuds
44Arbres AVL
Après une insertion, si larbre est un AVL alors
on ne fait rien. Comme sur lexemple ci-dessous
/
\
-
-
-
/
-
-
/
-
/
\
\
/
-
\
-
-
-
-
/
-
-
-
-
45Arbres AVL
Quand une insertion provoque le déséquilibre de
larbre?
46Arbres AVL insertion dun noeud
Larbre devient déséquilibré si lélément ajouté
est le descendant gauche (droit) dun nœud avec
un léger déséquilibre gauche (droit). Alors la
hauteur de ce sous-arbre augmente. Dans les
figure suivantes, on note U nouveaux
nœuds pouvant déséquilibrer larbre B
nouveaux laissant larbre équilibré
47Arbres AVL Insertion
\
-
/
/
-
-
\
-
-
-
-
-
-
B
B
-
-
-
-
B
B
B
B
U
U
U
U
U
U
U
U
U
U
U
U
48Arbres AVL Insertion
Noter que linsertion dun nœud peut provoquer
des déséquilibre sur plusieurs nœuds.
Déséquilibre par insertion
//
//
-
-
-
-
/
-
/
-
Le plus jeune ancêstre du nœud inséré où la
propriété AVL est violée
nouveau noeud
49Arbres AVL Insertion
Supposons que le sous-arbre le plus haut est
celui de gauche et quun nœud est inséré pour
augmenter la hauteur de ce sous-arbre. Larbre
obtenu est déséquilibré Rétablir un arbre AVL en
utilisant des rotations
gt Soit A le plus jeune ancêtre où
apparaît le déséquilibre
A
/
Dans larbre AVL, avant linsertion, T1, T2 et T3
ont une hauteur h
B
-
T
h
3
Le même raisonnement peut être utilisé si
l arbre le plus haut est celui de droite
T
h
h
T
1
2
50Arbres AVL Insertion
Cas I un nouveau nœud est inséré dans T1
Rééquilibrer par rotation droite P lt B lt q lt A lt
r gt gt propriété ABR maintenue!
Arbre Original
B
-
A
p
-
T
r
q
1
h1
T
h
h
T
3
2
51Arbres AVL Insertion
Cas I rotation Droite ou rotation Gauche
void RD(Arbre a) Arbre aux (a)-gtfg
(a)-gtfg aux-gtfd aux-gtfd a a aux
void RG(Arbre a) Arbre aux (a)-gtfd
(a)-gtfd aux-gtfg aux-gtfg a a aux
52Arbres AVL Insertion
Cas II nouveau noeud inséré dans T2
On a 3 cas a considérer 1- nouveau nœud en
C 2- nouveau nœud ajouté à T2a 3- nouveau
nœud ajouté à T2b
Les 3 cas sont similaires. On considérera le cas
2.
53Arbres AVL Insertion
Cas II - T2a Rééquilibrage de larbre AVL avec
une double rotation (gauche sur B et ensuite
droite sur A)
Cas II - T2b Insertion en T2b gt rotation
droite sur B et ensuite gauche sur A
54Arbres AVL Insertion
Cas II - T2a
Rotation gauche sur B
Rotation droite sur A
La propriété ABR est maintenue!
55Arbres AVL Insertion
Cas II nouveau noeud inséré dans T2
Cas II - T2a
Cas II - T2b
void RGD(Arbre a) RG( ((a)-gtfg) )
RD(a)
void RDG(Arbre a) RD( ((a)-gtfd) )
RG(a)
56Arbres AVL Insertion
- Nous avons défini un arbre équilibré et nous
avons aussi montré comment insérer dans larbre
en utilisant les algorithmes ABR de manière à
maintenir léquilibre (propriétés AVL) et la
propriété ABR.
57Arbre AVL Insertion (Algorithme)
- Propriété Toute adjonction dans un AVL
nécessite au plus une rotation pour le
rééquilibrer.
T
- Supposons que x soit ajouté en tant que feuille
dans T. - C est uniquement sur le chemin de la racine à x
que vont intervenir des rotations éventuelles. - On considère sur ce chemin le nœud le plus bas
dont le déséquilibre avant adjonction est non
nul, et l on note A le sous arbre enraciné en ce
nœud - De par la nature des rotations, la hauteur de A
n est pas modifiée par l adjonction de x (y
compris en prenant compte une rotation) - gt Dans l AVL résultant de l adjonction de x,
le père de A et tous ses ascendants ont
exactement le déséquilibre qu ils avaient avant
l adjonction de x, il n y a donc jamais besoin
d effectuer de rotation au-dessus de A, ni
de mise à jour du déséquilibre.
A
?1
Y
58Arbre AVL Insertion (Algorithme)
- Algorithme d adjonction dans un AVL
- Pour conserver la valeur du déséquilibre en
chaque nœud de l arbre, on utilisera les
déclarations suivantes. - typedef struct n
- int val
- int deseq
- struct n fg, fd
- nœud
- typedef nœud AVL
- Principe
- Lors de la descente dans l arbre à la recherche
de la place où l on doit ajouter x, on mémorise
le dernier sous-arbre A pour lequel le
déséquilibre est ?1. - Après avoir ajouté x à la feuille Y, c est
uniquement sur le chemin de A à Y qu il est
nécessaire de modifier les valeurs du
déséquilibre. Il faut ensuite faire le cas
échéant, un rééquilibrage en A.
59Arbre AVL Insertion (Algorithme)
- Void ajouterAVL (AVL t, int x)
- AVL y, a, p, aa, pp
- / création du nœud à ajouter /
- y nouveau(nœud) y-gtval x y-gtdeseq
0y-gtfgy-gtfdNULL - If (tNULL) ty
- else
- at aaNULL pt ppNULL
- /aa et pp sont les pères de a et p/
- while(p!NULL)/descente mémorisation du
dernier nœud dont le déséquilibre est ?1/ - if(p-gtdeseqltgt0)apaapp
- ppp
- if(xltp-gtval) pp-gtfg else pp-gtfd
-
- /adjonction/
- if (xltpp-gtval) pp-gtfgy else pp-gtfdy
-
1
2
60Arbre AVL Insertion (Algorithme)
- /modification du déséquilibre sur le chemin de
A à Y/ - pa
- while (pltgty)
- if (xltp-gtval)p-gtdeseqp-gtdeseq1pp-gtfg
- else p-gtdeseqp-gtdeseq-1pp-gtfd
- / rééquilbrage/
- switch (a-gtdeseq)
- case 0
- case 1
- case -1 return
- case 2 switch (a-gtfg-gtdeseq)
- case 1 RD (a) a-gtdeseq0a-gtfd-gtdeseq0br
eak - case -1
- RGD(a)
- switch (a-gtdeseq)
- case 1 a-gtfg-gtdeseq0
a-gtfd-gtdeseq-1break - case -1 a-gtfg-gtdeseq1
a-gtfd-gtdeseq0break - case 0 a-gtfg-gtdeseq0
a-gtfd-gtdeseq0break /ay/ -
1
2
61Arbre AVL Insertion (Algorithme)
- If(aaNULL)
- ta
- else if (a-gtvalltaa-gtval)
- aa-gtfga
- else aa-gtfda
-
-
1
2
62Arbre AVL suppression
- La réorganisation de l arbre peut nécessiter
plusieurs rotations successives.
On veut supprimer 26, on le remplace par 24,
cette suppr diminue la hauteur du sous-arbre de
racine 22 et le sous-arbre de racine 16 est alors
trop déséquilibré. On le réorganise par une
rotation droite, mais cela accentue le
déséquilibre du niveau immédiatement supérieur et
il faut faire une rotation droite gauche en 24.
Les rotations peuvent ainsi remonter en cascade
jusqu à la racine de l arbre. gt 1.5 log2 n
rotations. gt la suppression est en O(log2 n)
63Arbre AVL suppression
- L arbre n est plus un AVL
-1
T
24
2
1
16
50
1
0
40
22
1
E
10
0
C
D
0
20
23
A
B
On distingue différents cas
64Arbre AVL suppression
T
T
1
0
A
B
A
B
- Rien à faire, car la hauteur de larbre na pas
été modifié - Avec -1 même situation
- Ici la hauteur du sous-arbre va évoluer(-1)
localement aucun déséquilibre n est apparu, au
contraire, le sous arbre devient équilibré. Des
déséquilibre peuvent apparaître plus haut!
65Arbre AVL suppression
T
2
A
B
Ici la hauteur du sous-arbre na pas évolué mais
le déséquilibre est passé à 2 il faut
intervenir on distingue la différents cas de
figure qui sont liées au fils gauche
66Arbre AVL suppression
T
p
T
RD(T)
q
q
-1
A
2
1
p
C
B
C
0
A
B
- Il y a arrêt du traitement ici, puisque
- le sous-arbre est équilibré
- sa hauteur na pas été modifiée (il est donc
inutile de propager le résultat vers le haut)
67Arbre AVL suppression
T
p
T
RD(T)
q
q
0
A
2
0
p
C
B
C
-1
A
B
Le sous-arbre est rééquilibré, mais la hauteur a
été modifié il faut remonter l information au
dessus de T pour procéder éventuellement à des
rééquilibrage gt appliquer le même principe que
celui qui vient d être appliqué en considérant
I,II et les différents cas de III.
68Arbre AVL suppression
T
RD(T)
T
r
q
2
0
r
p
p
D
-1,0
-1
1,0
q
D
C
B
A
A
-1,0,1
C
B
Le sous-arbre est rééquilibré, mais sa hauteur a
diminué de 1 gt remonté de l information comme
en III.2
69Arbre AVL suppression
- Principe de l algorithme
- Réorganisation de l arbre de la feuille
supprimée jusqu à la racine de l arbre avec
éventuellement des rotations (on sarrête pour
les cas I ou III.1) - recalcul des déséquilibres occasionnés par la
suppression et éventuelle exécutions des
rotations nécessaires du fait de nouveaux
déséquilibres - la propagation continue tant que l arbre demeure
déséquilibré lors de la remontée - Au pire cas le nombre de rotation est log2 n
70Arbres AVL analyse de compléxité
- Soit T(n) la compléxité de linsertion dun nœud
dans un arbre AVL. -
- Quelle est la meilleur structure darbre AVL
possible? - Arbre plein ? T(n) O(log n)
71Arbres AVL analyse de compléxité
Le pire cas darbres AVL quon peut rencontrer
sont les AVL ayant la partie gauche (ou droite)
en léger déséquilibre pour tous les nœuds.
72Arbres AVL analyse de compléxité
- Quelle est la hauteur maximale dun AVL avec N
noeuds? - Quelle est le plus petit nombre Nh de noeuds dun
AVL avec une hauteur h
Nh 1 Nh-1 Nh-2
Chacun est le plus petit arbre avec les tailles
respectives
73Arbres AVL analyse de compléxité
- La hauteur dun arbre AVL avec n nœuds est au
plus égale à 1.44 log2 (n2). - La hauteur dun arbre binaire avec n noeuds est
au moins égale à log2 (n1). - log2 (n1) lt height lt 1.44 log2 (n2)
74Arbres AVL analyse de compléxité
- Soit Nh min noeuds dun arbre AVL avec une
hauteur h. - N0 0.
- N1 1.
- Nh, h gt 1
- G et D sont des arbres AVL.
- La hauteur de lun est h-1.
- La hauteur de lautre est h-2.
- Le sous arbre ayant une hauteur h-1 à Nh-1
noeuds. - Le sous arbre ayant h-2 à Nh-2 noeuds.
- alors, Nh Nh-1 Nh-2 1.
75Arbres AVL analyse de compléxité
- Séquence de nombre de Fibonacci
- F0 0, F1 1.
- Fi Fi-1 Fi-2 , i gt 1.
- N0 0, N1 1.
- Nh Nh-1 Nh-2 1, h gt 1.
- Nh Fh2 1.
- Fi fi/ .
-
- f (1 sqrt(5))/2.
5
i
ù
é
5
1
1
F
ú
ê
i
2
5
û
ë
76Arbres AVL analyse de compléxité
h
3
ù
é
5
1
1
N
ú
ê
h
2
5
û
ë
Þ
N
h
log
44
.
1
h
2
Þ
N
log
44
.
1
h
2
Þ
77Arbres 2.3.4
- Pour éviter les cas d arbres de recherche
dégénérés, on peut aussi faire varier le nombre
de directions de recherche à partir d un nœud. - Définition générale Un arbre de recherche est
un arbre général étiqueté dont chaque nœud
contient un k-uplet déléments distincts et
ordonnées (k1,2,3). Un nœud contenant les
éléments x1lt x2 ltxk a k1 sous-arbres, tels que
- tous les éléments du premier sous-arbre sont
inférieurs ou égaux à x1 - tous les éléments du ième sous-arbre (i2,,k)
sont strictement supérieurs à xi-1 et inférieurs
ou égaux à xi - tous les éléments du (k1)ième sous-arbre sont
strictement supérieurs à xk
78Arbres 2.3.4
15
4 10 13
30 40
50 40
14
11 12
20 28
35
15
4 10 13
1 3
2-noeud
4-noeud
3-noeud
Définition Un arbre 2.3.4 est un arbre de
recherche dont les nœuds sont de trois types,
2-nœud, 3-nœud, 4-nœud, et dont toutes les
feuilles sont situées au même niveau
79Arbres 2.3.4
- la hauteur reste logarithmique par rapport au
nombre de nœuds - ? algos de rééquilibrages qui maintiennent un
arbre 2.3.4 après ajout ou suppr en effectuant
une suite de rotations sur chemin de la racine à
une feuille - O(log n) pour recherche, ajout et suppression
- implantation efficace sous la forme darbres
binaires de recherches bicolores
80Arbres 2.3.4
- Propriété La hauteur h(n) d un arbre 2.3.4
contenant n élément est en ?(log n). Plus
précisément, on a lencadrement suivant - log4(n1)? h(n)1 ? log2(n1)
- Preuve on considère les arbres 2.3.4 extrémaux
- contenant le moins déléments (que des
2-nœuds) - puisque toutes les feuilles sont au même
niveau,le nombre de nœuds 20 21... 2h
2h1-1 - contenant le plus déléments (que des 4-nœuds)
- 40 41... 4h 4h1-1
- on en déduit qu un arbre 2.3.4 contenant n nœuds
et de hauteur h(n) 2h(n)1-1 lt n lt 4h(n)1-1 - doù lon tire l encadrement de la hauteur
81Arbres 2.3.4
- Algorithme de recherche (principe)
- Soit M un arbre 2.3.4, Soit x un élément à
rechercher dans M. - x est comparé avec le(s) éléments x1,.., xi
(i?1..3) de la racine de M - si ? j? 1..i tq. X xj alors trouvé
- si x ?x1 gt recherche dans le premier sous-arbre
de M - si xj ltxltxj1 (j? 1..i-1 ) gt recherche dans la
(j1)ième sous-arbre de M - si x gtxj gt recherche dans le dernier sous-arbre
de M - si la recherche se termine sur une feuille qui ne
contient pas x gt x ?M - Exercice Implanter cet algorithme,
- on utilisera les déclarations suivantes
- typedef struct n
- int n / nombre de pointeurs /
- struct n sArbre4 / sous arbres /
- int elements3 / les éléments /
- nœud
- typedef nœud Arbre234
- Refaire le même exercice en utilisant le type
union
82Arbres 2.3.4 Recherche
- typedef struct n
- int n / nombre de pointeurs /
- struct n sArbre / sous arbres /
- int elements / les éléments /
- nœud
- typedef nœud Arbre234
- void ELEMENT (int x Arbre234 A )
-
- int pos
- if (A NULL )
- return 0
- else
- pos position (x, A)
- if ( (x A-gtelements pos ) )
- return 1
- else
- return ELEMENT (x, A-gtsArbre pos )
-
-
83Arbres 2.3.4
- Adjonction d un élément
- Ladjonction d un nouvel élément ne pose
problème que si la feuille qui doit le recevoir
contient déjà 3 éléments. - Dans ce cas, il faut ajouter un nouveau nœud à
l arbre et le réorganiser. - Adjonction avec éclatement en remonté
- On ajoute successivement 4, 35, 10, 13, 3, 30,
15, 12, 7, 40, 20, 11, 6 -
- Ce nœud ne peut plus contenir de nouveau
éléments. - On remarque que du point de vue recherche, M est
équivalent à l arbre binaire - Cet arbre est un arbre 2.3.4, on peut y ajouter
de nouveaux éléments - 13, puis 3, puis 30
84Arbres 2.3.4
- L ajout de 15 provoque l éclatement de la
feuille f en deux 2-nœuds contenant
respectivement le plus petit et le plus grand
élément de f. L élément médian 30 doit être
ajouté au nœud père de f, il y a alors de la
place pour 15 dans le même nœud que 13 qui
devient alors un 3-noeud -
M
M
M
10
10
10
f
13 35
13 35
13 30 35
4
3 4
3 4
M
M
10 30
10 30
13 15
3 4
35
3 4 7
12 13 15
35 40
85Arbres 2.3.4
- L ajout de 20 entraîne un éclatement de la
feuille contenant 12, 13 et 15 -
- L adjonction de 6 provoque l éclatement de la
feuille f, la remonté de 4 fait éclater à son
tour la racine de l arbre en 2-noeuds - gt les éclatements peuvent remonter en cascade
sur toute la hauteur de l arbre.
M
M
10 13 30
10 13 30
f
3 4 7
15 20
35 40
12
3 4 7
15 20
35 40
11 12
M
13
30
4 10
15 20
35 40
11 12
3
6 7
86Arbres 2.3.4
- Pour éviter des éclatements de bas en haut, il
suffit de travailler sur des arbres qui ne
contiennent jamais deux 4-nœuds qui se suivent.
Dans ce cas toute adjonction provoque au plus un
éclatement. - Ceci peut être réalisé en éclatant les 4-nœuds à
la descente Lors de la recherche de la place de
l élément à ajouter, on parcourt un chemin à
partir de la racine jusqu à une feuille seuls
les 4-nœuds de ce chemin risquent d éclater
suite à l adjonction. - On prévient ce risque en les faisant éclater, au
fur et à mesure de leur rencontre avant de
réaliser l adjonction. (Ceci provoque parfois
des éclatements inutiles)
87Une représentation des arbres 2.3.4 les arbres
bicolores
- Définition Un arbre bicolore est un arbre
binaire de recherche dont les nœuds portent une
information supplémentaire (rouge et noir). - Les 4-nœuds et 3-nœuds sont transformé en arbre
binaire de recherche. - Double trait si le lien appartient à un nœud de
l arbre 2.3.4 (lie des nœuds jumeaux) - On peut aussi représenter par un double cercle
les nœuds vers lesquels pointent des doubles
traits
b
b
a b c
a
c
a
c
p0
p1
p2
p3
p0
p1
p2
p3
p0
p1
p2
p3
b
b
a
c
a
c
p0
p1
p2
p3
p0
p1
p2
p3
88Une représentation des arbres 2.3.4 les arbres
bicolores
- Pour les 3-nœuds, il existe 2 transformations
possibles - Les deux représentations pourront exister à la
suite de rotations - La hauteur de larbre bicolore obtenu par ces
transformations est au plus 2la hauteur de
larbre 2.3.4 initial, augmentée de 1. - gt Tout arbre bicolore associé à un arbre 2.3.4
contenant n éléments a une hauteur de lordre
O(log n)
a
a
a
Penché à droite
a b
b
b
p0
b
p0
p0
p1
p2
p0
p1
p2
p1
p2
p1
p2
b
b
b
Penché à gauche
a b
a
p2
a
p2
a
p0
p1
p2
p0
p1
p2
p0
p1
p0
p1
89Arbres 2.3.4 /Arbres bicolores
12 45
20 25 40
8
50 60
43
15
22 24
30 35 38
63 65
48
55 59
3 5
10
Représentation en arbre bicolore ?
45
12
50
25
60
8
48
20
40
3
10
59
63
5
15
24
35
43
65
55
22
30
38
90Arbres 2.3.4 /Arbres bicolores
- On simule l adjonction avec éclatement à la
descente dans un arbre 2.3.4 - Eclater un 4-nœud revient à inverser les couleurs
des éléments de ce nœud - Ceci peut cependant faire apparaître deux nœuds
rouges consécutifs, ce qui doit être évité si
l on veut conserver la propriété de hauteur
logarithmique - gt utilisation de transformations locales
rotations
b
b
a
c
a
c
p0
p1
p2
p3
p0
p1
p2
p3
91Arbres 2.3.4 /Arbres bicolores
- Plusieurs situations possibles
- 1) Le 4-nœud à éclater est attaché à un 2-nœud
- gt une simple inversion de couleur suffit
a
a
a
a ?
?
? ? ?
?
?
?
?
?
?
?
92Arbres 2.3.4 /Arbres bicolores
- 2) Le 4-nœud , E, à éclater est attaché à un
3-nœud - 3 cas lorsque le 3-nœud est penché à droite
- 3 cas lorsque le 3-nœud est penché à gauche
- a) E est premier fils du 3-nœud
- gt on inverse les couleurs des éléments du
4-noeud
a b
a
a
? a b
b
?
?
?
b
? ? ?
?
?
?
?
?
93Arbres 2.3.4 /Arbres bicolores
- b) E est second fils du 3-nœud
- gt une inversion de couleurs entraîne une
mauvaise disposition des éléments jumeaux a,
? et b - gt rotation droite-gauche au niveau du nœud
contenant a
RDG
?
a
a
a b
b
a
b
b
? ? ?
?
?
?
?
?
?
?
?
a ? b
?
?
94Arbres 2.3.4 /Arbres bicolores
- c) E est troisième fils du 3-nœud
-
- gt rotation gauche au niveau du nœud
contenant a
b
RG
a
a b
a
b
a
?
b
? ? ?
?
?
?
?
?
?
?
?
a b ?
95Arbres 2.3.4 /Arbres bicolores
- Algorithme dadjonction
- Descendre à partir de la racine à la recherche de
la feuille où insérer lélément - Sur le chemin, lorsquun nœud A a ses deux fils
rouges on inverse les couleurs de A et de ses
fils si de plus le père de A est lui aussi
rouge, on fait une rotation au niveau du
grand-père de A avant de poursuivre la descente. - Ladjonction d un nouvel élément se fait
toujours dans une feuille qui devient un nœud
rouge, puisque le nouvel élément est ajouté en
tant que jumeau dans le cas où le père du nœud
ajouté est rouge, mais n a pas de frère rouge,
il faut effectuer une rotation comme en b)
96Arbres 2.3.4 /Arbres bicolores
- Exercice
- Écrire lalgorithme dadjonction en utilisant le
type suivant - typedef enumblanc, rouge couleur
- typedef struct bn
- couleur coul
- int val
- struct bn fg, fd
- Bnoeud
- typedef Bnoeud Bicolore
97Recherche externe
- Grandes collections d éléments stockés sur
mémoire secondaire paginée. - Le nombre d accès à la mémoire secondaire est
prépondérant - gt minimiser le nombre de transferts de pages
- B-Arbres
- généralisation des arbres 2.3.4
98Recherche externe B-arbres
- Un B-arbre d ordre m est
- un arbre binaire de recherche formé de nœuds qui
peuvent chacun contenir jusquà 2m éléments - chaque nœud est dans une page différente du
support externe et - la complexité des algos de recherche, adjonction
et suppression d un élément parmi n, compté en
nombre d accès à la mémoire secondaire, est en
O(logm n)
99B-arbres
- Un B-arbre d ordre m est un arbre binaire de
recherche dont - toutes les feuilles sont située au même niveau
- tous les nœuds, sauf la racine, sont des k-nœuds
avec k ? m1..2m1 - la racine est un k-nœud avec k ?2..2m1
100B-arbres
25
30 40
6 10 20
41 42 44 46
32 35 38
13 14 15 18
22 24
1 2 3 4
26 27 28
7 8
Exemple de B-arbre dordre 2
101B-arbres
- Dans la réalité m est choisi de manière à ce
qu un nœud corresponde au contenu d une page. - Exemple
- m250 gt un arbre de hauteur 2 peut contenir plus
de 125 millions d éléments - 500 éléments à la racine
- 500 501 (environ 25104) éléments dans les nœuds
de profondeur 1 - 5012 500 (environ 125106) éléments dans les
nœuds de profondeur 2 - gt Dans les B-arbres, les niveaux les plus bas de
l arbre contiennent la quasi-totalité des
éléments - Algorithmes de recherche, d adjonction et de
suppression - gt généralisation des algorithmes pour les arbres
2.3.4
102Recherche externe Hachage dynamique
- Le tableau de hachage est remplacé par un index
en mémoire centrale - Cet index est un arbre binaire de recherche dont
les feuilles contiennent des adresses en mémoire
secondaire - Exemple
- Adjonction successive par hachage dynamique des
éléments E, X, T, F, R, N, C, L, S, G, B - valeurs de hachage
- h(E)00101, h(X) 11000, h(T) 10100,
h(F)00110,h(R)10010, h(N)01110, h(C)00011,
h(L)01100, h(S)10011, h(G)00111, h(B)00010 -
103Recherche externe Hachage dynamique
- Exemple (suite)
- En supposant que les pages en mémoire secondaire
peuvent contenir 4 éléments. -
1
0
1
0
R
Index en mémoire centrale
N,C
E X T F
E F
X T R
E F N C
X T R
Pages en mémoire secondaire
1
0
1
0
1
0
L
S,G
B
0
1
0
1
0
1
0
1
X T R
X T R S
X T R S
N L
E F C
N L
E F C G
N L
C B
E F G