Post on 20-Jul-2015
CHAPITRE V:
Universit Saad Dahlab de Blida
Facult des Sciences
Dpartement dInformatique
Licence dInformatique
Semestre 4 (2me anne)
Algorithmique et Structures de Donnes
CHAPITRE V:
STRUCTURES HIRARCHIQUES
Mme AROUSSI
2014-2015
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
Introduction
Dfinitions et Terminologies
Topologie
PLAN DU CHAPITRE V
Topologie
Les Arbres Binaires
Les Arbres Binaires de Recherche (ABR)
Les Arbres AVL
Les TAS
Les Arbres m-aire
2
Dans les tableaux, nous avons :
Un accs direct par indice (rapide)
Linsertion et la suppression ncessitent des dcalages
Dans les Listes Linaires Chanes, nous avons :
Un accs squentiel lent
INTRODUCTION
3
Un accs squentiel lent
Linsertion et la suppression se font uniquement par modification de
chanage
Les arbres reprsentent un compromis entre les deux :
Un accs relativement rapide un lment partir de sa cl
Linsertion et la suppression non coteuses
De plus, les arbres sont des structures de donnes
fondamentales en informatique, trs utiliss dans tous les
domaines, parce quils sont bien adapts la
reprsentation naturelle dinformations homognes
INTRODUCTION
4
reprsentation naturelle dinformations homognes
organises, et dune grande commodit et rapidit de
manipulation.
Leur usage est multiple, car il capte lide de hirarchie;
titre dexemples, nous pouvons citer:
Dcoupage dun livre en parties, chapitres, sections,
paragraphes,
INTRODUCTION
5
paragraphes,
Livre
C1 C2 C3
S1.1 S1.2 S2.1 S2.2 S2.3
S2.1.1 S2.1.2
Leur usage est multiple, car il capte lide de hirarchie;
titre dexemples, nous pouvons citer:
Hirarchies de fichiers,
INTRODUCTION
6
Leur usage est multiple, car il capte lide de hirarchie;
titre dexemples, nous pouvons citer:
Expressions Arithmtiques
INTRODUCTION
-
7
-
A *
+ F
B *
C -
D E
Lexpression A - (B + C * (D - E)) * F
se reprsente facilement par un arbre
o apparat clairement la priorit des
oprations:
DFINITION & TERMINOLOGIES
Un arbre est une structure de donnes (souvent dynamique)
reprsentant un ensemble de valeurs organises
hirarchiquement (non linaire). Chaque valeur est stocke dans
un nud. Les nuds sont connects entre eux par des artes
qui reprsentent des relations parent/fils.
8
A
C DB
E G HF I
LKJ
NudsArtes
DFINITION & TERMINOLOGIES
Racine: est le nud qui n'a
pas de prdcesseur (parent) et
possde zro ou plusieurs fils. La
racine constitue la caractristique
d'un arbre.
A
C DB
E G HF I
Racine
Nud interne
9
Feuille : est un nud qui n'a
pas de successeur (fils). Une
feuille est aussi appele un nud
externe.
Nud interne : est tout nud
qui admet au moins un
successeur (fils).
E G HF I
LKJ
Feuilles
DFINITION & TERMINOLOGIES
Fils dun nud : sont ses
successeurs. Dans l'exemple, F,
G, H, et I sont les fils du nud D.
Frres : sont les successeurs
ou les fils issus d'un mme nud
A
C DB
10
(parent direct). Dans l'exemple,
B, C et D sont des frres.
Pre : est un nud qui admet
au moins un successeur (fils).
Dans l'exemple, D est le pre des
nuds F, G, H et I.
E G HF I
LKJ
DFINITION & TERMINOLOGIES
Sous arbre : est une portion
de l'arbre. Dans l'exemple, le
nud G avec ces deux fils J et K
constituent un sous arbre.
Une branche est une suite de
A
C DB
11
nuds connects de pre en fils
(de la racine une feuille).
A-B-E
A-C
A-D-F
A-D-G-J
..
E G HF I
LKJ
DFINITION & TERMINOLOGIES
Descendants dun nud :
sont tous les nuds du sous arbre
de racine nud. Dans l'exemple,
les descendants de D sont D, F,
G, H, I, J, K et L.
A
C DB
12
Ascendants dun nud :
sont tous les nuds se trouvant
sur la branche de la racine vers
ce nud. Dans l'exemple, les
ascendants de J sont G, D et A.
Les ascendants de E sont B et A.
E G HF I
LKJ
DFINITION & TERMINOLOGIES
Taille dun arbre: est le
nombre de nuds quil possde.
Taille de larbre ci contre = 12
Un arbre vide est de taille
gale 0.
Degr dun nud : est le
A
C DB
13
Degr dun nud : est le
nombre de ses fils. Dans
l'exemple, le degr de B est 1, le
degr de D est 4.
Degr dun arbre : est le
degr maximum de ses nuds.
Degr de larbre ci contre = 4
E G HF I
LKJ
DFINITION & TERMINOLOGIES
Le niveau d'un nud: est la distance qui le spare de la
racine:
Le niveau de la racine = 0
Le niveau de chaque nud est gale au niveau de son pre plus 1
Le niveau du nud contenant G' est gal 2.
RacineNiveaux
14
Racine
...........
.........
.......
........
A
C DB
E G HF I
LKJ
Niveaux
0
1
2
3
DFINITION & TERMINOLOGIES
La profondeur d'un arbre (ou sa hauteur) : est le plus
grand niveau, c--d la distance entre la racine et la feuille la plus
lointaine. Dans l'exemple, la profondeur de l'arbre est gal 3
RacineNiveaux
15
Racine
...........
.........
.......
........
A
C DB
E G HF I
LKJ
Niveaux
0
1
2
3
DFINITION & TERMINOLOGIES
Fort : est un ensemble d'arbres.
A
C DB
16
E
G
HF I
L
KJ
DFINITION & TERMINOLOGIESDfinition rcursive
Cas particulier: NIL est un arbre vide, contenant zro nud
RacineRacine de T1
Cas gnral: SI n est un
nud et si T1, T2, ...Tm sont
des arbres, ALORS on peut
17
T1
T1
Racine de T1
construire un nouvel arbre en
connectant T1, T2, ...Tm
comme des fils n.
Chaque Ti est dfinit de la
mme manire (rcursivement).
T1, T2, ...Tm sont alors des
sous- arbres de n.
TYPOLOGIE
Arbre m-aire : un arbre m-aire dordre n est un arbre ou le
degr maximum dun nud est gal n.
B-Arbre : Un arbre B dordre n est un arbre o :
la racine a au moins 2 fils
chaque nud, autre que la racine, a entre n/2 et n fils
tous les nuds feuilles sont au mme niveau
18
tous les nuds feuilles sont au mme niveau
Arbre binaire : cest un arbre o le degr maximum dun
nud est gal 2.
Arbre de Recherche Binaire : cest un arbre binaire o la cl
de chaque nud est suprieure celles de ses descendants
gauche, et infrieure celles de ses descendants droits.
PARTIE II:PARTIE II:
ARBRES BINAIRES
Dfinition
Modle
PLAN DE LA PARTIE II
Parcours
Reprsentation contige
Exemples dapplication20
DFINITION
Un arbre binaire est un arbre o chaque nud est connect
deux sous-arbres (un sous-arbre gauche et un sous-arbre droit).
Donc, un arbre binaire est un arbre de degr 2, cest--dire que
chaque nuds a au plus deux fils. Ainsi, le premier fils d'un nud
n est appel Fils-Gauche (FG) et le deuxime fils est appel Fils-
21
Droit (FD). A
B
C KG
F
H I
J
racine
D
NIL
DFINITION
Un arbre binaire est dit strictement binaire si chaque nud
interne (non feuille) a exactement 2 fils diffrents de NIL.
Si un arbre strictement binaire a n feuilles Alors :
le nombre total de ses nuds = 2n-1.
le nombre de ses nuds non feuilles (nuds internes) = n-1
22
A
B
C KG
F
H I
J
racine
D
M
Le nombre de feuilles : n=6
(C, D,H, M, J, K)
Le nombre total de nuds :
2n-1=11
Le nombre de nuds
internes: n-1=5 (A, B, F, G, I)
DFINITION
Un arbre binaire complet est un arbre strictement binaire o
toutes les feuilles sont au mme niveau.
Dans un arbre binaire complet de profondeur d :
le nombre total de nuds n = 20 + 21 + 22 + ... 2d = 2d+1-1
ainsi, d = log2(n+1) 1
le nombre de nuds internes =
23
le nombre de nuds internes = 2d-1
le nombre de feuilles = 2d
le nombre de nuds dans le niveau i = 2i
racine
D
A
B
C KG
F
DFINITION
Un arbre binaire complet est un arbre strictement binaire o
toutes les feuilles sont au mme niveau.
Dans lexemple ci dessous:
d = 2
le nombre total de nuds n = 23-1 = 7
le nombre de nuds internes =
24
le nombre de nuds internes = 22-1 = 3
le nombre de feuilles = 22 = 4
le nombre de nuds dans le niveau 1 = 2
racine
D
A
B
C KG
F
MODLE
L'arbre est implment souvent de manire dynamique
comme un ensemble de maillons (nuds) chans entre eux.
La structure d'un nud de l'arbre est la suivante :
25
Structure de DonnesTYPE Tnoeud = STRUCTURE
Info : TypeqqFG : * TnoeudFD : * Tnoeud
FINVAR Arbre : * Tnoeud
MODLE
On dfinit le modle (machine abstraite) suivant dun arbre
binaire:
Fonction Rle
Info(p) permet d'accder l'information du nud p
FG(p) permet d'accder l'information de fils gauche du nud p
FD(p) permet d'accder l'information de fils droit du nud p
26
FD(p) permet d'accder l'information de fils droit du nud p
Aff_info(p, x) permet de modifier l'information du nud p
Aff_FG(p, x) permet de modifier l'information de fils gauche du nud p
Aff_FD(p, x) permet de modifier l'information de fils droit du nud p
Crer_noeud(x)permet de crer un nud avec x comme information etretourne la rfrence du nud. Le nud cr a Nil comme filsgauche et droit.
Liberer_noeud(p) permet de librer le nud rfrenc par p.
PARCOURS
Le parcours dun arbre consiste passer par tous ses
nuds.
Les parcours permettent deffectuer tout un ensemble de
traitement sur les arbres.
On distingue deux types de parcours :
27
On distingue deux types de parcours :
Des parcours en profondeur (depth-first) explorent
l'arbre branche par branche. Parmi lesquels: le Prordre,
lInordre et le Postordre.
Des parcours en largeur (breadth-first) explorent
l'arbre niveau par niveau
PARCOURS EN PROFONDEUR
Dans un parcours en profondeur, on descend le plus
profondment possible dans larbre puis, une fois quune
feuille a t atteinte, on remonte pour explorer les autres
branches en commenant par la branche la plus basse
parmi celles non encore parcourues.
28
parmi celles non encore parcourues.
Le parcours en profondeur peut se faire en :
Prordre (Prfixe) : o on affiche la racine avant ses fils (Racine
FG FD),
Inordre (Infixe) : o on affiche le fils gauche avant sa racine et
son frre droit (FG Racine FD),
Postordre(Postfixe) : o on affiche les fils avant leur racine (FG
FD Racine).
PARCOURS EN PROFONDEUR
Ces parcours (prordre, inordre et postordre) sont des
parcours simples dfinir et programmer (en rcursif).
Soit R un arbre binaire (pouvant tre vide : R=NIL).
S'il n'est pas vide (n pointe le nud racine), alors il a la forme
suivante (avec T1 et T2 des sous arbres dfinis de la mme manire
29
que n) :R
T1 T2
Sous arbre gauche G Sous arbre droit D
PARCOURS PREORDRE
Le parcours prordre de R (s'il n'est pas vide) consiste
visiter le nud racine (R) ensuite parcourir rcursivement
en prordre les sous arbres T1 (sous arbre gauche) puis T2
(sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]
30
R
T1 T2
Sous arbre gauche G Sous arbre droit D
PARCOURS PREORDRE
Le parcours prordre de R (s'il n'est pas vide) consiste
visiter le nud racine (R) ensuite parcourir rcursivement
en prordre les sous arbres T1 (sous arbre gauche) puis T2
(sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]
31
A
B C
E GD F
H I
HID EB FGA CRsultat de parcours:
PARCOURS PREORDRE
La procdure (rcursive) qui affiche les valeurs en
parcours prordre dun arbre de racine R est :
Procdure Prordre( R:* Tnoeud )Dbut
SI R NIL
32
SI R NILecrire( Info(R) )Prordre( FG(R) )Prordre( FD(R) )
FSIfin
PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en inordre le sous arbre
gauche T1, puis visiter le nud racine (R) ensuite parcourir
rcursivement en inordre le sous arbre droit T2 ce qui donne
[ T1 , R , T2 ou GRD ]
33
[ T1 , R , T2 ou GRD ]
R
T1 T2
Sous arbre gauche G Sous arbre droit D
PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en inordre le sous arbre
gauche T1, puis visiter le nud racine (R) ensuite parcourir
rcursivement en inordre le sous arbre droit T2 ce qui donne
[ T1 , R , T2 ou GRD ]
34
[ T1 , R , T2 ou GRD ]
A
B C
E GD F
H I
Rsultat de parcours: H ID EB F GA C
PARCOURS INORDRE
La procdure (rcursive) qui affiche les valeurs en
parcours inordre dun arbre de racine R est :
Procdure Inordre( R:*Tnoeud )Dbut
SI R NIL
35
SI R NILInordre( FG(R) )ecrire( Info(R) )Inordre( FD(R) )
FSIfin
PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]
36
R
T1 T2
Sous arbre gauche G Sous arbre droit D
PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]
37
A
B C
E GD F
H I
Rsultat de parcours: HIDEBFG AC
PARCOURS POSTORDRE
La procdure (rcursive) qui affiche les valeurs en
parcours postordre dun arbre de racine R est :
Procdure Postordre( R: *Tnoeud)Dbut
SI RNIL
38
SI RNILPostordre( FG(R) )Postordre( FD(R) )ecrire( Info(R) )
FSIfin
PARCOURS EN PROFONDEUR On peut faire ces trois parcours sans utiliser la
rcursivit. Il faudra alors un moyen pour pouvoir remonter
dans les branches de l'arbre:
On pourra par exemple utiliser une structure de pile pour
sauvegarder les adresses des nuds par lesquels on est descendu et
les dpiler quand on en aura besoin pour remonter.
39
les dpiler quand on en aura besoin pour remonter.
On peut aussi enrichir la structure des nuds en incluant un
pointeur vers le nud pre.
Il existe d'autres types de parcours en profondeur, comme
par exemple:
Le prordre inverse (R T2 T1 ou RDG),
L'inordre inverse (T2 R T1 ou DRG),
Le postordre inverse (T2 T1 R ou DGR).
PARCOURS EN LARGEUR
Dans le parcours par niveau, tous les nuds dun mme
niveau sont traits avant de descendre au niveau suivant
Rsultat de parcours:AHIDEB FGA C
40
B C
E GD F
H I
HIDEB FGA C
PARCOURS EN LARGEUR
Dans le parcours par niveau, tous les nuds dun mme
niveau sont traits avant de descendre au niveau suivantProcdure parcours_largeur( R:* Tnoeud )Var F:filedattente; P: *Tnoeud;DebutPR;
41
PR;Si R NIL Alors
Enfiler(F,P);TQ (Non FileVide(F))
Defiler(F,P); crire(info(P));Si FG(P) NIL Alors Enfiler(F,FG(P));Si FD(P) NIL Alors Enfiler(F,FD(P));
FTQFin
REPRSENTATION CONTIGE
On peut prsenter les arbres de manire statique en
utilisant les tableaux.
Reprsentation Standard:
Chaque lment du tableau possde quartes champs: un pour
l'information, un pour le fils gauche, un pour le fils droit et un champ
42
l'information, un pour le fils gauche, un pour le fils droit et un champ
de type boolen pour indiquer si la case est libre ou occupe.
TYPE Tnoeud= STRUCTUREInfo : TypeqqFG : entier FD : entiervide: boolen
FIN
REPRSENTATION CONTIGE
Reprsentation Standard:
Si la racine de larbre est toujours la position 1 du tableau,
larbre sera dfini comme suit:
VAR Arbre = TABLEAU[0..M-1] de Tnoeud
Indice Tnoeud
43
Indice Tnoeud
Vide FG Info FD
0 F 1 a 4
1 F 2 b 3
2 F -1 c -1
3 F -1 d -1
4 F -1 e -1
V ? ? ?
M-1 V ? ? ?
REPRSENTATION CONTIGE
Reprsentation Standard:
Si on veut que la racine soit n'importe o dans le tableau, alors
l'arbre sera dfini (le nud reste inchang):
TYPE Tarbre = STRUCTURET : TABLEAU[1..M] de TnoeudRacine : ENTIER
Racine
44
FINVAR Arbre : Tarbre
Indice Tnoeud
Vide FG Info FD
0 F -1 c -1
1 F 0 b 3
2 F 1 a 4
3 F -1 d -1
4 F -1 e -1
V ? ? ?
M-1 V ? ? ?
REPRSENTATION CONTIGE
Reprsentation Squentielle :
Dans cette reprsentation, on limine les pointeurs entiers (FG,
FD et ventuellement Pre), en associant chaque nud de l'arbre
une position fixe prdfinie dans le tableau:
La case dindice 0 sera toujours vide
La case d'indice 1 sera toujours rserve au nud racine de l'arbre,
45
La case d'indice 1 sera toujours rserve au nud racine de l'arbre,
La case d'indice 2 sera toujours rserve au FG de la racine,
La case d'indice 3 sera toujours rserve au FD de la racine,
En gnral, le FG de la case i se trouvera toujours l'indice 2i et le fd
de la case i se trouvera toujours l'indice 2i+1, alors que le pre de la
case i il sera toujours positionn la case i div 2.
i div 2 i 2i 2i+1
Pre . Nud . FG FD .
REPRSENTATION CONTIGE
Reprsentation Squentielle :TYPE Tnoeud= STRUCTURE
Info : Typeqqvide: boolen
FIN
46
Indice 0 1 2 3 4 5Info - a b e c dVide V F F F F F
Chaque nud lindice i a pour: nud lindice (2i) = fils de gauche. nud lindice (2i+1) = fils de droite. nud lindice (i div 2) = pre.
EXEMPLES DAPPLICATION
Reprsentation des Expressions Arithmtiques :
Les expressions arithmtiques peuvent tres reprsentes sous
forme d'arbre binaire. Les nuds internes contiennent des
oprateurs, alors que les feuilles contiennent des valeurs
(oprandes).
47
Exemple: l'expression (a-b)*((c+d)/e) sera reprsente par l'arbre
suivant :
c
e
*
- /
+
d
ba
EXEMPLES DAPPLICATION
Reprsentation des Expressions Arithmtiques :
Les diffrentes formes de reprsentation dune expression
arithmtiques peuvent tre trouvs en parcourant larbre:
Le parcours en prordre (RGD) donne la forme polonaise prfixe,
Le postordre (GDR) donne la forme postfixe
Le parcours inordre (GRD) donne la forme infixe (forme normale
48
Le parcours inordre (GRD) donne la forme infixe (forme normale
sans parenthses)
c
e
*
- /
+
d
ba
EXEMPLES DAPPLICATION
Reprsentation des Expressions Arithmtiques :
Lvaluation dune expression arithmtiques peuvent se faire en
utilisant les diffrentes formes (prordre, postordre et inordre) et les
deux fonctions suivantes:
La fonction Oprande(T) qui retourne vrai si T est un
oprande, sinon elle retourne faux.
49
oprande, sinon elle retourne faux.
La fonction Calcul qui permet de calculer lopration
arithmtique entre deux oprandes
EXEMPLES DAPPLICATION
Reprsentation des Expressions Arithmtiques :Fonction Eval_inordre(A: *Tnoeud): relSI (A= Null) alorsRetourner (0)SINON
SI Operande(A) alorsRetourner (Info(A))
SINON
50
c
e
*
- /
+
d
ba
SINONEval Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A)))
FSI
EXEMPLES DAPPLICATION
Reprsentation dune Liste Linaire Chane (LLC):
On peut reprsenter une liste linaire chane par un arbre binaire
de la faon suivante :
Les lments de la liste sont au niveau des feuilles.
Chaque nud qui n'est pas une feuille contient le nombre de
feuilles de son sous arbre gauche.
51
feuilles de son sous arbre gauche.
Exemple: Transformer cette LLC en un arbre
a b c d e f g
Prsentation statique sous forme dun tableau
a b c d e f g
EXEMPLES DAPPLICATION
Reprsentation dune Liste Linaire Chane (LLC):
4
22
a b c d e f g
0 6Mil = 3
Mil + 1a b c d e f g
52
1
e f
g1 1
a b c d
a b c d e f
EXEMPLES DAPPLICATION
Reprsentation dune Liste Linaire Chane (LLC):
Fonction LLCToArbreB (Tab: Tableau, Deb, Fin: entier) : * TnoeudVar x:Typeqcq; P:*Tnoeud; Mil: entierDebutSi Deb = Fin alors
x.Nbr_F0x.ValTab[Deb]
Type Typeqcq = StructureNbr_F: entierVal: caractreFin
53
x.ValTab[Deb]PCreerNoeud(x)
SinonMil (Deb+Fin) div 2x.Nbr_F Mil + 1x.ValPCreerNoeud(x)Aff_FG(P, LLCToArbreB(Tab, Deb, Mil))Aff_FD(P, LLCToArbreB(Tab, Mil+1, Fin))
Retourner (P)Fin
Type Tnoeud = StructureInfo: TypeqcqFG: *TnoeudFD: *TnoeudFin
Fin
EXEMPLES DAPPLICATION
Reprsentation dune Liste Linaire Chane (LLC):
Cette reprsentation rpond avec efficacit au problme de la
recherche du Kme lment.
Si la position recherche est infrieure ou gale l'information
du nud interne on descend gauche, sinon on descend droite
et en retranche la position recherche l'information du nud.
54
et en retranche la position recherche l'information du nud.
Exemple:
a. Rechercher le 3me lment de la liste
b. Rechercher le 6me lment de la liste
c. Rechercher le 9me lment de la liste (nexiste pas!)
a b c d e f g3me 6me
EXEMPLES DAPPLICATION
Reprsentation dune Liste Linaire Chane (LLC):
4
22
3
3
6
6 4 = 2
9
9 4 = 5
55
1
e f
g1 1
a b c d
3me 6me
3- 2 = 1
1
2
2 1 = 1
5 - 2 = 3!!!
EXEMPLES DAPPLICATION
Reprsentation dune Liste Linaire Chane (LLC):
Fonction Rechercher_Pos (R:*Tnoeud, K: entier) : * TnoeudDebutTQ non Feuille (R) faire
Si Info (R).Nbr_F K alorsR FG(R)
Sinon
Fonction Feuille (R:*Tnoeud): boolenDebut
56
SinonK K- Info (R).Nbr_FR FD(R)
FTQSi K = 1 alors
Retourner (R)Sinon
Retourner (Null)Fin
DebutSi R Null alors
Si FG(R) = Null et et FD (R) = Null alorsRetourner (vrai)
FSIRetourner (Faux)Fin
PARTIE III:
A BARBRES BINAIRES DE
RECHERCHE(ABR)
Dfinition
Complexit
PLAN DE LA PARTIE III
Parcours
Oprations de Recherche et de mise jours (Insertion et
Suppression)
Exemples dapplication: Tri par ABR
58
DFINITION
Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonn tel que pour tout nud n:
Toutes les valeurs du sous-arbe gauche de n sont strictement
infrieures la valeur de n, et
Toutes les valeurs du sous-arbre droit de n sont suprieures ou
59
gales la valeur de n.
DFINITION
Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonn tel que pour tout nud i :
Toutes les valeurs du sous-arbre gauche de i sont strictement
infrieures la cl de i , et
Toutes les valeurs du sous-arbre droit de i sont suprieures ou
60
gales la cl de i .
Intrt de cette proprit : diminuer la complexit
temporel de recherche, dinsertion et de suppression dans
larbre
COMPLEXIT
Intrt de cette proprit : diminuer la complexit
temporel de recherche, dinsertion et de suppression dans
larbre
87 ?
61O (n)O (h) tel que h = log2(n) dans un arbre quilibr
PARCOURS
Voici un exemple dun ARB contenant des valeurs
entires, appliquer les diffrents parcours vus sur les
arbres binaires. 20
15 59
5 27 71
62
5
3 10
27 71
33
8 55
52 Le parcours inordre de cet arbre donne la liste ordonne
suivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59, 71
OPRATION DE RECHERCHE
La recherche est dichotomique, chaque tape, un sous
arbre est limin:
Rechercher (55)
Rechercher (FD(20))
Rechercher (FG(59))2055 ?
63
Rechercher (FG(59))
Rechercher (FD(27))
Rechercher (FD (33))
lment trouv
15 59
5
3 10
27 71
33
8 55
52
OPRATION DE RECHERCHEFonction RechercherABR_rec (R:*Tnoeud, x: entier) : * TnoeudFonction RechercherABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
Retourner (Null)
Sinon
Si Info (R) = x alors
64
Fin
Retourner (R)
Sinon
Si Info(R)>x alors
Retourner (RechercherABR_rec(FG(R), x))
Sinon
Retourner (RechercherABR_rec(FD(R), x))
Fin
OPRATION DE RECHERCHEFonction RechercherABR _iter(R:*Tnoeud, x: entier) : * TnoeudFonction RechercherABR _iter(R:*Tnoeud, x: entier) : * Tnoeud
Debut
TQ R Null faire
Si Info (R) = x alors
Retourner (R)
Sinon
65
Fin
Si Info(R)>x alors
RFG(R)
Sinon
RFD(R)
FTQ
Retourner (Null)
Fin
OPRATION DINSERTION
L'insertion d'un lment se fait toujours au niveau d'une
feuille. Cette insertion dans un ABR doit maintenir la
proprit des arbres de recherche, ainsi:
1. Rechercher la position dinsertion
66
1. Rechercher la position dinsertion
2. Raccorder le nouveau nud son parent
OPRATION DINSERTION
20
15 59
5
3 10
27 71
33
+ 25
25
67
RechercherPosition (25)
Rechercher (FD(20))
Rechercher (FG(59))
Position trouv pour linsertion, le pre est le nud 27
Insrer 25 au niveau de la feuille dont le pre est 27
3 10
8 55
52
25
OPRATION DINSERTION
Fonction InsererABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
RCreerNoeud(x)
Sinon
68
Si Info(R)>x alors
Aff_FG(R, InsererABR_rec(FG(R), x))
Sinon
Aff_FD(R, InsererABR_rec(FD(R), x))
Retourner (R)
Fin
OPRATION DINSERTIONFonction InsererABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutPCreerNoeud(x)Si R = Null alors
RPSinon
QR
69
QRTQ (QNull) faire
Si Info(Q)>x alorsSi FG(Q) = Null alors Aff_FG(Q, P)QFG(Q)
SinonSi FD(Q)=Null alors Aff_FD(Q, P)QFD(Q)
Retourner (R)Fin
OPRATION DE SUPPRESSION
Pour supprimer le nud i dun ARB, il faudra le
rechercher. Une fois le nud i trouv, on se trouve
dans une des situations suivantes :
70
OPRATION DE SUPPRESSION Cas 1: Suppression d'une feuille
Il suffit de l'enlever de l'arbre vu qu'elle n'a pas de fils.
Exemple: supprimer le nud i qui contient la valeur 8
1. Rechercher(8)
2. Librer le nud i 20
71 i
15 59
5
3 10
27 71
33
8 55
52
12
OPRATION DE SUPPRESSION Cas 2: Suppression d'un nud avec un fils
Il faut l'enlever de l'arbre en le remplaant par son fils.
Exemple: supprimer le nud i qui contient la valeur 10
1. Rechercher(10)
2. Chainer le pre de i avec le FD(i) 20
72
3. Librer le nud i
i
15 59
5
3 10
27 71
33
12 55
52
OPRATION DE SUPPRESSION Cas 2: Suppression d'un nud avec un fils
Il faut l'enlever de l'arbre en le remplaant par son fils.
Exemple: supprimer le nud i qui contient la valeur 10
1. Rechercher(10)
2. Chainer le pre de i avec le FG(i) 20
73
3. Librer le nud i
i
15 59
5
3 10
27 71
33
55
52
8
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Etape 1: On change le nud supprimer avec son successeur
le plus proche (le nud le plus gauche du sous-arbre droit) ou
son plus proche prdcesseur (le nud le plus droite du
sous-arbre gauche). Cela permet de garder une structure d'arbre
binaire de recherche. 34
74
binaire de recherche. 34
66
50
56
55
71
70
69
81
22
8
17
9
29
25
23 32
Le plus proche prdcesseur
Le plus proche successeur
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
successeur le plus proche (le nud le plus gauche ou le plus
petit du sous-arbre)
Racine: 71
La plus petite valeur : 69
75
La plus petite valeur : 69
34
66
50
56
55
71
70
69
81
22
8
17
9
29
25
23 32
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
successeur le plus proche (le nud le plus gauche ou le plus
petit du sous-arbre)
Racine: 71
La plus petite valeur : 69
76
La plus petite valeur : 69
34
66
50
56
55
71
70
69
81
Fonction Successeur (R: *Tnoeud): *Tnoeud
Fin
Fonction Successeur (R: *Tnoeud): *TnoeudDebut
RFD(R)Si RNull alors
TQ FG(R)Null faire RFG(R)Retourner (R)
Fin
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
plus proche prdcesseur (le nud le plus droite ou le plus
grand du sous-arbre gauche).
Racine: 50
La plus petite valeur : 56
77
La plus petite valeur : 56
34
66
50
56
55
71
70
69
81
22
8
17
9
29
25
23 32
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
plus proche prdcesseur (le nud le plus droite ou le plus
grand du sous-arbre gauche).
Racine: 50
La plus petite valeur : 56
78
La plus petite valeur : 56
34
66
50
56
55
71
70
69
Fonction Predecesseur (R: *Tnoeud): *Tnoeud
Fin
Fonction Predecesseur (R: *Tnoeud): *TnoeudDebut
RFG(R)Si RNull alors
TQ FD(R)Null faire RFD(R)Retourner (R)
Fin
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Etape 2: on applique nouveau la procdure de suppression qui
est maintenant une feuille ou un nud avec un seul fils.
Ainsi, si on choisit dchanger le nud 66 avec son plus proche
successeur 69 , on obtient34
79
34
66
50
56
55
71
70
69
81
22
8
17
9
29
25
23 32
69
OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils
Puis on applique nouveau la procdure de suppression qui est
maintenant une feuille ou un nud avec un seul fils.
Ainsi, si on choisit d changer le nud 66 avec son plus proche
prdcesseur 56 , on obtient34
80
34
66
50
55
71
70
69
81
22
8
17
9
29
25
23 32
56
OPRATION DE SUPPRESSION En conclusion, pour supprimer le nud i dun ARB, il
faudra le rechercher. Une fois le nud i trouv, on se
trouve dans une des situations suivantes :
Cas i
ActionFG FD
Feuille Null Null Remplacer i par Null
81
Feuille Null Null Remplacer i par Null
Avec un fils
Null Null Remplacer i par FD(i)Null Null Remplacer i par FG(i)
Avec deux fils
Null Null
1. Rechercher le plus procheprdcesseur ou successeur de i ,soit P.
2. Remplacer Info(i) par Info(P)3. Remplacer P par FG(P) ou FD(P)
OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P) Procedure RechercherABR (R: *Tnoeud, x:
entier, Var Q: *Tnoeud, Var Pre: *Tnoeud)Pre Null; Q Null;
TQ R Null faire
Si Info (R) = x alors
Cette procdure
retourne ladresse du
82
Si Info (R) = x alors
QR
Sinon
PreR
Si Info(R)>x alors
RFG(R)
Sinon
RFD(R)
FTQ
retourne ladresse du
nud contenant x
(soit Q) ainsi que
ladresse de son pre
(soit Pre)
OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors// llment x existe dans Q
Si FG(Q) = Null alorsSi FD(Q) = Null alors//Cas n1: Q est une feuille
83
//Cas n1: Q est une feuilleChaner (R, P, Null, x)
Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)
SinonSi FD(Q) = Null alors//Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x)
Cette procdure
permet de chane le
pre de Q (P) avec le
Fil de Q selon la
valeur de x
OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors// llment x existe dans Q
Si FG(Q) = Null alorsSi FD(Q) = Null alors//Cas n1: Q est une feuille
Procedure Chaner (Var R:*Tnoeud , PreQ: *Tnoeud,FilsQ: *Tnoeud, x: entier)
84
//Cas n1: Q est une feuilleChaner (R, P, Null, x)
Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)
SinonSi FD(Q) = Null alors//Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x)
FilsQ: *Tnoeud, x: entier)
Si PreQ = Null alors
RFilsQ
Sinon
Si Info(P)>x alors
Aff_FG(P, FilsQ)
Sinon
Aff_FD(P, FilsQ)
OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors // llment x existe dans Q
Si FG(Q) = Null alorsSi FD(Q) = Null alors //Cas n1: Q est une feuille
Chaner (R, P, Null, x)Sinon //Cas n2: Q possde un FD
85
Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)
SinonSi FD(Q) = Null alors //Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x)
Sinon // Cas n3: Q possde deux filsSuccesseur (Q, S, PS)
Cette procdure retourne ladresse du successeur
de Q (S) ainsi que ladresse de son pre (PS)
OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors // llment x existe dans Q
Si FG(Q) = Null alorsSi FD(Q) = Null alors //Cas n1: Q est une feuille
Chaner (R, P, Null, x)Sinon //Cas n2: Q possde un FD
86
Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)
SinonSi FD(Q) = Null alors //Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x)
Sinon // Cas n3: Q possde deux filsSuccesseur (Q, S, PS)
Procdure Successeur (R: *Tnoeud, Var Q, PS: *Tnoeud)PSR; SFD(R)Si (SNull) alors
TQ FG(S)Null faire SFG(S)
RechercherABR (R, x, Q, P)Si Q Null alors // llment x existe dans Q
Fin fauxTQ non fin faire
Si FG(Q) = Null alorsSi FD(Q) = Null alors //Cas n1: Q est une feuille
Chaner (R, P, Null, x); Fin vraiSinon //Cas n2: Q possde un FD
Chaner (R, P, FD(Q), x); Fin vraiSinon
Si FD(Q) = Null alors //Cas n2: Q possde un FG
87
Si FD(Q) = Null alors //Cas n2: Q possde un FGChaner (R, P, FG(Q), x); Fin vrai
Sinon // Cas n3: Q possde deux filsSuccesseur (Q, S, P)Aff_Info (Q, Info(S))QS; PPS; xInfo(S)
FTQLibrerNoeud(Q)
FSIRetourner (R)
OPRATION DE SUPPRESSION
Fonction SupprimerABR_rec (R:*Tnoeud, x: entier) : * TnoeudDebutSi R = Null alors
Retourner (R)Sinon
Si Info(R)>x alorsAff_FG(R, SupprimerABR_rec(FG(R), x))
88
Aff_FG(R, SupprimerABR_rec(FG(R), x))Retourner (R)
SinonSi Info(R)
OPRATION DE SUPPRESSIONFonction SupprimerRacine (R:*Tnoeud) : * TnoeudDebutSi FG(R) = Null alors
Si FD(R) = Null alors //Cas n1: R est une feuilleLibrerNoeud(R)Retourner (Null)
Sinon //Cas n2: R possde un FDDFD(R)LibrerNoeud(R)Retourner (D)
89
Retourner (D)Sinon
Si FD(Q) = Null alors //Cas n2: R possde un FGGFG(R)LibrerNoeud(R)Retourner (G)
Sinon // Cas n3: R possde deux filsSSuccesseur (R)Aff_Info (R, Info(S))Aff_FD(R, SupprimerABR_rec(DF(R), Info(S)))Retourner (R)
Fin
EXEMPLE DAPPLICATION: TRI PAR ABR
tant donn un tableau dentiers T (n: sa taille), dire
comment peut on trier ce tableau en utilisant un Arbre
Binaire de Recherche (ABR)?
Exemple:
90
Exemple:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
1. Insrer toutes les lments du tableau dans un
ABR
20 15 10 35 19 13 5 3 12 7 16 40 25 38
EXEMPLE DAPPLICATION: TRI PAR ABR
91
20
15 35
1019
5 13
3 7 12
25 40
38
16
2. Parcourir lABR en inordre : GRD
20
15 35
10 25 40
EXEMPLE DAPPLICATION: TRI PAR ABR
923 5 7 10 12 13 15 16 19 20 25 35 38 40
1019
5 13
3 7 12
25 40
38
16
Procedure Tri_ARB(Var T: Tableau, n: entier)
Debut
RNull
Pour i0 n-1 faire RInsererABR (R, T[i]).
Inordre (R, T); //Parcours Infixe
EXEMPLE DAPPLICATION: TRI PAR ABR
93
FinIndice est une variable globale initialise 0
Procedure Inordre (R: *Tnud, Var T: Tableau)
Si ( R Null) alors //Arbre nest pas vide
Inordre(FG(R), T))
T[indice]Info(R) //crire la valeur dans le tableau
indice++
Inordre(FD(R), T)
PARTIE IV:
ARBRES BINAIRES DE
R RECHERCHE QUILIBRS
(ARBRES AVL)
Introduction
Dfinition
PLAN DE LA PARTIE IV
Techniques dquilibrage
Oprations de Base: Recherche, Insertion et
Suppression 95
INTRODUCTION
La complexit au meilleur des cas de la recherche, de
linsertion et de la suppression dans un ABR est O(h), o
h est la hauteur (ou profondeur) de larbre. Ce cas est
atteint par des arbres quilibrs
Cependant, la complexit au pire cas pour un arbre n
96
Cependant, la complexit au pire cas pour un arbre n
nuds, est O(n). Ce cas est atteint par des arbres trs
dsquilibrs, ou filiformes.
Plusieurs espces des arbres quilibrs ont t
dvelopps: les arbres AVL, les arbres 2-3, les arbres
rouge et noir, etc.
INTRODUCTION
87 ?
ABR Equilibr Filiformes
97O (n)O (h) tel que h = log2(n)
DFINITION
Les arbres AVL ont t introduits par les finlandais Adelson-
Velskii et Landis dans les annes 60.
Un arbre AVL est un ABR quilibr dont:
la diffrence de hauteur (ou profondeur) entre le sous-
arbre gauche et le sous-arbre droit d'un nud R diffre
d'au plus 1.
98
d'au plus 1.
|Profondeur(FG(R) ) Profondeur(FD(R)) | 1
les arbres gauches et droits d'un nud sont des arbres
AVL.
Un champs supplmentaire est ajout tous les nuds: cest le
facteur de dsquilibre (appel aussi facteur de balance
Bal ) qui est calcul aprs chaque insertion/suppression.
EXEMPLE
100
50 200
Exemple: soit lABR suivant. Est-il un arbre AVL?
+1
+1 +1
Notons:
quune feuille est un
arbre de hauteur 0,
et que larbre vide a la
hauteur 1.
99
30 80
10
150
40
0 0 0
0
hauteur 1.
Larbre vide et larbre
rduit une feuille,
sont des arbres AVL
Cet arbre est un arbre AVL
vrifier pour chaque nud R, on a:
| Profondeur(FG(R) ) Profondeur(FD(R)) |
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 5 100
50 200
+1
+1 +1
100
30 80
10
150
40
0 0 0
0 0
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 5 100
50 200+1+2Aprs insertion, calculer le
facteur de dsquilibre de
101
30 80
10
150
40
Cet arbre nest pas un arbre AVL aprs insertion de 5
arbre dsquilibr
50
+1
+1
0
0 0
facteur de dsquilibre de
chaque nud.
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 45 100
50 200
+1
+1 +1
102
30 80
10
150
40
0 0 0
0 0
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 45100
50 200+1+2
103Cet arbre nest pas un arbre AVL aprs insertion de 45
arbre dsquilibr
30 80
10
150
40
450
0
-1
-1
0 0
TECHNIQUES DQUILIBRAGE Lopration dquilibrage, appele rotation, sapplique tous les
arbres binaires.
Le but des rotations est de pouvoir rquilibrer un ABR.
On opre donc une rotation gauche lorsque larbre est
dsquilibr droite, i.e. son sous-arbre droit est plus haut
que son sous-arbre gauche.
104
que son sous-arbre gauche.
On opre une rotation droite dans le cas contraire savoir son
sous-arbre gauche est plus haut que son sous-arbre droit.
Les rotations ne sont donc dfinies que pour les arbres binaires non
vides dont le sous-arbre gauche (pour rotation gauche) et sous-arbre
droit (pour rotation droite) nest pas vide.
Les rotations prservent lordre des donnes dun ABR (parcours
inordre).
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation droite
Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).
La rotation droite est lopration:
((X, P, Y), R, Z) (X, P, (Y, R, Z))
+2
105
R
P
X(hauteur
h+1)
Dsquilibre gauche
Y(hauteur
h)
Z(hauteur
h)
P
R
X(hauteur
h+1)Y
(hauteur h)
Z(hauteur
h)
+1
+20
0
Rotation droite
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation droite
Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).
La rotation droite est lopration:
((X, P, Y), R, Z) (X, P, (Y, R, Z))
+2
106
R
P
X(hauteur
h)
Dsquilibre gauche
Y(hauteur
h)
Z(hauteur
h-1)
P
R
X(hauteur
h)Y
(hauteur h)
Z(hauteur
h-1)
0
+2-1
+1
Rotation droite
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation gauche
Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).
La rotation gauche est lopration:
( X, R, (Y, P, Z)) ((X, R, Y), P, Z)
-2 Rotation gauche
107
P
R
X(hauteur h)
Y(hauteur h)
Z(hauteur
h+1)
R
P
Dsquilibre droit
X(hauteur
h) Y(hauteur
h)Z
(hauteur h+1)
-1
-2
0
0Rotation gauche
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation gauche
Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).
La rotation gauche est lopration:
( X, R, (Y, P, Z)) ((X, R, Y), P, Z)
-2 Rotation gauche
108
P
R
X(hauteur h-1)
Y(hauteur
h)
Z(hauteur
h)
R
P
Dsquilibre droit
X(hauteur
h-1)
Y(hauteur
h)
Z(hauteur
h)
0
-2
-1
+1Rotation gauche
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation gauche-droite
Cest une rotation gauche sur le sous arbre-gauche du nud r
suivie dune rotation droite sur le nud r
R R
Rotation gauche Rotation droite
Q+2
0+2
109
P
QD(h)
C (h)
B (h)
A (h)
Q
P D(h)
C(h)
B(h)
A(h)
P R
D(h)
C(h)
B(h)
A(h)
((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))
0
0
-1
0
+1
0
0+2
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation gauche-droite
Cest une rotation gauche sur le sous arbre-gauche du nud r
suivie dune rotation droite sur le nud r
R R
Rotation gauche Rotation droite
Q+2
0
110
P
QD(h)
C (h-1)
B (h)
A (h)
Q
P D(h)
C(h-1)
B(h)
A(h)
P R
D(h)
C(h-1)
B(h)
A(h)
((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))
0
+1
-1
0
+2
-1
0+2
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation gauche-droite
Cest une rotation gauche sur le sous arbre-gauche du nud r
suivie dune rotation droite sur le nud r
R R
Rotation gauche Rotation droite
Q+2
0+2
111
P
QD(h)
C (h)
B (h-1)
A (h)
Q
P D(h)
C(h)
B(h-1)
A(h)
P R
D(h)
C(h)
B(h-1)
A(h)
((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))
+1
-1
-1
+1
+1
0
0+2
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation droite-gauche
Cest une rotation droite sur le sous arbre-droit du nud r suivie
dune rotation gauche sur le nud r
Rotation droite Rotation gaucheR-2 R
-2Q0
112
(A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))
P
QA(h)
0
+1
B(h)
C(h)
D(h)
Q
P0
-1A(h)
B(h)
C(h)
D(h)
R P0 0
0
A(h)
B(h)
C(h)
D(h)
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation droite-gauche
Cest une rotation droite sur le sous arbre-droit du nud r suivie
dune rotation gauche sur le nud r
Rotation droite Rotation gaucheR-2 R
-2Q0
113
(A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))
P
QA(h)
+1
+1
B(h)
C(h-1)
D(h)
Q
P-1
-1A(h)
B(h)
C(h-1)
D(h)
R P0 -1
0
A(h)
B(h)
C(h-1)
D(h)
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation droite-gauche
Cest une rotation droite sur le sous arbre-droit du nud r suivie
dune rotation gauche sur le nud r
Rotation droite Rotation gaucheR-2 R
-2Q0
114
(A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))
P
QA(h)
-1
+1
B(h-1)
C(h)
D(h)
Q
P0
-2A(h)
B(h-1)
C(h)
D(h)
R P1 0
0
A(h)
B(h-1)
C(h)
D(h)
OPERATIONS DE BASE
La recherche est identique celui des ABR car les
arbres AVL sont avant tout des ABR quilibrs.
Linsertion dun lment dans un arbre AVL peut
provoquer un dsquilibre. Donc, pour rtablir lquilibre
(rquilibrer) de larbre aprs une insertion, une seule
115
rotation ou double rotation suffit.
La suppression dun lment dans un arbre AVL peut
provoquer un dsquilibre. Donc pour rtablir lquilibre
(rquilibrer) de larbre aprs une suppression, il faut
jusqu h rotations (h est la hauteur de larbre) ou double
rotations.
INSERTION
Lajout dun nud se fait toujours au niveau dune feuille,
puis on rquilibre larbre AVL si linsertion a
dsquilibr larbre.
Le dsquilibre est rencontr lorsque le facteur
dquilibrage dun nud de larbre gale 2.
116
dquilibrage dun nud de larbre gale 2.
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )
2 10 12 4 16 8 6 14
20
2 10 12 4 16 8 6 14
2 -2
117
20
2 10 12 4 16 8 6 14
2
10 0
-1
2
10
12 0
-1
-2
Rotation simple
10
122 00
0
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )
2 10 12 4 16 8 6 14 2 10 12 4 16 8 6 14
118
10
122
4 0
-1 0
1 10
122
4 16 00
-1-1
0
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )
2 10 12 4 16 8 6 14
10 1
10 0
119
122
4 16
8 0
-1
-2
0
-1
Rotation simple
10
124
8 1620 0 0
-10
0
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )
2 10 12 4 16 8 6 14
10 1
120
124
8 162
6 0
10
-1
0
-1
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )
2 10 12 4 16 8 6 14
10 0 101
121
124
8 162
6 140
0
1
-2
10
-1 Rotation double
144
8 162
6
12
0
1
0 0
0-1
0
INSERTION
Exemple 2: soit larbre suivant, donner le rsultat aprs
insertion de 7
10
144
122
144
8 162
6
12
1 9
INSERTION
Exemple 2: soit larbre ci-dessus, donner le rsultat
aprs insertion de 7
10
144 0-1
2
80
Rotation
1230
144
8 162
6
12
-1
1
0 0
1
10 9 0
7
Nud insr
10
14
4
16
2 6
12
-1
0
01
-1
10
9
07 0
0
0
Rotation double
INSERTION
R
h h
RR
R
hh+1
R
R
h h+1
0
+1
+1
+2
-1
0
Avant Aprs insertion gauche Aprs insertion droite
Cas A
124
hh+1
R
h h+1
hh+2
R
h+1h+1
R
h h+2
h+1 h+1
-10 -2 Cas B
INSERTION
Remarques:
Aprs une insertion, seules les nuds qui sont sur le chemin du
point dinsertion la racine sont susceptibles dtre dsquilibrs.
Cas A: Larbre devient non quilibr quand le nouveau nud
insr est un descendant gauche dun nud qui avait un facteur
125
dquilibrage gal 1
Cas B: Larbre devient non quilibr quand le nouveau nud
insr est un descendant droit dun nud qui avait un facteur
dquilibrage gal -1
INSERTIONR
hh+2
+2
R
h
+1
P0
Cas A
+2
Avant
126
hh
Si insertion dans le sous-arbre
gauche du fils gauche alors
Rotation Simple droite
Si insertion dans le sous-arbre droit
du fils gauche alors Rotation
Double Gauche-Droite
R
h
+2
P
h
+1
h+1
R
h
+2
P
h
-1
h+1
INSERTIONR
h h+2
-2 Cas B
R
h
-1
P
hh
0
Avant
127
R
hP
h
-2
+1
h+1
R
hP
hh
-2
-1
Si insertion dans le sous-arbre
droit du fils droit alors Rotation
Simple gauche
Si insertion dans le sous-arbre gauche
du fils droit alors Rotation Double
Droite-Gauche
SUPPRESSION Le principe de la suppression dun lment dans un arbre
AVL est le mme que dans un ABR, c..d. recherche de
llment supprimer, suppression et remplacement, le
cas chant, par llment qui lui immdiatement
128
infrieur ou suprieur.
Aprs la premire phase de la suppression, la hauteur de
larbre est diminu de 1. Le problme est que cet arbre
nest plus forcment un arbre AVL. Il faut donc le
rquilibrer.
SUPPRESSION
Sil y a dsquilibre, la rotation applique peut diminuer
son tour la hauteur de larbre et gnrer un nouveau
dsquilibre. En fait les rotations peuvent senchainer en
cascade depuis llment supprim jusqu la racine.
129
cascade depuis llment supprim jusqu la racine.
Ainsi, on peut faire jusqu h simple rotations ou double
rotations (h est la hauteur de larbre initial).
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 10:
4
8
-10
0
4
8
-10
0
130
10
14
4
16
2 6
12
-1
0
01
-1
10
9
07 0
0
0
12
14
4
16
2 6 -1-1
1
-1
10
9
07 0
0
0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 8:
4
8
0
0
4
9
0
0
131
12
14
4
16
2 6 -1-1
1
-1
10
9
07 0
0
0
12
14
4
16
2 6 -1-1
1
-2
10 07 0
0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 8:
4
9
0
0
144
9
00
1
RSG
132
12
14
4
16
2 6 -1-1
1
-2
10 07 0
0 14
12
4
162 6 -10
1
0
10 07
0
0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 12 puis 16:
144
9
00
1
9+2
133
14
12
4
162 6 -10
1
0
10 07
0
0
144
2 6 -11
0
10 07
0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 12 puis 16:
9+2
4-1
RSD
134
144
2 6 -11
0
10 07
0
9
14
2
6 -1
1 1
1 0
0
7
0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 30:
10030
50
+1+1
-1
40
50
+1+2
-1
100
135
100
200
30
300
10 40-1
-1
20
80
60
0
+1
9070+1
0
00
0
40
300
10-1
-1
20
80
60
+1
9070
+1
100
200
0
0
0 0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 30:
40
50
+1+2
-1
100RDG-D
20
50
0
-2
136
40
300
10-1
-1
20
80
60
+1
9070
+1
100
200
0
0
0 0
20
300
10-1
+1
40 80
60
0
0
+1
9070+1
100
2000 0
0
0
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 30:
RDD-G
20
50
+10
-2
80
50
0
0
137
20
300
10-1
+1
40 80
60
0
0
+1
9070+1
100
2000 0
0
0
20
30010
-1
-1
40
50
60
0 9070+1
100
200
0
0 0 0
0
0
PARTIE V:
A B ARBRES BINAIRES QUILIBRS
(TAS)
Dfinition
Hauteur
PLAN DE LA PARTIE V
Oprations de Base: Insertion, Recherche et
Suppression
Implmentation
Exemples dApplication
139
DFINITION
Un TAS (HEAP) invent par Williams Floyd en 1964, est
un arbre binaire qui vrifie les deux proprits suivantes :
Proprit structurelle: arbre binaire complet (ou
parfait), i.e. Tous les niveaux sont totalement remplis
sauf le dernier qui est rempli de la gauche vers la
140
sauf le dernier qui est rempli de la gauche vers la
droite.
Proprit dordre :
TASmin: Cl (pre) Cl(fils)
TASmax: Cl (pre) Cl (fils)
DFINITION
Exemple dun TASmin
Cl (pre) Cl (fils)
Le minimum se trouve toujours la racine
Minimum4
141
Maximum
5 6
207
811
915
2516 1214
DFINITION
Exemple dun TASmax
Cl (pre) Cl (fils)
Le maximum se trouve toujours la racine
Maximum40
142
Minimum
35 26
2017
811
1915
131 1214
HAUTEUR
Thorme: Un TAS de n nud a une hauteur O(log2 n)
Dmonstration
Soit h, la hauteur dun tas de n nud
Au niveau ih, ni=2i
143
i
Donc n = 20 + 21 + 22 + ....+ 2h-1 + c tel que , 0c
INSERTION
Pour insrer une valeur v dans un TASmin [ou
TASmax]
1. Insrer la valeur v la fin du dernier niveau de
larbre.
Tant que la valeur du pre de v est plus grande
144
2. Tant que la valeur du pre de v est plus grande
[petite] que v , changer la valeur du pre de v
avec v .
Ltape 1 permet de vrifier la proprit structurelle et
ltape 2 permet de vrifier la proprit de lordre.
INSERTION
Exemple: Soit le TASmin suivant. Donner le rsultat
aprs linsertion 5, 17, 3, 18
4
6
145
96
207
811
1015
2516 1214
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 5
4
6
146
96
207
811
1015
2516 1214 5
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 17
4
5
147
95
67
811
1015
2516 1214 20 17
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 3
4
5
148
95
67
811
1015
2516 1214 20 17
3
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 18
3
5
149
45
67
811
109
2515 1214 20 17
16 18
INSERTION
Exercice: Construire un TASmin et un TASmax partir
des valeurs suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
150
INSERTION
Solution: Construire un TASmin partir des valeurs
suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
20 15 10 10
151
15 20 10 20 15
35 19
19 15
35 20 1310
19 13
35 20 15 55
19 10
35 20 15 13
3
3
5 10
19 20 15 13
35 12
INSERTION
Solution: Construire un TASmin partir des valeurs
suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
152
3
5 10
12 20 15 13
35 19 7
3
5 10
12 7 15 13
35 19 20 16 40 25 38
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
20
35
153
15 10 20 10
15 19 1335
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
35
154
20 13
15 19 10 5
3 12 7 16 4040
20 35
15 19 13 5
3 12 7 16 10 25
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
40
155
40
20 35
15 19 25 5
3 12 7 16 10 13 38
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
40
156
40
20 38
15 19 25 35
3 12 7 16 10 13 5
INSERTION
Linsertion dune valeur v peut ncessiter O(h) =
O(log2(n)) oprations o h est la hauteur du TAS et n est
son nombre des nuds.
En effet, au pire des cas, lchange peut se remonter la racine
157
En effet, au pire des cas, lchange peut se remonter la racine
dans le cas o v est infrieure la valeur de la racine, ainsi, il
devient le nouveau minimum
RECHERCHE
Pour rechercher une valeur v dans un TASmin [ou
TASmax], on doit parcourir larbre en largeur (niveau par
niveau)
On passera au niveau i si seulement si la valeur v
158
On passera au niveau i si seulement si la valeur v
est suprieure [infrieure] la valeur de lun des
nuds de niveau i-1 .
RECHERCHE
Exemple: Soit le TASmin suivant.
7 ?
4
6
159
96
207
811
1015
2516 1214
La valeur existe, fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.
8 ?
4
6
160
96
207
811
1015
2516 1214
La valeur existe, fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.
3 ?
4
6
161
96
207
811
1015
2516 1214
La valeur nexiste pas , fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.
30 ?
4
6
162
96
207
811
1015
2516 1214
Fin de recherche, la valeur nexiste pas
RECHERCHE
La recherche d'une valeur v dans un TAS peut
ncessiter O(n) oprations o n est le nombre des nuds.
Pire des cas: Si v est suprieure la valeur maximale du
TASmin [ou infrieure la valeur minimale du TASmax],
alors on doit descendre jusquau dernier niveau en parcourant
163
tous les nuds pour vrifier que la valeur recherche nexiste pas.
La recherche tant un pr-requis la suppression d'une
valeur v , une suppression peut ncessiter O(n)
oprations aussi.
SUPPRESSION
Pour supprimer une valeur v dans un TASmin [ou
TASmax]
1. Rechercher la valeur v , si elle existe on passe
ltape suivante, sinon stop.
Soit P le nud contenant la valeur v ,
164
2. Soit P le nud contenant la valeur v ,
remplacer la valeur de P par la valeur du dernier
nud du dernier niveau (soit Q ce nud et x sa
valeur). Cela permet de vrifier la proprit
structurelle.
SUPPRESSION
Pour supprimer une valeur v dans un TASmin [ou TASmax]
3. Vrifier la proprit dordre:
a. Tant que la valeur x est infrieure [suprieure]
celle du pre, changer la valeur x avec celle du
165
celle du pre, changer la valeur x avec celle du
pre.
b. Tant que la valeur x est suprieure [infrieure]
celle de lun de ses fils, changer la valeur x avec
celle du plus petit [grand] de ses fils.
SUPPRESSION
Exemple: Soit le TASmin suivant. Donner le rsultat
aprs la suppression de 9, 16, 6 et 4.
4
6
166
96
207
811
1015
2516 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 9.
4
6
167
96
207
811
1015
2516 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 9, 16.
4
6
168
86
207
11
1015
2516 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 16.
4
6
169
86
2071015
2511 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 6.
4
6
170
86
2071011
2515 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 6.
4
12
171
812
2071011
2515 14
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.
4
7
172
87
20121011
2515 14
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.
14
7
173
87
20121011
2515
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.
7
12
174
812
20141011
2515
IMPLMENTATION
Un TAS se reprsente naturellement par un tableau:
Les sommets sont numrots par un parcours en largeur, de
gauche droite.
Le sommet i est rang dans la case dindice i du tableau.
412 3
175
1 2 3 4 5 6 7 8 9 10 11 12 13
4 5 6 15 9 7 20 16 25 14 12 11 8
56
207
811
915
2516 1214
2 3
4 5 6 7
8 9
10 11 12 13
IMPLMENTATION
On parle ici de la reprsentation statique
squentielle dun arbre binaire
La case 0 est vide
Indice(racine)=1
Indice(FG)=2*Indice(Pre)
176
Indice(FG)=2*Indice(Pre)
Indice(FD)=2*Indice(Pre)+1
Indice(Pre)= [Indice (Fils)/2]
0 1 2 3 4 5 6 7 8 9 10 11 12 13
?? 4 5 6 15 9 7 20 16 25 14 12 11 8
IMPLMENTATION
Exercice:
1. Dfinir la structure de donnes dun TAS dentier.
2. Donner limplmentation du modle de larbre TAS
dentier.
177
dentier.
3. Trouver les algorithmes d'insertion, de recherche et
de suppression dans un TASmin.
IMPLMENTATIONSTRUCTURE DE DONNES
TYPE Tarbre = STRUCTURE
T : TABLEAU[0..Max-1] dentier
Dernier: ENTIER // indice sur la dernire case remplie du T (initialis 0)
178
T (initialis 0)
FIN
VAR R : Tarbre
IMPLMENTATIONMODLE
Entte Corp
Procdure CreerNoeud (Var R:
Tarbre, x: entier)
R.dernier++
R.T[dernier]x
Fonction Info (R: Tarbre,
i:entier): entier
Retourner (R.T[i])
Procdure Aff_Info (Var R: R.T[i]x
179
Procdure Aff_Info (Var R:
Tarbre, i: entier, x: entier)
R.T[i]x
Fonction FG (R: Tarbre,
i:entier): entier
Si (2*i R.dernier) alors Retourner (2*i)
Sinon Retourner (-1)
Fonction FD (R: Tarbre,
i:entier): entier
Si (2*i + 1R.dernier) alors Retourner (2*i + 1)
Sinon Retourner (-1)
Fonction Pre (R: Tarbre,
i:entier): entier
Si (i div 2>0) alors Retourner (i div 2)
Sinon Retourner (-1)
INSERTION (EXEMPLE ILLUSTRATIF)
4 5 6 15 9 7 20 16 25 14 12 11 8 3
4
56
207
811
915
2516 1214 3
4 5 6 15 9 7 3 16 25 14 12 11 8 20
4
56
37
811
915
2516 1214 20
180
4 5 3 15 9 7 6 16 25 14 12 11 8 20
4
53
67
811
915
2516 1214 20
3 5 4 15 9 7 6 16 25 14 12 11 8 20
3
54
67
811
915
2516 1214 20
IMPLMENTATIONINSERTION (ALGORITHME)
Procdure Inserer_TASmin(Var R: Tarbre, x: entier)
Var P, i: entier
Dbut
CreerNoeud (R, x);
i R.dernier
P Pre(R, i)
181
P Pre(R, i)
TQ ((P-1) et (Info (R, P) > x)) faire // Info (R, P)
IMPLMENTATIONRECHERCHE (ALGORITHME)
Fonction Rechercher_TASmin (R: Tarbre, x: entier): entier
Var F:filedattente; i: entier;
Dbut
Si (R.dernier 0) alors // le tableau ou larbre nest pas vide
Enfiler (F, i)
TQ (Non FileVide(F)) faire
Defiler (F, i)
182
Si Info (R, i) = x alors retourner (i)
Si Info (R, i) x dans le cas TASmax
Si FG(R, i) -1 Alors Enfiler(F,FG(R, i));
Si FD(R, i) -1 Alors Enfiler(F,FD(R, i));
FSi
FTQ
FSi
Retourner (-1)
Fin
IMPLMENTATIONRECHERCHE (ALGORITHME)
Fonction Rechercher_TAS(R: Tarbre, x: entier): entier
Var i: entier;
Dbut
On peut aussi faire une simple recherche
squentielle dans le tableau T comme suit:
183
Pour i 1 R.dernier faire
Si Info (R, i) = x alors retourner (i)
Retourner (-1)
Fin
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS A))
2 8 4 15 9 5 20 26 25 14 12 11 6
2
84
205
611
915
2526 1214
2
84
205
11
915
256 1214
2 8 4 15 9 5 20 6 25 14 12 11
184
5
84
205
11
96
2515 1214
2 8 4 6 9 5 20 15 25 14 12 11
2
64
205
11
98
2515 1214
2 6 4 8 9 5 20 15 25 14 12 11
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))
4 5 6 15 9 7 20 16 25 14 12 11 26
4
56
207
2611
915
2516 1214
26
56
207
11
915
2516 1214
26 5 6 15 9 7 20 16 25 14 12 11
185
5
266
207
11
915
2516 1214
5 26 6 15 9 7 20 16 25 14 12 11
5
96
207
11
2615
2516 1214
5 9 6 15 26 7 20 16 25 14 12 11
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))
5
266
207
11
915
2516 1214
5 26 6 15 9 7 20 16 25 14 12 11
5
96
207
11
2615
2516 1214
5 9 6 15 26 7 20 16 25 14 12 11
186
5
96
207
11
2615
2516 2614
5 9 6 15 12 7 20 16 25 14 26 11
IMPLMENTATIONSUPPRESSION (ALGORITHME)
Procdure Supprimer_TASmin (Var R: Tarbre, x: entier)
Var P, G, D: entier
Dbut
iRechercher_TASmin (R, x) //Etape 1
Si (i -1) alors //llment existe dans le TAS
Aff_Info (R, i, Info (R, R.dernier)); R.Dernier --; // Etape 2
//Etape 3: cas A
187
P Pre (R, i)
Si (P-1) et (Info (R, P) > Info (R, i))
rpter
Permuter (R, i, P)
i P
P Pre (i)
Jusqu ((P=-1) ou (Info (R, P) Info (R, i)))
Sinon
IMPLMENTATIONSUPPRESSION (ALGORITHME)
Procdure Supprimer_TASmin (Var R: Tarbre, x: entier)
Var P, G, D, min: entier
Dbut
..
Sinon
//Etape 3: cas B
min i; fin faux
188
Rpter
G FG(R, i)
D FD (R, i)
Si ((G -1) et (Info (R, min)> Info (R, G)) alors min G
Si ((D -1) et (Info (R, min)> Info (R, D)) alors min D
Si min i alors Permuter (R, i, min); i min
Sinon fin vrai
Jusqu (fin)
Fsi
Fin
EXEMPLES DAPPLICATION
Malgr que la recherche et la suppression dans un TAS
sont plus coteuses que dans un ABR ou un AVL, les TAS
sont trs utiles entre autre pour le tri et pour
implmenter les files de priorit.
189
implmenter les files de priorit.
tant donn un tableau dentiers T (n: sa taille), dire
comment peut on trier (ordre croissant) ce tableau en
utilisant un TASmin ou TAS max?
EXEMPLE DAPPLICATIONTRI PAR TAS
190
Exemple:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
1. Transformer le tableau en un TASMIN
20 15 10 35 19 13 5 3 12 7 16 40 25 38
EXEMPLE DAPPLICATIONTRI PAR TAS
191
3
5 10
12 7 15 13
35 19 20 16 40 25 38
2. Extraire n fois le minimum du TASMIN :
3
5 10
12 7 15 13
EXEMPLE DAPPLICATIONTRI PAR TAS
1923 5
12 7 15 13
35 19 20 16 40 25 38
5
7 10
12 16 15 13
35 19 20 38 40 25
2. Extraire n fois le minimum du TASMIN :
7
12 10
EXEMPLE DAPPLICATIONTRI PAR TAS
1933 5 7 10
19 16 15 13
35 25 20 38 40
10
12 13
19 16 15 40
35 25 20 38
2. Extraire n fois le minimum du TASMIN :
12
16 13
19 20 15 40
13
16 15
19 20 38 40
EXEMPLE DAPPLICATIONTRI PAR TAS
194
3 5 7 10 12 13 15
35 25 3835 25
15
16 25
19 20 38 40
35
2. Extraire n fois le minimum du TASMIN :
16
19 25
35 20 38 40
19
20 25
35 40 38
EXEMPLE DAPPLICATIONTRI PAR TAS
195
3 5 7 10 12 13 15 16 19 20 25 35 38 40
20
35 25
38 40
25
35 40
38
35
38 40
38
40
40
EXEMPLE DAPPLICATIONTRI PAR TAS
Tri_TASmin (Tab: Tableau, n: entier)
Var R: Tarbre
Dbut
R.Dernier 0;
//Construire le TAS
196
//Construire le TAS
Pour i 0 n-1 faire Insrer_TASmin (R, Tab[i])
// Extraire les minimums
Pour i0 n-1 faire
Tab[i] R.T[1]
Supprimer_TASmin (R, R.T[1]) // supprimer la valeur de la racine
FPour
Fin
EXEMPLE DAPPLICATIONIMPLMENTATION DUNE FILE AVEC PRIORIT
Une file dattente avec priorit est une collection dlments
dans laquelle lajout ne se fait pas toujours la queue (fin).
Tout nouvel lment est ajout dans la file, selon sa
priorit.
197
Le retrait se fait toujours du dbut.
Dans une file avec priorit, un lment prioritaire prendra la
tte de la file mme sil arrive le dernier.
Limplmentation de ces files dattente peut tre par tableau
(dcalage ou circulaire) ou LLC ordonne, mais
limplmentation la plus efficace et la plus rpandue utilise les
TAS.
Modle Implmentation
Crerfile(F) F.dernier0
File_Attente_priorit = TAS
F: Tarbre
EXEMPLE DAPPLICATIONIMPLMENTATION DUNE FILE AVEC PRIORIT
198
Filevide(F) Filevide (F. dernier = 0)
Filepleine(F) Filepleine (F. dernier = Max-1)
Enfiler (F, X) Inserer_TASmin (F, X)
Defiler(F,X) X F.T[1]
Supprimer_TASmin (F, X) // extraire le minium
PARTIE VI:PARTIE VI:
ARBRES M-AIRE
Dfinition
Parcours
PLAN DE LA PARTIE VI
Implmentation
Exemples dApplication
200
DFINITION
Un arbre m-aire d'ordre d est un arbre o chaque nud
peut avoir un nombre de fils compris entre 0 et d.
Si l'ordre n'est pas connu, on dit alors simplement un
arbre m-aire. Dans ce cas, le nombre de fils est
thoriquement illimit.
201
thoriquement illimit.
NudsArtes a
b c d
e f g h i
j k l
0
1
2
3
Niveaux racine
Feuilles
P
r
o
f
o
n
d
e
u
r
Arbre dordre 4
PARCOURS
De mme que les arbres binaires, on distingue deux types
de parcours :
Des parcours en profondeur qui explorent l'arbre
branche par branche:
Prordre : o on affiche le pre avant ses fils,
202
Prordre : o on affiche le pre avant ses fils,
Postordre : o on affiche les fils avant leur pre.
Le parcours en largeur (breadth-first) qui explore
l'arbre niveau par niveau
PARCOURS PREORDRE
Le parcours prordre de R (s'il n'est pas vide) consiste
visiter le nud racine (R) ensuite parcourir rcursivement
en prordre les sous arbres F1, F2, jusqu Fd, ce qui
donne : [ R F1 F2 .. Fd]
RR
203
R
F2F1Fd
a
b c d
e f g h i
j k l
a b e c d f g j k h i l
PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
parcourir rcursivement en postordre les sous arbres F1, F2,
jusqu Fd ensuite visiter le nud racine (R), ce qui donne
: [F1 F2 .. Fd R ]
RR
204
R
F2F1Fd
a
b c d
e f g h i
j k l
e b c f j k g h l i d a
PARCOURS EN LARGEUR
Dans le parcours par niveau, tous les nuds dun mme
niveau sont traits avant de descendre au niveau suivant
a0
Niveaux R
205a b c d e f g h i j k l
b c d
e f g h i
j k l
1
2
3
IMPLMENTATION
Les arbres m-aires peuvent tre prsents en deux
manires:
dynamique en utilisant des nuds chanes.
statique en utilisant les tableaux,
206
REPRSENTATION DYNAMIQUE
on distingue deux cas:
Cas 1: Si lordre de larbre est connu alors on cre un
nud avec deux champs (information et un tableau de d
pointeurs pour reprsenter les fils du nud).
207
pointeurs pour reprsenter les fils du nud).
TYPE TnoeudM = STRUCTURE
Info : Typeqq
Fils : TABLEAU[0..d-1] DE * TnoeudM
FIN
VAR R : * TnoeudM
REPRSENTATION DYNAMIQUE
on distingue deux cas:
Cas 2: Si lordre de larbre est inconnu alors au niveau
de chaque nud, on ne reprsente que l'adresse du fils le
plus gauche et celle du frre immdiatement droite.
208
plus gauche et celle du frre immdiatement droite.
TYPE TnoeudM = STRUCTURE
Info : Typeqq
FilsG, FrreD : * TnoeudM
FIN
VAR R : * TnoeudM
a
b c d
e f g h i
j k l
REPRSENTATION DYNAMIQUE
La deuxime reprsentation dynamique est la plus
gnrale car elle peut tre utilise aussi dans le cas o le
degr de larbre est connu.
TYPE TnoeudM = STRUCTUREa
209
TYPE TnoeudM = STRUCTURE
Info : Typeqq
FilsG, FrreD : * TnoeudM
FIN
VAR R : * TnoeudM
b c d
e f g h i
j k l
REPRSENTATION STATIQUE
Dans la reprsentation statique,
Chaque case du tableau reprsente un nud de larbre
La racine se trouve toujours dans la premire case du tableau
De mme que la reprsentation dynamique, on distingue
deux cas:
210
deux cas:
Cas 1: Si lordre de larbre est connu alors chaque case du tableau
est compos d'un champ information et d'un champ tableau qui
contient les indices des fils du nud.
Cas 2 (plus gnral): Si lordre de larbre est inconnu alors au
niveau de chaque nud, on ne reprsente que deux indices : l'indice
du fils le plus gauche et l'indice de son frre immdiatement
droite.
REPRSENTATION STATIQUE
TYPE TnoeudM = STRUCTURE
Info : Typeqq
Fils : TABLEAU[0..d-1] Dentier
FIN
VAR R : TABLEAU [0..Max-1] DE TnoeudM
a 1 2 3 -1b 4 -1 -1 -1c -1 -1 -1 -1d 5 6 7 8
0
1
2
3
R
Info F0 F1 F2 F3
211
a
b c d
e f g h i
j k l
Re -1 -1 -1 -1f -1 -1 -1 -1g 9 10 -1 -1h -1 -1 -1 -1i 11 -1 -1 -1j -1 -1 -1 -1k -1 -1 -1 -1l -1 -1 -1 -1
4
5
6
7
8
9
10
11
REPRSENTATION STATIQUE
a 1 -1b 4 2 c -1 3d 5 -1
0
1
2
3
R
TYPE TnoeudM = STRUCTURE
Info : Typeqq
FilsG, FrreD : entier
FIN
VAR R : TABLEAU [0..Max-1] DE * TnoeudM
Info FiG FrD
212
e -1 -1f -1 6g 9 7h -1 8i 11 -1j -1 10k -1 -1l -1 -1
4
5
6
7
8
9
10
11
a
b c d
e f g h i
j k l
MODLE
Pour manipuler ce type d'arbres, on dfini un modle
form par les oprations suivantes :
Module Rle
CreerNoeud(x)Crer un nud isol contenant x commeinformation
LibererNoeud(P) Dtruire le nud P
213
LibererNoeud(P) Dtruire le nud P
Info(P)Retourner l'information stocke dans lenud P
Fils(P, i) retourner le ime fils du nud P
Aff-info(P, x)affecter x dans le champ info du nudP
Aff-Fils(P, Q, i)affecter ladresse du nud Q au fils i dunud P
MODLE
Exercice: Donner limplmentation de ce modle pour
chaque prsentation de larbre (statique/dynamique dans le
cas o le degr de larbre est connu ou pas)
Module RleCrer un nud isol contenant x comme
214
CreerNoeud(x)Crer un nud isol contenant x commeinformation
LibererNoeud(P) Dtruire le nud P
Info(P) Retourner l'information stocke dans le nud P
Fils(P, i) retourner le ime fils du nud P
Aff-info(P, x) affecter x dans le champ info du nud P
Aff-Fils(P, Q, i) affecter ladresse du nud Q au fils i du nud P
EXEMPLES DAPPLICATION
Transformation dun arbre m-aire en arbre binaire
1. Etape 1: Lier les frres dans une liste linaire
chane
2. Etape 2: Faire une rotation de 45 dans le sens des
aiguilles dune montre
215
aiguilles dune montre
a
b c d
e f g h i
j k l
R
EXEMPLES DAPPLICATION
Transformation dun arbre m-aire en arbre binaire
1. Etape 1: Lier les frres dans une liste linaire
chane
aR a
216
a
b c d
e f g h i
j k l
b c d
e f g h i
j k l
EXEMPLES DAPPLICATION
2. Etape 2: Faire une rotation
de 45 dans le sens des
aiguilles dune montre
a
b
e
c d
c
d
Transformation dun arbre m-aire en arbre
binaire
217
aiguilles dune montre
a
b c d
e f g h i
j k l
f
j k
l
d
g
h
i
g h i
k
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
C'est une gnralisation des Arbres Binaire de
Recherche (ABR) pour tre utiliss en mmoire
secondaire o les E/S sont buffrises . Elle est aussi
218
secondaire o les E/S sont buffrises . Elle est aussi
utilise pour l organisation de fichiers (les indexes des
articles)
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
Chaque nud renferme un tableau de (d-1) valeurs
ordonnes et un tableau de d fils, car dans un AMR
d'ordre d, le nombre de fils d'un nud (le degr) est
toujours gal au nombre de valeur stockes + 1.
219
toujours gal au nombre de valeur stockes + 1.
s1 k1 s2 .. kj-1 sj kj ... kd-1 sd
ki des donnes tq: k1 < k2 ....< kd-1
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
s1 k1 s2 .. kj-1 sj kj ... kd-1 sd
ki des donnes tq: k1 < k2 ....< kd-1
(lments du s1) < k1 (lments du s ) > k
220
s11 k11 s12 k12 ....... s1(d-1) k1(d-1) s1d
sj1 kj1 sj2 kj2 ....... sj(d-1) kj(d-1) sjd
sd1 kd1 sd2 kd2 ....... sd(d-1) kd(d-1) sdd
(lments du s1) < k1 (lments du sd) > kd-1
kj-1 < (lments du sj) < kj(j=2,3, ...d-1)
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
La structure de larbre ARM est la suivante:
Type TnudAMR = Structure
Info : Tableau[0..d-2] dentier
221
Fils : Tableau[0..d-1] de *TnoeudAMR
Degr : entier
Fin
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
Exemple : soit larbre m-aires de recherche AMR
dordre 4
222
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
Pour crire des algorithmes sur ce type d'arbres, le
modle doit tre form des oprations suivantes :
CreerNoeud(x) LibererNoeud(P)
223
Info(P, i)
Fils (P, i)
Degr(P)
Aff_info(P, x, i)
Aff_fils(P, Q, i)
Aff_Degr(P, n)
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
La recherche dans un AMR ressemble beaucoup
celle effectue dans un ABR, except quau lieu de
prendre chaque nud une dcision de branchement
224
prendre chaque nud une dcision de branchement
binaire (Fils gauche ou droit), on prend une dcision
options multiples, selon le nombre de fils du nud.
La complexit de cette recherche est O(logdegr(n) ).
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
Exemple: Rechercher llment 68.
225On rcupre ladresse du nud (nud P) ainsi la position
dans le nud (soit pos = 2) o llment 68 doit exister.
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
Linsertion se droule comme suit:
1. Rechercher llment insrer x :
RechercherAMR(R, x, Var P, Var pos, Var trouve).
2. Si llment nest pas trouv (trouve = faux)
226
2. Si llment nest pas trouv (trouve = faux)
a. Si le tableau Info du nud P nest pas plein alors
insrer llment sa position pos dans ce tableau Info .
b. Sinon le tableau Info du P est plein alors crer un
nouveau nud contenant llment x insrer ensuite
placer comme fils numro pos du P
EXEMPLES DAPPLICATION
Arbres M-aire de Recherche (AMR)
Exemple: Insrer les lments suivants: 1, 40, 68,
170.
227
1 6 10 37 40
68
170
EXEMPLES DAPPLI