SlideShare une entreprise Scribd logo
1  sur  233
Télécharger pour lire hors ligne
CHAPITRE V:
Université Saad Dahlab de Blida
Faculté des Sciences
Département d’Informatique
Licence d’Informatique
Semestre 4 (2ème année)
Algorithmique et Structures de Données
CHAPITRE V:
STRUCTURES HIÉRARCHIQUES
Mme AROUSSI
2014-2015
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
Introduction
Définitions 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 accès direct par indice (rapide)
L’insertion et la suppression nécessitent des décalages
Dans les Listes Linéaires Chaînées, nous avons :
Un accès séquentiel lent
INTRODUCTION
3
Un accès séquentiel lent
L’insertion et la suppression se font uniquement par modification de
chaînage
Les arbres représentent un compromis entre les deux :
Un accès relativement rapide à un élément à partir de sa clé
L’insertion et la suppression non coûteuses
De plus, les arbres sont des structures de données
fondamentales en informatique, très utilisés dans tous les
domaines, parce qu’ils sont bien adaptés à la
représentation naturelle d’informations homogènes
INTRODUCTION
4
représentation naturelle d’informations homogènes
organisées, et d’une grande commodité et rapidité de
manipulation.
Leur usage est multiple, car il capte l’idée de hiérarchie; à
titre d’exemples, nous pouvons citer:
Découpage d’un 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 l’idée de hiérarchie; à
titre d’exemples, nous pouvons citer:
Hiérarchies de fichiers,
INTRODUCTION
6
Leur usage est multiple, car il capte l’idée de hiérarchie; à
titre d’exemples, nous pouvons citer:
Expressions Arithmétiques
INTRODUCTION
-
7
-
A *
+ F
B *
C -
D E
L’expression A - (B + C * (D - E)) * F
se représente facilement par un arbre
où apparaît clairement la priorité des
opérations:
DÉFINITION & TERMINOLOGIES
Un arbre est une structure de données (souvent dynamique)
représentant un ensemble de valeurs organisées
hiérarchiquement (non linéaire). Chaque valeur est stockée dans
un nœud. Les nœuds sont connectés entre eux par des arêtes
qui représentent des relations parent/fils.
8
A
C DB
E G HF I
LKJ
NœudsArêtes
DÉFINITION & TERMINOLOGIES
Racine: est le nœud qui n'a
pas de prédécesseur (parent) et
possède zéro ou plusieurs fils. La
racine constitue la caractéristique
d'un arbre.
A
C DB
E G HF I
Racine
Nœud interne
9
Feuille : est un nœud qui n'a
pas de successeur (fils). Une
feuille est aussi appelée un nœud
externe.
Nœud interne : est tout nœud
qui admet au moins un
successeur (fils).
E G HF I
LKJ
Feuilles
Dans les tableaux, nous avons :
Un accès direct par indice (rapide)
L’insertion et la suppression nécessitent des décalages
Dans les Listes Linéaires Chaînées, nous avons :
Un accès séquentiel lent
INTRODUCTION
3
Un accès séquentiel lent
L’insertion et la suppression se font uniquement par modification de
chaînage
Les arbres représentent un compromis entre les deux :
Un accès relativement rapide à un élément à partir de sa clé
L’insertion et la suppression non coûteuses
DÉFINITION & TERMINOLOGIES
Sous arbre : est une portion
de l'arbre. Dans l'exemple, le
nœud G avec ces deux fils J et K
constituent un sous arbre.
Une branche est une suite de
A
C DB
11
nœuds connectés de père en fils
(de la racine à une feuille).
A-B-E
A-C
A-D-F
A-D-G-J
…..
E G HF I
LKJ
DÉFINITION & TERMINOLOGIES
Descendants d’un nœud :
sont tous les nœuds du sous arbre
de racine nœud. Dans l'exemple,
les descendants de D sont D, F,
G, H, I, J, K et L.
A
C DB
12
Ascendants d’un nœud :
sont tous les nœuds se trouvant
sur la branche de la racine vers
ce nœud. 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
DÉFINITION & TERMINOLOGIES
Taille d’un arbre: est le
nombre de nœuds qu’il possède.
Taille de l’arbre ci contre = 12
Un arbre vide est de taille
égale à 0.
Degré d’un nœud : est le
A
C DB
13
Degré d’un nœud : est le
nombre de ses fils. Dans
l'exemple, le degré de B est 1, le
degré de D est 4.
Degré d’un arbre : est le
degré maximum de ses nœuds.
Degré de l’arbre ci contre = 4
E G HF I
LKJ
DÉFINITION & TERMINOLOGIES
Le niveau d'un nœud: est la distance qui le sépare de la
racine:
Le niveau de la racine = 0
Le niveau de chaque nœud est égale au niveau de son père plus 1
Le niveau du nœud contenant ‘G' est égal à 2.
RacineNiveaux
14
Racine
…..…………..…………………………………………….......
………………..…………………………………………….......
……………………………….......
.…………………………………………….......
A
C DB
E G HF I
LKJ
Niveaux
0
1
2
3
De plus, les arbres sont des structures de données
fondamentales en informatique, très utilisés dans tous les
domaines, parce qu’ils sont bien adaptés à la
représentation naturelle d’informations homogènes
INTRODUCTION
4
représentation naturelle d’informations homogènes
organisées, et d’une grande commodité et rapidité de
manipulation.
DÉFINITION & TERMINOLOGIES
Forêt : est un ensemble d'arbres.
A
C DB
16
E
G
HF I
L
KJ
DÉFINITION & TERMINOLOGIES
Définition récursive
Cas particulier: NIL est un arbre vide, contenant zéro nœud
Racine
Racine de T1
Cas général: SI n est un
nœud et si T1, T2, ...Tm sont
des arbres, ALORS on peut
17
T1
T’1
Racine de T’1
construire un nouvel arbre en
connectant T1, T2, ...Tm
comme des fils à n.
Chaque Ti est définit de la
même manière (récursivement).
T1, T2, ...Tm sont alors des
sous- arbres de n.
TYPOLOGIE
Arbre m-aire : un arbre m-aire d’ordre n est un arbre ou le
degré maximum d’un nœud est égal à n.
B-Arbre : Un arbre B d’ordre n est un arbre où :
la racine a au moins 2 fils
chaque nœud, autre que la racine, a entre n/2 et n fils
tous les nœuds feuilles sont au même niveau
18
tous les nœuds feuilles sont au même niveau
Arbre binaire : c’est un arbre où le degré maximum d’un
nœud est égal à 2.
Arbre de Recherche Binaire : c’est un arbre binaire où la clé
de chaque nœud est supérieure à celles de ses descendants
gauche, et inférieure à celles de ses descendants droits.
……
PARTIE II:PARTIE II:
ARBRES BINAIRES
Leur usage est multiple, car il capte l’idée de hiérarchie; à
titre d’exemples, nous pouvons citer:
Découpage d’un 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
DÉFINITION
Un arbre binaire est un arbre où chaque nœud est connecté à
deux sous-arbres (un sous-arbre gauche et un sous-arbre droit).
Donc, un arbre binaire est un arbre de degré 2, c’est-à-dire que
chaque nœuds a au plus deux fils. Ainsi, le premier fils d'un nœud
n est appelé Fils-Gauche (FG) et le deuxième fils est appelé Fils-
21
Droit (FD). A
B
C KG
F
H I
J
racine
D
NIL
DÉFINITION
Un arbre binaire est dit strictement binaire si chaque nœud
interne (non feuille) a exactement 2 fils différents de NIL.
Si un arbre strictement binaire a n feuilles Alors :
le nombre total de ses nœuds = 2n-1.
le nombre de ses nœuds non feuilles (nœuds 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 nœuds :
2n-1=11
Le nombre de nœuds
internes: n-1=5 (A, B, F, G, I)
DÉFINITION
Un arbre binaire complet est un arbre strictement binaire où
toutes les feuilles sont au même niveau.
Dans un arbre binaire complet de profondeur « d » :
le nombre total de nœuds n = 20 + 21 + 22 + ... 2d = 2d+1-1
ainsi, d = log2(n+1) – 1
le nombre de nœuds internes =
23
le nombre de nœuds internes = 2d-1
le nombre de feuilles = 2d
le nombre de nœuds dans le niveau i = 2i
racine
D
A
B
C KG
F
DÉFINITION
Un arbre binaire complet est un arbre strictement binaire où
toutes les feuilles sont au même niveau.
Dans l’exemple ci dessous:
d = 2
le nombre total de nœuds n = 23-1 = 7
le nombre de nœuds internes =
24
le nombre de nœuds internes = 22-1 = 3
le nombre de feuilles = 22 = 4
le nombre de nœuds dans le niveau 1 = 2
racine
D
A
B
C KG
F
MODÈLE
L'arbre est implémenté souvent de manière dynamique
comme un ensemble de maillons (nœuds) chaînés entre eux.
La structure d'un nœud de l'arbre est la suivante :
25
Structure de Données
TYPE Tnoeud = STRUCTURE
Info : Typeqq
FG : * Tnoeud
FD : * Tnoeud
FIN
VAR Arbre : * Tnoeud
Leur usage est multiple, car il capte l’idée de hiérarchie; à
titre d’exemples, nous pouvons citer:
Hiérarchies de fichiers,
INTRODUCTION
6
PARCOURS
Le parcours d’un arbre consiste à passer par tous ses
nœuds.
Les parcours permettent d’effectuer 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 Préordre,
l‘Inordre 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
profondément possible dans l’arbre puis, une fois qu’une
feuille a été atteinte, on remonte pour explorer les autres
branches en commençant 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 :
Préordre (Préfixe) : où on affiche la racine avant ses fils (Racine
FG FD),
Inordre (Infixe) : où on affiche le fils gauche avant sa racine et
son frère droit (FG Racine FD),
Postordre(Postfixe) : où on affiche les fils avant leur racine (FG
FD Racine).
PARCOURS EN PROFONDEUR
Ces parcours (préordre, inordre et postordre) sont des
parcours simples à définir et à programmer (en récursif).
Soit R un arbre binaire (pouvant être vide : R=NIL).
S'il n'est pas vide (n pointe le nœud racine), alors il a la forme
suivante (avec T1 et T2 des sous arbres définis de la même manière
29
que n) :
R
T1 T2
Sous arbre gauche G Sous arbre droit D
PARCOURS PREORDRE
Le parcours préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre 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 préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre 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 CRésultat de parcours:
PARCOURS PREORDRE
La procédure (récursive) qui affiche les valeurs en
parcours préordre d’un arbre de racine R est :
Procédure Préordre( R:* Tnoeud )
Début
SI R ≠ NIL
32
SI R ≠ NIL
ecrire( Info(R) )
Préordre( FG(R) )
Préordre( FD(R) )
FSI
fin
PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en inordre le sous arbre
gauche T1, puis visiter le nœud racine (R) ensuite parcourir
récursivement 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 récursivement en inordre le sous arbre
gauche T1, puis visiter le nœud racine (R) ensuite parcourir
récursivement 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
Résultat de parcours: H ID EB F GA C
PARCOURS INORDRE
La procédure (récursive) qui affiche les valeurs en
parcours inordre d’un arbre de racine R est :
Procédure Inordre( R:*Tnoeud )
Début
SI R ≠ NIL
35
SI R ≠ NIL
Inordre( FG(R) )
ecrire( Info(R) )
Inordre( FD(R) )
FSI
fin
PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nœud 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 récursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]
37
A
B C
E GD F
H I
Résultat de parcours: HIDEBFG AC
PARCOURS POSTORDRE
La procédure (récursive) qui affiche les valeurs en
parcours postordre d’un arbre de racine R est :
Procédure Postordre( R: *Tnoeud)
Début
SI R≠NIL
38
SI R≠NIL
Postordre( FG(R) )
Postordre( FD(R) )
ecrire( Info(R) )
FSI
fin
PARCOURS EN PROFONDEUR
On peut faire ces trois parcours sans utiliser la
récursivité. 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 nœuds par lesquels on est descendu et
les dépiler quand on en aura besoin pour remonter.
39
les dépiler quand on en aura besoin pour remonter.
On peut aussi enrichir la structure des nœuds en incluant un
pointeur vers le nœud père.
Il existe d'autres types de parcours en profondeur, comme
par exemple:
Le préordre 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 nœuds d’un même
niveau sont traités avant de descendre au niveau suivant
Résultat de parcours:A
HIDEB FGA C
40
B C
E GD F
H I
HIDEB FGA C
PARCOURS EN LARGEUR
Dans le parcours par niveau, tous les nœuds d’un même
niveau sont traités avant de descendre au niveau suivant
Procédure parcours_largeur( R:* Tnoeud )
Var F:filed’attente; P: *Tnoeud;
Debut
P←R;
41
P←R;
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));
FTQ
Fin
REPRÉSENTATION CONTIGÜE
On peut présenter les arbres de manière statique en
utilisant les tableaux.
Représentation Standard:
Chaque élément du tableau possède 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 booléen pour indiquer si la case est libre ou occupée.
TYPE Tnoeud= STRUCTURE
Info : Typeqq
FG : entier
FD : entier
vide: booléen
FIN
REPRÉSENTATION CONTIGÜE
Représentation Standard:
Si la racine de l’arbre est toujours à la position 1 du tableau,
l’arbre sera défini 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 ? ? ?
Leur usage est multiple, car il capte l’idée de hiérarchie; à
titre d’exemples, nous pouvons citer:
Expressions Arithmétiques
INTRODUCTION
-
7
-
A *
+ F
B *
C -
D E
L’expression A - (B + C * (D - E)) * F
se représente facilement par un arbre
où apparaît clairement la priorité des
opérations:
REPRÉSENTATION CONTIGÜE
Représentation Séquentielle :
Dans cette représentation, on élimine les pointeurs entiers (FG,
FD et éventuellement Père), en associant à chaque nœud de l'arbre
une position fixe prédéfinie dans le tableau:
La case d’indice 0 sera toujours vide
La case d'indice 1 sera toujours réservée au nœud racine de l'arbre,
45
La case d'indice 1 sera toujours réservée au nœud racine de l'arbre,
La case d'indice 2 sera toujours réservée au FG de la racine,
La case d'indice 3 sera toujours réservée au FD de la racine,
En général, 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 père de la
case i il sera toujours positionné à la case i div 2.
i div 2 i 2i 2i+1
Père …. Nœud …. FG FD ….
REPRÉSENTATION CONTIGÜE
Représentation Séquentielle :
TYPE Tnoeud= STRUCTURE
Info : Typeqq
vide: booléen
FIN
46
Indice 0 1 2 3 4 5
Info - a b e c d
Vide V F F F F F
Chaque nœud à l’indice i a pour:
nœud à l’indice (2i) = fils de gauche.
nœud à l’indice (2i+1) = fils de droite.
nœud à l’indice (i div 2) = père.
EXEMPLES D’APPLICATION
Représentation des Expressions Arithmétiques :
Les expressions arithmétiques peuvent êtres représentées sous
forme d'arbre binaire. Les nœuds internes contiennent des
opérateurs, alors que les feuilles contiennent des valeurs
(opérandes).
47
Exemple: l'expression (a-b)*((c+d)/e) sera représentée par l'arbre
suivant :
c
e
*
- /
+
d
ba
EXEMPLES D’APPLICATION
Représentation des Expressions Arithmétiques :
Les différentes formes de représentation d’une expression
arithmétiques peuvent être trouvés en parcourant l’arbre:
Le parcours en préordre (RGD) donne la forme polonaise préfixée,
Le postordre (GDR) donne la forme postfixée
Le parcours inordre (GRD) donne la forme infixée (forme normale
48
Le parcours inordre (GRD) donne la forme infixée (forme normale
sans parenthèses)
c
e
*
- /
+
d
ba
EXEMPLES D’APPLICATION
Représentation des Expressions Arithmétiques :
L’évaluation d’une expression arithmétiques peuvent se faire en
utilisant les différentes formes (préordre, postordre et inordre) et les
deux fonctions suivantes:
La fonction Opérande(T) qui retourne vrai si T est un
opérande, sinon elle retourne faux.
49
opérande, sinon elle retourne faux.
La fonction Calcul qui permet de calculer l’opération
arithmétique entre deux opérandes
EXEMPLES D’APPLICATION
Représentation des Expressions Arithmétiques :
Fonction Eval_inordre(A: *Tnoeud): réel
SI (A= Null) alors
Retourner (0)
SINON
SI Operande(A) alors
Retourner (Info(A))
SINON
50
c
e
*
- /
+
d
ba
SINON
Eval ← Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A)))
FSI
EXEMPLES D’APPLICATION
Représentation d’une Liste Linéaire Chaînée (LLC):
On peut représenter une liste linéaire chaînée par un arbre binaire
de la façon suivante :
Les éléments de la liste sont au niveau des feuilles.
Chaque nœud 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
Présentation statique sous forme
d’un tableau
a b c d e f g
DÉFINITION & TERMINOLOGIES
Un arbre est une structure de données (souvent dynamique)
représentant un ensemble de valeurs organisées
hiérarchiquement (non linéaire). Chaque valeur est stockée dans
un nœud. Les nœuds sont connectés entre eux par des arêtes
qui représentent des relations parent/fils.
8
A
C DB
E G HF I
LKJ
NœudsArêtes
EXEMPLES D’APPLICATION
Représentation d’une Liste Linéaire Chaînée (LLC):
Fonction LLCToArbreB (Tab: Tableau, Deb, Fin: entier) : * Tnoeud
Var x:Typeqcq; P:*Tnoeud; Mil: entier
Debut
Si Deb = Fin alors
x.Nbr_F 0
x.Val Tab[Deb]
Type Typeqcq = Structure
Nbr_F: entier
Val: caractère
Fin
53
x.Val Tab[Deb]
P CreerNoeud(x)
Sinon
Mil (Deb+Fin) div 2
x.Nbr_F Mil + 1
x.Val ’’
P CreerNoeud(x)
Aff_FG(P, LLCToArbreB(Tab, Deb, Mil))
Aff_FD(P, LLCToArbreB(Tab, Mil+1, Fin))
Retourner (P)
Fin
Type Tnoeud = Structure
Info: Typeqcq
FG: *Tnoeud
FD: *Tnoeud
Fin
Fin
EXEMPLES D’APPLICATION
Représentation d’une Liste Linéaire Chaînée (LLC):
Cette représentation répond avec efficacité au problème de la
recherche du Kème élément.
Si la position recherchée est inférieure ou égale à l'information
du nœud interne on descend à gauche, sinon on descend à droite
et en retranche à la position recherchée l'information du nœud.
54
et en retranche à la position recherchée l'information du nœud.
Exemple:
a. Rechercher le 3ème élément de la liste
b. Rechercher le 6ème élément de la liste
c. Rechercher le 9ème élément de la liste (n’existe pas!)
a b c d e f g
3ème 6ème
EXEMPLES D’APPLICATION
Représentation d’une Liste Linéaire Chaînée (LLC):
4
22
3
3
6
6 – 4 = 2
9
9 – 4 = 5
55
1
e f
g1 1
a b c d
3ème 6ème
3- 2 = 1
1
2
2 – 1 = 1
5 - 2 = 3!!!
EXEMPLES D’APPLICATION
Représentation d’une Liste Linéaire Chaînée (LLC):
Fonction Rechercher_Pos (R:*Tnoeud, K: entier) : * Tnoeud
Debut
TQ non Feuille (R) faire
Si Info (R).Nbr_F ≤ K alors
R FG(R)
Sinon
Fonction Feuille (R:*Tnoeud): booléen
Debut
56
Sinon
K K- Info (R).Nbr_F
R FD(R)
FTQ
Si K = 1 alors
Retourner (R)
Sinon
Retourner (Null)
Fin
Debut
Si R ≠ Null alors
Si FG(R) = Null et et FD (R) = Null alors
Retourner (vrai)
FSI
Retourner (Faux)
Fin
DÉFINITION & TERMINOLOGIES
Racine: est le nœud qui n'a
pas de prédécesseur (parent) et
possède zéro ou plusieurs fils. La
racine constitue la caractéristique
d'un arbre.
A
C DB
E G HF I
Racine
Nœud interne
9
Feuille : est un nœud qui n'a
pas de successeur (fils). Une
feuille est aussi appelée un nœud
externe.
Nœud interne : est tout nœud
qui admet au moins un
successeur (fils).
E G HF I
LKJ
Feuilles
Définition
Complexité
PLAN DE LA PARTIE III
Parcours
Opérations de Recherche et de mise à jours (Insertion et
Suppression)
Exemples d’application: Tri par ABR
58
DÉFINITION
Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonné tel que pour tout nœud n:
Toutes les valeurs du sous-arbe gauche de n sont strictement
inférieures à la valeur de n, et
Toutes les valeurs du sous-arbre droit de n sont supérieures ou
59
égales à la valeur de n.
DÉFINITION
Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonné tel que pour tout nœud « i »:
Toutes les valeurs du sous-arbre gauche de « i » sont strictement
inférieures à la clé de « i », et
Toutes les valeurs du sous-arbre droit de « i » sont supérieures ou
60
égales à la clé de « i ».
Intérêt de cette propriété : diminuer la complexité
temporel de recherche, d’insertion et de suppression dans
l’arbre
COMPLEXITÉ
Intérêt de cette propriété : diminuer la complexité
temporel de recherche, d’insertion et de suppression dans
l’arbre
87 ?
61
O (n)
O (h) tel que h = log2(n) dans un
arbre équilibré
PARCOURS
Voici un exemple d’un ARB contenant des valeurs
entières, appliquer les différents 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 ordonnée
suivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59, 71
OPÉRATION DE RECHERCHE
La recherche est dichotomique, à chaque étape, un sous
arbre est éliminé:
Rechercher (55)
Rechercher (FD(20))
Rechercher (FG(59))
20
55 ?
63
Rechercher (FG(59))
Rechercher (FD(27))
Rechercher (FD (33))
Élément trouvé
15 59
5
3 10
27 71
33
8
55
52
OPÉRATION DE RECHERCHE
Fonction 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
OPÉRATION DE RECHERCHE
Fonction 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
R FG(R)
Sinon
R FD(R)
FTQ
Retourner (Null)
Fin
OPÉRATION D’INSERTION
L'insertion d'un élément se fait toujours au niveau d'une
feuille. Cette insertion dans un ABR doit maintenir la
propriété des arbres de recherche, ainsi:
1. Rechercher la position d’insertion
66
1. Rechercher la position d’insertion
2. Raccorder le nouveau nœud à son parent
OPÉRATION D’INSERTION
20
15 59
5
3 10
27 71
33
+ 25
25
67
RechercherPosition (25)
Rechercher (FD(20))
Rechercher (FG(59))
Position trouvé pour l’insertion, le père est le nœud 27
Insérer 25 au niveau de la feuille dont le père est 27
3 10
8
55
52
25
OPÉRATION D’INSERTION
Fonction InsererABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
R CreerNoeud(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
OPÉRATION D’INSERTION
Fonction InsererABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
P CreerNoeud(x)
Si R = Null alors
R P
Sinon
Q R
69
Q R
TQ (Q≠Null) faire
Si Info(Q)>x alors
Si FG(Q) = Null alors Aff_FG(Q, P)
Q FG(Q)
Sinon
Si FD(Q)=Null alors Aff_FD(Q, P)
Q FD(Q)
Retourner (R)
Fin
OPÉRATION DE SUPPRESSION
Pour supprimer le nœud « i » d’un ARB, il faudra le
rechercher. Une fois le nœud « i » trouvé, on se trouve
dans une des situations suivantes :
70
OPÉRATION 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 nœud i qui contient la valeur 8
1. Rechercher(8)
2. Libérer le nœud « i » 20
71« i »
15 59
5
3 10
27 71
33
8
55
52
12
OPÉRATION DE SUPPRESSION
Cas 2: Suppression d'un nœud avec un fils
Il faut l'enlever de l'arbre en le remplaçant par son fils.
Exemple: supprimer le nœud i qui contient la valeur 10
1. Rechercher(10)
2. Chainer le père de i avec le FD(i) 20
72
3. Libérer le nœud « i »
« i »
15 59
5
3 10
27 71
33
12 55
52
OPÉRATION DE SUPPRESSION
Cas 2: Suppression d'un nœud avec un fils
Il faut l'enlever de l'arbre en le remplaçant par son fils.
Exemple: supprimer le nœud i qui contient la valeur 10
1. Rechercher(10)
2. Chainer le père de i avec le FG(i) 20
73
3. Libérer le nœud « i »
« i »
15 59
5
3 10
27 71
33
55
52
8
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Etape 1: On échange le nœud à supprimer avec son successeur
le plus proche (le nœud le plus à gauche du sous-arbre droit) ou
son plus proche prédécesseur (le nœud 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
prédécesseur
Le plus proche
successeur
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Etape 1 Cas A: On échange le nœud à supprimer avec son
successeur le plus proche (le nœud 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
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Etape 1 Cas A: On échange le nœud à supprimer avec son
successeur le plus proche (le nœud 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): *Tnoeud
Debut
R FD(R)
Si R≠Null alors
TQ FG(R)≠Null faire R FG(R)
Retourner (R)
Fin
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Etape 1 Cas A: On échange le nœud à supprimer avec son
plus proche prédécesseur (le nœud 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
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Etape 1 Cas A: On échange le nœud à supprimer avec son
plus proche prédécesseur (le nœud 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): *Tnoeud
Debut
R FG(R)
Si R≠Null alors
TQ FD(R)≠Null faire R FD(R)
Retourner (R)
Fin
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Etape 2: on applique à nouveau la procédure de suppression qui
est maintenant une feuille ou un nœud avec un seul fils.
Ainsi, si on choisit d’échanger le nœud « 66 » avec son plus proche
successeur « 69 », on obtient
34
79
34
66
50
56
55
71
70
69
81
22
8
17
9
29
25
23 32
69
OPÉRATION DE SUPPRESSION
Cas 3: Suppression d'un nœud avec deux fils
Puis on applique à nouveau la procédure de suppression qui est
maintenant une feuille ou un nœud avec un seul fils.
Ainsi, si on choisit d’ échanger le nœud « 66 » avec son plus proche
prédécesseur « 56 », on obtient
34
80
34
66
50
55
71
70
69
81
22
8
17
9
29
25
23 32
56
DÉFINITION & TERMINOLOGIES
Fils d’un nœud : sont ses
successeurs. Dans l'exemple, F,
G, H, et I sont les fils du nœud D.
Frères : sont les successeurs
ou les fils issus d'un même nœud
A
C DB
10
(parent direct). Dans l'exemple,
B, C et D sont des frères.
Père : est un nœud qui admet
au moins un successeur (fils).
Dans l'exemple, D est le père des
nœuds F, G, H et I.
E G HF I
LKJ
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P) Procedure RechercherABR (R: *Tnoeud, x:
entier, Var Q: *Tnoeud, Var Père: *Tnoeud)
Père Null; Q Null;
TQ R ≠ Null faire
Si Info (R) = x alors
Cette procédure
retourne l’adresse du
82
Si Info (R) = x alors
Q R
Sinon
Père R
Si Info(R)>x alors
R FG(R)
Sinon
R FD(R)
FTQ
retourne l’adresse du
nœud contenant x
(soit Q) ainsi que
l’adresse de son père
(soit Père)
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q ≠ Null alors
// l’élément x existe dans Q
Si FG(Q) = Null alors
Si FD(Q) = Null alors
//Cas n°1: Q est une feuille
83
//Cas n°1: Q est une feuille
Chaîner (R, P, Null, x)
Sinon //Cas n°2: Q possède un FD
Chaîner (R, P, FD(Q), x)
Sinon
Si FD(Q) = Null alors
//Cas n°2: Q possède un FG
Chaîner (R, P, FG(Q), x)
Cette procédure
permet de chaîne le
père de Q (P) avec le
Fil de Q selon la
valeur de x
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q ≠ Null alors
// l’élément x existe dans Q
Si FG(Q) = Null alors
Si FD(Q) = Null alors
//Cas n°1: Q est une feuille
Procedure Chaîner (Var R:
*Tnoeud , PèreQ: *Tnoeud,
FilsQ: *Tnoeud, x: entier)
84
//Cas n°1: Q est une feuille
Chaîner (R, P, Null, x)
Sinon //Cas n°2: Q possède un FD
Chaîner (R, P, FD(Q), x)
Sinon
Si FD(Q) = Null alors
//Cas n°2: Q possède un FG
Chaîner (R, P, FG(Q), x)
FilsQ: *Tnoeud, x: entier)
Si PèreQ = Null alors
R FilsQ
Sinon
Si Info(P)>x alors
Aff_FG(P, FilsQ)
Sinon
Aff_FD(P, FilsQ)
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q ≠ Null alors // l’élément x existe dans Q
Si FG(Q) = Null alors
Si FD(Q) = Null alors //Cas n°1: Q est une feuille
Chaîner (R, P, Null, x)
Sinon //Cas n°2: Q possède un FD
85
Sinon //Cas n°2: Q possède un FD
Chaîner (R, P, FD(Q), x)
Sinon
Si FD(Q) = Null alors //Cas n°2: Q possède un FG
Chaîner (R, P, FG(Q), x)
Sinon // Cas n°3: Q possède deux fils
Successeur (Q, S, PS)
Cette procédure retourne l’adresse du successeur
de Q (S) ainsi que l’adresse de son père (PS)
DÉFINITION & TERMINOLOGIES
Sous arbre : est une portion
de l'arbre. Dans l'exemple, le
nœud G avec ces deux fils J et K
constituent un sous arbre.
Une branche est une suite de
A
C DB
11
nœuds connectés de père en fils
(de la racine à une feuille).
A-B-E
A-C
A-D-F
A-D-G-J
…..
E G HF I
LKJ
RechercherABR (R, x, Q, P)
Si Q ≠ Null alors // l’élément x existe dans Q
Fin faux
TQ non fin faire
Si FG(Q) = Null alors
Si FD(Q) = Null alors //Cas n°1: Q est une feuille
Chaîner (R, P, Null, x); Fin vrai
Sinon //Cas n°2: Q possède un FD
Chaîner (R, P, FD(Q), x); Fin vrai
Sinon
Si FD(Q) = Null alors //Cas n°2: Q possède un FG
87
Si FD(Q) = Null alors //Cas n°2: Q possède un FG
Chaîner (R, P, FG(Q), x); Fin vrai
Sinon // Cas n°3: Q possède deux fils
Successeur (Q, S, P)
Aff_Info (Q, Info(S))
Q S; P PS; x Info(S)
FTQ
LibérerNoeud(Q)
FSI
Retourner (R)
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
Retourner (R)
Sinon
Si Info(R)>x alors
Aff_FG(R, SupprimerABR_rec(FG(R), x))
88
Aff_FG(R, SupprimerABR_rec(FG(R), x))
Retourner (R)
Sinon
Si Info(R)<x alors
Aff_FD(R, SupprimerABR_rec(FD(R), x))
Retourner (R)
Sinon // Info(R) = x
Retourner (SupprimerRacine (R))
Fin
OPÉRATION DE SUPPRESSION
Fonction SupprimerRacine (R:*Tnoeud) : * Tnoeud
Debut
Si FG(R) = Null alors
Si FD(R) = Null alors //Cas n°1: R est une feuille
LibérerNoeud(R)
Retourner (Null)
Sinon //Cas n°2: R possède un FD
D FD(R)
LibérerNoeud(R)
Retourner (D)
89
Retourner (D)
Sinon
Si FD(Q) = Null alors //Cas n°2: R possède un FG
G FG(R)
LibérerNoeud(R)
Retourner (G)
Sinon // Cas n°3: R possède deux fils
S Successeur (R)
Aff_Info (R, Info(S))
Aff_FD(R, SupprimerABR_rec(DF(R), Info(S)))
Retourner (R)
Fin
EXEMPLE D’APPLICATION: TRI PAR ABR
Étant donné un tableau d’entiers 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
DÉFINITION & TERMINOLOGIES
Descendants d’un nœud :
sont tous les nœuds du sous arbre
de racine nœud. Dans l'exemple,
les descendants de D sont D, F,
G, H, I, J, K et L.
A
C DB
12
Ascendants d’un nœud :
sont tous les nœuds se trouvant
sur la branche de la racine vers
ce nœud. 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
2. Parcourir l’ABR en inordre : GRD
20
15 35
10 25 40
EXEMPLE D’APPLICATION: TRI PAR ABR
923 5 7 10 12 13 15 16 19 20 25 35 38 40
10
19
5 13
3 7 12
25 40
38
16
Procedure Tri_ARB(Var T: Tableau, n: entier)
Debut
R Null
Pour i 0 à n-1 faire R InsererABR (R, T[i]).
Inordre (R, T); //Parcours Infixe
EXEMPLE D’APPLICATION: TRI PAR ABR
93
Fin
Indice est une variable globale initialisée à 0
Procedure Inordre (R: *Tnœud, Var T: Tableau)
Si ( R ≠ Null) alors //Arbre n’est 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 ÉQUILIBRÉS
(ARBRES AVL)
Introduction
Définition
PLAN DE LA PARTIE IV
Techniques d’équilibrage
Opérations de Base: Recherche, Insertion et
Suppression
95
DÉFINITION & TERMINOLOGIES
Taille d’un arbre: est le
nombre de nœuds qu’il possède.
Taille de l’arbre ci contre = 12
Un arbre vide est de taille
égale à 0.
Degré d’un nœud : est le
A
C DB
13
Degré d’un nœud : est le
nombre de ses fils. Dans
l'exemple, le degré de B est 1, le
degré de D est 4.
Degré d’un arbre : est le
degré maximum de ses nœuds.
Degré de l’arbre ci contre = 4
E G HF I
LKJ
INTRODUCTION
87 ?
ABR Equilibré Filiformes
97
O (n)O (h) tel que h = log2(n)
DÉFINITION
Les arbres AVL ont été introduits par les finlandais Adelson-
Velskii et Landis dans les années 60.
Un arbre AVL est un ABR équilibré dont:
la différence de hauteur (ou profondeur) entre le sous-
arbre gauche et le sous-arbre droit d'un nœud « R » diffère
d'au plus 1.
98
d'au plus 1.
|Profondeur(FG(R) ) – Profondeur(FD(R)) | ≤ 1
les arbres gauches et droits d'un nœud sont des arbres
AVL.
Un champs supplémentaire est ajouté à tous les nœuds: c’est le
facteur de déséquilibre (appelé aussi facteur de balance «
Bal ») qui est calculé après chaque insertion/suppression.
EXEMPLE
100
50 200
Exemple: soit l’ABR suivant. Est-il un arbre AVL?
+1
+1 +1
Notons:
qu’une feuille est un
arbre de hauteur 0,
et que l’arbre vide a la
hauteur −1.
99
30 80
10
150
40
0 0 0
0
hauteur −1.
L’arbre vide et l’arbre
réduit à une feuille,
sont des arbres AVL
Cet arbre est un arbre AVL
À vérifier pour chaque nœud R, on a:
| Profondeur(FG(R) ) – Profondeur(FD(R)) | <= 1
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insérer 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
Insérer la valeur 5 100
50 200+1+2Après insertion, calculer le
facteur de déséquilibre de
101
30 80
10
150
40
Cet arbre n’est pas un arbre AVL après insertion de 5
arbre déséquilibré
50
+1
+1
0
0 0
facteur de déséquilibre de
chaque nœud.
DÉFINITION & TERMINOLOGIES
Le niveau d'un nœud: est la distance qui le sépare de la
racine:
Le niveau de la racine = 0
Le niveau de chaque nœud est égale au niveau de son père plus 1
Le niveau du nœud contenant ‘G' est égal à 2.
RacineNiveaux
14
Racine
…..…………..…………………………………………….......
………………..…………………………………………….......
……………………………….......
.…………………………………………….......
A
C DB
E G HF I
LKJ
Niveaux
0
1
2
3
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 45
100
50 200+1+2
103Cet arbre n’est pas un arbre AVL après insertion de 45
arbre déséquilibré
30 80
10
150
40
450
0
-1
-1
0 0
TECHNIQUES D’ÉQUILIBRAGE
L’opération d’équilibrage, appelée rotation, s’applique à tous les
arbres binaires.
Le but des rotations est de pouvoir rééquilibrer un ABR.
On opère donc une rotation gauche lorsque l’arbre est
«déséquilibré à droite», i.e. son sous-arbre droit est plus haut
que son sous-arbre gauche.
104
que son sous-arbre gauche.
On opère 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 définies que pour les arbres binaires non
vides dont le sous-arbre gauche (pour rotation gauche) et sous-arbre
droit (pour rotation droite) n’est pas vide.
Les rotations préservent l’ordre des données d’un ABR (parcours
inordre).
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation droite
Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).
La rotation droite est l’opération:
((X, P, Y), R, Z) → (X, P, (Y, R, Z))
+2
105
R
P
X
(hauteur
h+1)
Déséquilibre gauche
Y
(hauteur
h)
Z
(hauteur
h)
P
R
X
(hauteur
h+1)
Y
(hauteur
h)
Z
(hauteur
h)
+1
+2
0
0
Rotation droite
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation droite
Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).
La rotation droite est l’opération:
((X, P, Y), R, Z) → (X, P, (Y, R, Z))
+2
106
R
P
X
(hauteur
h)
Déséquilibre 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
DÉFINITION & 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
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation gauche
Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).
La rotation gauche est l’opération:
( 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
Déséquilibre droit
X
(hauteur
h-1)
Y
(hauteur
h)
Z
(hauteur
h)
0
-2
-1
+1Rotation gauche
TECHNIQUES D’ÉQUILIBRAGE
Rotation double : double rotation gauche-droite
C’est une rotation gauche sur le sous arbre-gauche du nœud r
suivie d’une rotation droite sur le nœud r
R R
Rotation gauche Rotation droite
Q
+2
0+2
109
P
Q
D
(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 D’ÉQUILIBRAGE
Rotation double : double rotation gauche-droite
C’est une rotation gauche sur le sous arbre-gauche du nœud r
suivie d’une rotation droite sur le nœud r
R R
Rotation gauche Rotation droite
Q
+2
0
110
P
Q
D
(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 D’ÉQUILIBRAGE
Rotation double : double rotation gauche-droite
C’est une rotation gauche sur le sous arbre-gauche du nœud r
suivie d’une rotation droite sur le nœud r
R R
Rotation gauche Rotation droite
Q
+2
0+2
111
P
Q
D
(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
DÉFINITION & TERMINOLOGIES
Forêt : est un ensemble d'arbres.
A
C DB
16
E
G
HF I
L
KJ
TECHNIQUES D’ÉQUILIBRAGE
Rotation double : double rotation droite-gauche
C’est une rotation droite sur le sous arbre-droit du nœud r suivie
d’une rotation gauche sur le nœud r
Rotation droite Rotation gauche
R-2 R
-2
Q
0
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
Q
A
(h)
+1
+1
B
(h)
C
(h-1)
D
(h)
Q
P
-1
-1A
(h)
B
(h)
C
(h-1)
D
(h)
R P
0 -1
0
A
(h)
B
(h)
C
(h-1)
D
(h)
TECHNIQUES D’ÉQUILIBRAGE
Rotation double : double rotation droite-gauche
C’est une rotation droite sur le sous arbre-droit du nœud r suivie
d’une rotation gauche sur le nœud r
Rotation droite Rotation gauche
R-2 R
-2
Q
0
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
Q
A
(h)
-1
+1
B
(h-1)
C
(h)
D
(h)
Q
P
0
-2A
(h)
B
(h-1)
C
(h)
D
(h)
R P
1 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 équilibrés.
L’insertion d’un élément dans un arbre AVL peut
provoquer un déséquilibre. Donc, pour rétablir l’équilibre
(rééquilibrer) de l’arbre après une insertion, une seule
115
rotation ou double rotation suffit.
La suppression d’un élément dans un arbre AVL peut
provoquer un déséquilibre. Donc pour rétablir l’équilibre
(rééquilibrer) de l’arbre après une suppression, il faut
jusqu’à h rotations (h est la hauteur de l’arbre) ou double
rotations.
INSERTION
L’ajout d’un nœud se fait toujours au niveau d’une feuille,
puis on rééquilibre l’arbre AVL si l’insertion a
déséquilibré l’arbre.
Le déséquilibre est rencontré lorsque le facteur
d’équilibrage d’un nœud de l’arbre égale à ± 2.
116
d’équilibrage d’un nœud de l’arbre égale à ± 2.
DÉFINITION & TERMINOLOGIES
Définition récursive
Cas particulier: NIL est un arbre vide, contenant zéro nœud
Racine
Racine de T1
Cas général: SI n est un
nœud et si T1, T2, ...Tm sont
des arbres, ALORS on peut
17
T1
T’1
Racine de T’1
construire un nouvel arbre en
connectant T1, T2, ...Tm
comme des fils à n.
Chaque Ti est définit de la
même manière (récursivement).
T1, T2, ...Tm sont alors des
sous- arbres de n.
INSERTION
Exemple: soit la série de nombres à insérer 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 série de nombres à insérer 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 série de nombres à insérer 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 série de nombres à insérer dans un
arbre AVL (2 10 12 4 16 8 6 14 )
2 10 12 4 16 8 6 14
10 0 10
1
121
124
8 162
6 14
0
0
1
-2
10
-1
Rotation
double
144
8 162
6
12
0
1
0 0
0-1
0
TYPOLOGIE
Arbre m-aire : un arbre m-aire d’ordre n est un arbre ou le
degré maximum d’un nœud est égal à n.
B-Arbre : Un arbre B d’ordre n est un arbre où :
la racine a au moins 2 fils
chaque nœud, autre que la racine, a entre n/2 et n fils
tous les nœuds feuilles sont au même niveau
18
tous les nœuds feuilles sont au même niveau
Arbre binaire : c’est un arbre où le degré maximum d’un
nœud est égal à 2.
Arbre de Recherche Binaire : c’est un arbre binaire où la clé
de chaque nœud est supérieure à celles de ses descendants
gauche, et inférieure à celles de ses descendants droits.
……
INSERTION
Exemple 2: soit l’arbre ci-dessus, donner le résultat
après insertion de 7
10
144 0-1
2
8
0
Rotation
1230
144
8 162
6
12
-1
1
0 0
1
10
9 0
7
Nœud inséré
10
14
4
16
2 6
12
-1
0
0
1
-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
AvantAprès insertion à gauche Après 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:
Après une insertion, seules les nœuds qui sont sur le chemin du
point d’insertion à la racine sont susceptibles d’être déséquilibrés.
Cas A: L’arbre devient non équilibré quand le nouveau nœud
inséré est un descendant gauche d’un nœud qui avait un facteur
125
d’équilibrage égal à 1
Cas B: L’arbre devient non équilibré quand le nouveau nœud
inséré est un descendant droit d’un nœud qui avait un facteur
d’équilibrage égal à -1
INSERTION
R
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
h
P
h
-2
+1
h+1
R
h
P
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 d’un élément dans un arbre
AVL est le même que dans un ABR, c.à.d. recherche de
l’élément à supprimer, suppression et remplacement, le
cas échéant, par l’élément qui lui immédiatement
128
inférieur ou supérieur.
Après la première phase de la suppression, la hauteur de
l’arbre est diminué de 1. Le problème est que cet arbre
n’est plus forcément un arbre AVL. Il faut donc le
rééquilibrer.
SUPPRESSION
S’il y a déséquilibre, la rotation appliquée peut diminuer
à son tour la hauteur de l’arbre et générer un nouveau
déséquilibre. En fait les rotations peuvent s’enchainer en
cascade depuis l’élément supprimé jusqu’à la racine.
129
cascade depuis l’élément supprimé jusqu’à la racine.
Ainsi, on peut faire jusqu’à h simple rotations ou double
rotations (h est la hauteur de l’arbre initial).
PARTIE II:PARTIE II:
ARBRES BINAIRES
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après 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
0
7 0
0
0
12
14
4
16
2 6 -1
-1
1
-2
10 0
7 0
0
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après 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 0
7 0
0
14
12
4
162 6 -1
0
1
0
10 0
7
0
0
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 12 puis 16:
144
9
00
1
9
+2
133
14
12
4
162 6 -1
0
1
0
10 0
7
0
0
144
2 6 -1
1
0
10 0
7
0
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 12 puis 16:
9
+2
4
-1
RSD
134
144
2 6 -1
1
0
10 0
7
0
9
14
2
6 -1
1 1
1 0
0
7
0
Définition
Modèle
PLAN DE LA PARTIE II
Parcours
Représentation contigüe
Exemples d’application
20
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:
40
50
+1+2
-1
100
RDG-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
200
0 0
0
0
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après 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
200
0 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 ÉQUILIBRÉS
(TAS)
Définition
Hauteur
PLAN DE LA PARTIE V
Opérations de Base: Insertion, Recherche et
Suppression
Implémentation
Exemples d’Application
139
DÉFINITION
Un arbre binaire est un arbre où chaque nœud est connecté à
deux sous-arbres (un sous-arbre gauche et un sous-arbre droit).
Donc, un arbre binaire est un arbre de degré 2, c’est-à-dire que
chaque nœuds a au plus deux fils. Ainsi, le premier fils d'un nœud
n est appelé Fils-Gauche (FG) et le deuxième fils est appelé Fils-
21
Droit (FD). A
B
C KG
F
H I
J
racine
D
NIL
DÉFINITION
Exemple d’un TASmin
Clé (père) ≤ Clè (fils)
Le minimum se trouve toujours à la racine
Minimum4
141
Maximum
5 6
207
811
915
2516 1214
DÉFINITION
Exemple d’un TASmax
Clé (père) ≥ Clè (fils)
Le maximum se trouve toujours à la racine
Maximum40
142
Minimum
35 26
2017
811
1915
131 1214
HAUTEUR
Théorème: Un TAS de n nœud a une hauteur O(log2 n)
Démonstration
Soit h, la hauteur d’un tas de n nœud
Au niveau i≠h, ni=2i
143
i
Donc n = 20 + 21 + 22 + ....+ 2h-1 + c tel que , 0≤c<2h
n = 2h + c ≥ 2h⇒ h ≤ log2 n ⇒ O(h) = O(log2 n).
Conséquence: Les opérations proportionnelles à h sont
O (log2 n)
INSERTION
Pour insérer une valeur « v » dans un TASmin [ou
TASmax]
1. Insérer la valeur « v » à la fin du dernier niveau de
l’arbre.
Tant que la valeur du père de « v » est plus grande
144
2. Tant que la valeur du père de « v » est plus grande
[petite] que « v », échanger la valeur du père de v
avec « v ».
L’étape 1 permet de vérifier la propriété structurelle et
l’étape 2 permet de vérifier la propriété de l’ordre.
DÉFINITION
Un arbre binaire est dit strictement binaire si chaque nœud
interne (non feuille) a exactement 2 fils différents de NIL.
Si un arbre strictement binaire a n feuilles Alors :
le nombre total de ses nœuds = 2n-1.
le nombre de ses nœuds non feuilles (nœuds 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 nœuds :
2n-1=11
Le nombre de nœuds
internes: n-1=5 (A, B, F, G, I)
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 5
4
6
146
9
6
207
811
1015
2516 1214 5
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 17
4
5
147
9
5
67
811
1015
2516 1214 20 17
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 3
4
5
148
9
5
67
811
1015
2516 1214 20 17
3
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 18
3
5
149
4
5
67
811
109
2515 1214 20 17
16 18
DÉFINITION
Un arbre binaire complet est un arbre strictement binaire où
toutes les feuilles sont au même niveau.
Dans un arbre binaire complet de profondeur « d » :
le nombre total de nœuds n = 20 + 21 + 22 + ... 2d = 2d+1-1
ainsi, d = log2(n+1) – 1
le nombre de nœuds internes =
23
le nombre de nœuds internes = 2d-1
le nombre de feuilles = 2d
le nombre de nœuds dans le niveau i = 2i
racine
D
A
B
C KG
F
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 13
10
19 13
35 20 15 5
5
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
13
35
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 40
40
20 35
15 19 13 5
3 12 7 16 10
25
DÉFINITION
Un arbre binaire complet est un arbre strictement binaire où
toutes les feuilles sont au même niveau.
Dans l’exemple ci dessous:
d = 2
le nombre total de nœuds n = 23-1 = 7
le nombre de nœuds internes =
24
le nombre de nœuds internes = 22-1 = 3
le nombre de feuilles = 22 = 4
le nombre de nœuds dans le niveau 1 = 2
racine
D
A
B
C KG
F
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
L’insertion d’une valeur « v » peut nécessiter O(h) =
O(log2(n)) opérations où h est la hauteur du TAS et n est
son nombre des nœuds.
En effet, au pire des cas, l’échange peut se remonter à la racine
157
En effet, au pire des cas, l’échange peut se remonter à la racine
dans le cas où « v » est inférieure à 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 l’arbre 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 supérieure [inférieure] à la valeur de l’un des
nœuds de niveau « i-1 ».
RECHERCHE
Exemple: Soit le TASmin suivant.
7 ?
4
6
159
9
6
207
811
1015
2516 1214
La valeur existe, fin de recherche
MODÈLE
L'arbre est implémenté souvent de manière dynamique
comme un ensemble de maillons (nœuds) chaînés entre eux.
La structure d'un nœud de l'arbre est la suivante :
25
Structure de Données
TYPE Tnoeud = STRUCTURE
Info : Typeqq
FG : * Tnoeud
FD : * Tnoeud
FIN
VAR Arbre : * Tnoeud
RECHERCHE
Exemple: Soit le TASmin suivant.
3 ?
4
6
161
9
6
207
811
1015
2516 1214
La valeur n’existe pas , fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.
30 ?
4
6
162
9
6
207
811
1015
2516 1214
Fin de recherche, la valeur n’existe pas
RECHERCHE
La recherche d'une valeur « v » dans un TAS peut
nécessiter O(n) opérations où n est le nombre des nœuds.
Pire des cas: Si « v » est supérieure à la valeur maximale du
TASmin [ou inférieure à la valeur minimale du TASmax],
alors on doit descendre jusqu’au dernier niveau en parcourant
163
tous les nœuds pour vérifier que la valeur recherchée n’existe pas.
La recherche étant un pré-requis à la suppression d'une
valeur « v », une suppression peut nécessiter O(n)
opérations aussi.
SUPPRESSION
Pour supprimer une valeur « v » dans un TASmin [ou
TASmax]
1. Rechercher la valeur « v », si elle existe on passe à
l’étape suivante, sinon stop.
Soit « P » le nœud contenant la valeur « v »,
164
2. Soit « P » le nœud contenant la valeur « v »,
remplacer la valeur de « P » par la valeur du dernier
nœud du dernier niveau (soit « Q » ce nœud et « x » sa
valeur). Cela permet de vérifier la propriété
structurelle.
SUPPRESSION
Pour supprimer une valeur « v » dans un TASmin [ou TASmax]
3. Vérifier la propriété d’ordre:
a. Tant que la valeur « x » est inférieure [supérieure] à
celle du père, échanger la valeur « x » avec celle du
165
celle du père, échanger la valeur « x » avec celle du
père.
b. Tant que la valeur « x » est supérieure [inférieure] à
celle de l’un de ses fils, échanger la valeur « x » avec
celle du plus petit [grand] de ses fils.
SUPPRESSION
Exemple: Soit le TASmin suivant. Donner le résultat
après la suppression de 9, 16, 6 et 4.
4
6
166
9
6
207
811
1015
2516 1214
MODÈLE
On définit le modèle (machine abstraite) suivant d’un arbre
binaire:
Fonction Rôle
Info(p) permet d'accéder à l'information du nœud p
FG(p) permet d'accéder à l'information de fils gauche du nœud p
FD(p) permet d'accéder à l'information de fils droit du nœud p
26
FD(p) permet d'accéder à l'information de fils droit du nœud p
Aff_info(p, x) permet de modifier l'information du nœud p
Aff_FG(p, x) permet de modifier l'information de fils gauche du nœud p
Aff_FD(p, x) permet de modifier l'information de fils droit du nœud p
Créer_noeud(x)
permet de créer un nœud avec x comme information et
retourne la référence du nœud. Le nœud créé a Nil comme fils
gauche et droit.
Liberer_noeud(p) permet de libérer le nœud référencé par p.
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 9, 16.
4
6
168
8
6
207
11
1015
2516 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 16.
4
6
169
8
6
2071015
2511 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 6.
4
6
170
8
6
2071011
2515 1214
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 6.
4
12
171
8
12
2071011
2515 14
PARCOURS
Le parcours d’un arbre consiste à passer par tous ses
nœuds.
Les parcours permettent d’effectuer 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 Préordre,
l‘Inordre et le Postordre.
Des parcours en largeur (breadth-first) explorent
l'arbre niveau par niveau
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.
14
7
173
8
7
20121011
2515
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.
7
12
174
8
12
20141011
2515
IMPLÉMENTATION
Un TAS se représente naturellement par un tableau:
Les sommets sont numérotés par un parcours en largeur, de
gauche à droite.
Le sommet « i » est rangé dans la case d’indice i du tableau.
41
2 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
5
6
207
811
915
2516 1214
2 3
4 5 6 7
8 9
10 11 12 13
IMPLÉMENTATION
On parle ici de la représentation statique
séquentielle d’un arbre binaire
La case 0 est vide
Indice(racine)=1
Indice(FG)=2*Indice(Père)
176
Indice(FG)=2*Indice(Père)
Indice(FD)=2*Indice(Père)+1
Indice(Père)= [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
PARCOURS EN PROFONDEUR
Dans un parcours en profondeur, on descend le plus
profondément possible dans l’arbre puis, une fois qu’une
feuille a été atteinte, on remonte pour explorer les autres
branches en commençant 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 :
Préordre (Préfixe) : où on affiche la racine avant ses fils (Racine
FG FD),
Inordre (Infixe) : où on affiche le fils gauche avant sa racine et
son frère droit (FG Racine FD),
Postordre(Postfixe) : où on affiche les fils avant leur racine (FG
FD Racine).
IMPLÉMENTATION
STRUCTURE DE DONNÉES
TYPE Tarbre = STRUCTURE
T : TABLEAU[0..Max-1] d’entier
Dernier: ENTIER // indice sur la dernière case remplie du
T (initialisé à 0)
178
T (initialisé à 0)
FIN
VAR R : Tarbre
IMPLÉMENTATION
MODÈLE
Entête Corp
Procédure CreerNoeud (Var R:
Tarbre, x: entier)
R.dernier++
R.T[dernier] x
Fonction Info (R: Tarbre,
i:entier): entier
Retourner (R.T[i])
Procédure Aff_Info (Var R: R.T[i] x
179
Procédure 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 + 1≤R.dernier) alors Retourner (2*i + 1)
Sinon Retourner (-1)
Fonction Père (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
5
6
207
811
915
2516 1214 3
4 5 6 15 9 7 3 16 25 14 12 11 8 20
4
5
6
37
811
915
2516 1214 20
180
4 5 3 15 9 7 6 16 25 14 12 11 8 20
4
5
3
67
811
915
2516 1214 20
3 5 4 15 9 7 6 16 25 14 12 11 8 20
3
5
4
67
811
915
2516 1214 20
IMPLÉMENTATION
INSERTION (ALGORITHME)
Procédure Inserer_TASmin(Var R: Tarbre, x: entier)
Var P, i: entier
Début
CreerNoeud (R, x);
i R.dernier
P Père(R, i)
181
P Père(R, i)
TQ ((P≠-1) et (Info (R, P) > x)) faire // Info (R, P) <x dans le cas TASmax
Permuter (R, i, P)
i P
P Père (R, i)
FTQ
Fin
Procédure Permuter (Var R: Tarbre, i,j: entier)
Var tmp: entier
Tmp Info (R, i)
Aff_Info (R, i, Info (R, j))
Aff_Info (R, j, Tmp)
PARCOURS EN PROFONDEUR
Ces parcours (préordre, inordre et postordre) sont des
parcours simples à définir et à programmer (en récursif).
Soit R un arbre binaire (pouvant être vide : R=NIL).
S'il n'est pas vide (n pointe le nœud racine), alors il a la forme
suivante (avec T1 et T2 des sous arbres définis de la même manière
29
que n) :
R
T1 T2
Sous arbre gauche G Sous arbre droit D
IMPLÉMENTATION
RECHERCHE (ALGORITHME)
Fonction Rechercher_TAS(R: Tarbre, x: entier): entier
Var i: entier;
Début
On peut aussi faire une simple recherche
séquentielle 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
8
4
205
611
915
2526 1214
2
8
4
205
11
915
256 1214
2 8 4 15 9 5 20 6 25 14 12 11
184
5
8
4
205
11
96
2515 1214
2 8 4 6 9 5 20 15 25 14 12 11
2
6
4
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
5
6
207
2611
915
2516 1214
26
5
6
207
11
915
2516 1214
26 5 6 15 9 7 20 16 25 14 12 11
185
5
26
6
207
11
915
2516 1214
5 26 6 15 9 7 20 16 25 14 12 11
5
9
6
207
11
2615
2516 1214
5 9 6 15 26 7 20 16 25 14 12 11
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))
5
26
6
207
11
915
2516 1214
5 26 6 15 9 7 20 16 25 14 12 11
5
9
6
207
11
2615
2516 1214
5 9 6 15 26 7 20 16 25 14 12 11
186
5
9
6
207
11
2615
2516 2614
5 9 6 15 12 7 20 16 25 14 26 11
PARCOURS PREORDRE
Le parcours préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre 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
IMPLÉMENTATION
SUPPRESSION (ALGORITHME)
Procédure Supprimer_TASmin (Var R: Tarbre, x: entier)
Var P, G, D, min: entier
Début
……..
Sinon
//Etape 3: cas B
min i; fin faux
188
Répéter
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 D’APPLICATION
Malgré que la recherche et la suppression dans un TAS
sont plus coûteuses que dans un ABR ou un AVL, les TAS
sont très utiles entre autre pour le tri et pour
implémenter les files de priorité.
189
implémenter les files de priorité.
Étant donné un tableau d’entiers T (n: sa taille), dire
comment peut on trier (ordre croissant) ce tableau en
utilisant un TASmin ou TAS max?
EXEMPLE D’APPLICATION
TRI 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 D’APPLICATION
TRI PAR TAS
191
3
5 10
12 7 15 13
35 19 20 16 40 25 38
PARCOURS PREORDRE
Le parcours préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre 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 CRésultat de parcours:
2. Extraire n fois le minimum du TASMIN :
7
12 10
EXEMPLE D’APPLICATION
TRI 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 D’APPLICATION
TRI PAR TAS
194
3 5 7 10 12 13 15
35 25 38
35 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 D’APPLICATION
TRI 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 D’APPLICATION
TRI PAR TAS
Tri_TASmin (Tab: Tableau, n: entier)
Var R: Tarbre
Début
R.Dernier 0;
//Construire le TAS
196
//Construire le TAS
Pour i 0 à n-1 faire Insérer_TASmin (R, Tab[i])
// Extraire les minimums
Pour i 0 à n-1 faire
Tab[i] R.T[1]
Supprimer_TASmin (R, R.T[1]) // supprimer la valeur de la racine
FPour
Fin
PARCOURS PREORDRE
La procédure (récursive) qui affiche les valeurs en
parcours préordre d’un arbre de racine R est :
Procédure Préordre( R:* Tnoeud )
Début
SI R ≠ NIL
32
SI R ≠ NIL
ecrire( Info(R) )
Préordre( FG(R) )
Préordre( FD(R) )
FSI
fin
Modèle Implémentation
Créerfile(F) F.dernier←0
File_Attente_priorité = TAS
F: Tarbre
EXEMPLE D’APPLICATION
IMPLÉMENTATION D’UNE 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
Définition
Parcours
PLAN DE LA PARTIE VI
Implémentation
Exemples d’Application
200
DÉFINITION
Un arbre m-aire d'ordre d est un arbre où chaque nœud
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
théoriquement illimité.
201
théoriquement illimité.
NœudsArêtes
a
b c d
e f g h i
j k l
0
1
2
3
Niveaux racine
Feuilles
Profondeur
Arbre d’ordre 4
PARCOURS
De même que les arbres binaires, on distingue deux types
de parcours :
Des parcours en profondeur qui explorent l'arbre
branche par branche:
Préordre : où on affiche le père avant ses fils,
202
Préordre : où on affiche le père avant ses fils,
Postordre : où on affiche les fils avant leur père.
Le parcours en largeur (breadth-first) qui explore
l'arbre niveau par niveau
PARCOURS PREORDRE
Le parcours préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre les sous arbres F1, F2, … jusqu’à Fd, ce qui
donne : [ R F1 F2 ….. Fd]
R
R
203
R
F2F1
Fd
…
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 récursivement en postordre les sous arbres F1, F2,
… jusqu’à Fd ensuite visiter le nœud racine (R), ce qui donne
: [F1 F2 ….. Fd R ]
R
R
204
R
F2F1
Fd
…
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 nœuds d’un même
niveau sont traités avant de descendre au niveau suivant
a0
Niveaux R
205
a 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
PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en inordre le sous arbre
gauche T1, puis visiter le nœud racine (R) ensuite parcourir
récursivement 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
REPRÉSENTATION DYNAMIQUE
on distingue deux cas:
Cas 1: Si l’ordre de l’arbre est connu alors on crée un
nœud avec deux champs (information et un tableau de d
pointeurs pour représenter les fils du nœud).
207
pointeurs pour représenter les fils du nœud).
TYPE TnoeudM = STRUCTURE
Info : Typeqq
Fils : TABLEAU[0..d-1] DE * TnoeudM
FIN
VAR R : * TnoeudM
REPRÉSENTATION DYNAMIQUE
on distingue deux cas:
Cas 2: Si l’ordre de l’arbre est inconnu alors au niveau
de chaque nœud, on ne représente que l'adresse du fils le
plus à gauche et celle du frère immédiatement à droite.
208
plus à gauche et celle du frère immédiatement à droite.
TYPE TnoeudM = STRUCTURE
Info : Typeqq
FilsG, FrèreD : * TnoeudM
FIN
VAR R : * TnoeudM
a
b c d
e f g h i
j k l
REPRÉSENTATION DYNAMIQUE
La deuxième représentation dynamique est la plus
générale car elle peut être utilisée aussi dans le cas où le
degré de l’arbre est connu.
TYPE TnoeudM = STRUCTURE
a
209
TYPE TnoeudM = STRUCTURE
Info : Typeqq
FilsG, FrèreD : * TnoeudM
FIN
VAR R : * TnoeudM
b c d
e f g h i
j k l
REPRÉSENTATION STATIQUE
Dans la représentation statique,
Chaque case du tableau représente un nœud de l’arbre
La racine se trouve toujours dans la première case du tableau
De même que la représentation dynamique, on distingue
deux cas:
210
deux cas:
Cas 1: Si l’ordre de l’arbre 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 nœud.
Cas 2 (plus général): Si l’ordre de l’arbre est inconnu alors au
niveau de chaque nœud, on ne représente que deux indices : l'indice
du fils le plus à gauche et l'indice de son frère immédiatement à
droite.
PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en inordre le sous arbre
gauche T1, puis visiter le nœud racine (R) ensuite parcourir
récursivement 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
Résultat de parcours: H ID EB F GA C
REPRÉSENTATION STATIQUE
a 1 -1
b 4 2
c -1 3
d 5 -1
0
1
2
3
R
TYPE TnoeudM = STRUCTURE
Info : Typeqq
FilsG, FrèreD : entier
FIN
VAR R : TABLEAU [0..Max-1] DE * TnoeudM
Info FiG FrD
212
e -1 -1
f -1 6
g 9 7
h -1 8
i 11 -1
j -1 10
k -1 -1
l -1 -1
4
5
6
7
8
9
10
11
a
b c d
e f g h i
j k l
MODÈLE
Pour manipuler ce type d'arbres, on défini un modèle
formé par les opérations suivantes :
Module Rôle
CreerNoeud(x)
Créer un nœud isolé contenant x comme
information
LibererNoeud(P) Détruire le nœud P
213
LibererNoeud(P) Détruire le nœud P
Info(P)
Retourner l'information stockée dans le
nœud P
Fils(P, i) retourner le ième fils du nœud P
Aff-info(P, x)
affecter x dans le champ « info » du nœud
P
Aff-Fils(P, Q, i)
affecter l’adresse du nœud Q au fils i du
nœud P
MODÈLE
Exercice: Donner l’implémentation de ce modèle pour
chaque présentation de l’arbre (statique/dynamique dans le
cas où le degré de l’arbre est connu ou pas)
Module Rôle
Créer un nœud isolé contenant x comme
214
CreerNoeud(x)
Créer un nœud isolé contenant x comme
information
LibererNoeud(P) Détruire le nœud P
Info(P) Retourner l'information stockée dans le nœud P
Fils(P, i) retourner le ième fils du nœud P
Aff-info(P, x) affecter x dans le champ « info » du nœud P
Aff-Fils(P, Q, i) affecter l’adresse du nœud Q au fils i du nœud P
EXEMPLES D’APPLICATION
Transformation d’un arbre m-aire en arbre binaire
1. Etape 1: Lier les frères dans une liste linéaire
chaînée
2. Etape 2: Faire une rotation de 45 ° dans le sens des
aiguilles d’une montre
215
aiguilles d’une montre
a
b c d
e f g h i
j k l
R
PARCOURS INORDRE
La procédure (récursive) qui affiche les valeurs en
parcours inordre d’un arbre de racine R est :
Procédure Inordre( R:*Tnoeud )
Début
SI R ≠ NIL
35
SI R ≠ NIL
Inordre( FG(R) )
ecrire( Info(R) )
Inordre( FD(R) )
FSI
fin
EXEMPLES D’APPLICATION
2. Etape 2: Faire une rotation
de 45 ° dans le sens des
aiguilles d’une montre
a
b
e
c d
c
d
Transformation d’un arbre m-aire en arbre
binaire
217
aiguilles d’une 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 D’APPLICATION
Arbres M-aire de Recherche (AMR)
C'est une généralisation des Arbres Binaire de
Recherche (ABR) pour être utilisés en mémoire
secondaire où les E/S sont « bufférisées ». Elle est aussi
218
secondaire où les E/S sont « bufférisées ». Elle est aussi
utilisée pour l’ organisation de fichiers (les indexes des
articles)
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
Chaque nœud renferme un tableau de (d-1) valeurs
ordonnées et un tableau de d fils, car dans un AMR
d'ordre d, le nombre de fils d'un nœud (le degré) est
toujours égal au nombre de valeur stockées + 1.
219
toujours égal au nombre de valeur stockées + 1.
s1 k1 s2 ….. kj-1 sj kj …... kd-1 sd
ki des données tq: k1 < k2 ....< kd-1
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
s1 k1 s2 ….. kj-1 sj kj …... kd-1 sd
ki des données tq: k1 < k2 ....< kd-1
(Éléments du s1) < k1 (Éléments 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
(Éléments du s1) < k1 (Éléments du sd) > kd-1
kj-1 < (Éléments du sj) < kj
(j=2,3, ...d-1)
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
La structure de l’arbre ARM est la suivante:
Type TnœudAMR = Structure
Info : Tableau[0..d-2] d’entier
221
Fils : Tableau[0..d-1] de *TnoeudAMR
Degré : entier
Fin
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
Exemple : soit l’arbre m-aires de recherche AMR
d’ordre 4
222
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
Pour écrire des algorithmes sur ce type d'arbres, le
modèle doit être formé des opérations 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 D’APPLICATION
Arbres M-aire de Recherche (AMR)
La recherche dans un AMR ressemble beaucoup à
celle effectuée dans un ABR, excepté qu’au lieu de
prendre à chaque nœud une décision de branchement
224
prendre à chaque nœud une décision de branchement
binaire (Fils gauche ou droit), on prend une décision à
options multiples, selon le nombre de fils du nœud.
La complexité de cette recherche est O(logdegré(n) ).
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
Exemple: Rechercher l’élément 68.
225On récupère l’adresse du nœud (nœud P) ainsi la position
dans le nœud (soit pos = 2) où l’élément 68 doit exister.
PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]
36
R
T1 T2
Sous arbre gauche G Sous arbre droit D
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
Exemple: Insérer les éléments suivants: 1, 40, 68,
170.
227
1 6 10 37 40
68
170
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
On distingue deux types de suppression:
1. Suppression logique:
Laisser la clé au niveau du nœud et le marquer comme
supprimé
228
Le nœud reste utilisé pour l'algorithme de recherche
L’insertion d’un nœud supprimé consiste à le marquer
comme non supprimé
2. Suppression physique: Technique similaire à celle
des ABR
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
2. Suppression physique:
a. Si l’élément à supprimer est le seul élément dans le nœud
alors libérer le nœud.
Exemple: supprimer 37 ou 110
229
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
2. Suppression physique:
Si l’élément à supprimer a un sous arbre gauche ou droit vide
alors supprimer l’élément, ensuite tasser le nœud (décalage
dans le nœud + changer l’adresse du fils).
Exemple: la suppression du 65 entraîne le décalage de 69 à la
230
Exemple: la suppression du 65 entraîne le décalage de 69 à la
position de 65 ainsi le déplacement du fils droit de 65.
68
62 69
68
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
2. Suppression physique:
b. Si l’élément à supprimer a un sous arbre gauche ou droit vide
alors supprimer l’élément, ensuite tasser le nœud (décalage
dans le nœud + changer l’adresse du fils).
Exemple: la suppression du 120 entraîne le décalage de 150 à
231
Exemple: la suppression du 120 entraîne le décalage de 150 à
la position de 120.
68
100 120
110
EXEMPLES D’APPLICATION
Arbres M-aire de Recherche (AMR)
2. Suppression physique:
c. Si l’élément à supprimer a des sous arbres gauche et droit
tous les deux non vides alors remplacer l’élément à
supprimer par son successeur/prédécesseur, ensuite
supprimer ce successeur/prédécesseur
232
supprimer ce successeur/prédécesseur
Exemple: la suppression du 85 entraîne le remplacement du
85 par 100 , ensuite la suppression du 100
120 150
110
12 50 100
SOURCES DE CE COURS
N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole
nationale Supérieure d’Informatique (ESI), 2014.
Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale
Supérieure d’Informatique (ESI), Disponible sur
http://zegour.esi.dz/Cours/Cours_sdd.htm
W. K. Hidouci, Cours Structures De Données et Fichiers, École nationale Supérieure
d’Informatique, Disponible sur hidouci.esi.dz/algo/
B. Boutoumi, Cours d’Algorithmique et Structures de données, Université Saad
Dahlab de Blida, 2014, Disponible sur https://sites.google.com/a/esi.dz/s-
aroussi/algorithmique-et-structure-de-donnees/nouveau-programme .
A. Aroussi, Cours d’Algorithmique Avancé, Université Saad Dahlab de Blida, 2013,
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/Algorithmique/annee-
universitaire-2013-2014-3gsi 233

Contenu connexe

Tendances

Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac Amri Ossama
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Gestion des threads
Gestion des threadsGestion des threads
Gestion des threadsSana Aroussi
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMajid CHADAD
 
Compte rendu de tp de commande numerique
Compte rendu de tp de commande numeriqueCompte rendu de tp de commande numerique
Compte rendu de tp de commande numeriqueELMEHDYELWARDY
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeurAbdelwahab Naji
 
Correction TD Adressage IP.pdf
Correction  TD Adressage IP.pdfCorrection  TD Adressage IP.pdf
Correction TD Adressage IP.pdfssuser18776b
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmiqueelharraj
 
Base de-donn-es-bac-si-95ae18
Base de-donn-es-bac-si-95ae18Base de-donn-es-bac-si-95ae18
Base de-donn-es-bac-si-95ae18Wael Ismail
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données IIRiadh Bouslimi
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmiqueHajer Trabelsi
 
Chapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateurChapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateurSana Aroussi
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsSana Aroussi
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 

Tendances (20)

Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
Gestion des threads
Gestion des threadsGestion des threads
Gestion des threads
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Compte rendu de tp de commande numerique
Compte rendu de tp de commande numeriqueCompte rendu de tp de commande numerique
Compte rendu de tp de commande numerique
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeur
 
Correction TD Adressage IP.pdf
Correction  TD Adressage IP.pdfCorrection  TD Adressage IP.pdf
Correction TD Adressage IP.pdf
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Base de-donn-es-bac-si-95ae18
Base de-donn-es-bac-si-95ae18Base de-donn-es-bac-si-95ae18
Base de-donn-es-bac-si-95ae18
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmique
 
Chapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateurChapitre i architecture générale de l’unité centrale d’un ordinateur
Chapitre i architecture générale de l’unité centrale d’un ordinateur
 
Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récents
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 

En vedette

Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015Remy EXELMANS
 
Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Techsauce Media
 
[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?heaven
 
Operating Systems - File Management
Operating Systems -  File ManagementOperating Systems -  File Management
Operating Systems - File ManagementDamian T. Gordon
 
Avancées sur les Petites Installations d’Assainissement et leurs conditions d...
Avancées sur les Petites Installations d’Assainissement et leurs conditions d...Avancées sur les Petites Installations d’Assainissement et leurs conditions d...
Avancées sur les Petites Installations d’Assainissement et leurs conditions d...idealconnaissances
 
Acquisition clients 2013, comprendre et agir.
Acquisition clients 2013, comprendre et agir.Acquisition clients 2013, comprendre et agir.
Acquisition clients 2013, comprendre et agir.SID-Networks
 
Digitalisation de l'entreprise et son impact sur les métiers
Digitalisation de l'entreprise et son impact sur les métiersDigitalisation de l'entreprise et son impact sur les métiers
Digitalisation de l'entreprise et son impact sur les métiersNeïla Meknassi
 
Have more breakthrough ideas
Have more breakthrough ideasHave more breakthrough ideas
Have more breakthrough ideasPhil Wylie
 
Elementos De La Circunferencia
Elementos De La CircunferenciaElementos De La Circunferencia
Elementos De La Circunferenciaguestdf1aaa
 
Componentes Proceso De InvestigacióN CientíFica
Componentes Proceso De InvestigacióN CientíFicaComponentes Proceso De InvestigacióN CientíFica
Componentes Proceso De InvestigacióN CientíFicaguilleguille
 
Las 100 mejores rokas
Las 100 mejores rokasLas 100 mejores rokas
Las 100 mejores rokasabelmoises
 
Curso de electricidad del automovil estudio del alternador
Curso de electricidad del automovil   estudio del alternadorCurso de electricidad del automovil   estudio del alternador
Curso de electricidad del automovil estudio del alternadorAlvaro Cortez Gomez
 
Nutrilite Lina Gonzalez marzo 2010
Nutrilite Lina Gonzalez marzo 2010Nutrilite Lina Gonzalez marzo 2010
Nutrilite Lina Gonzalez marzo 2010Jorge Morales
 

En vedette (20)

Cuisson vapeur
Cuisson vapeurCuisson vapeur
Cuisson vapeur
 
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
Cours IFAG RÉUNION - Stratégie Commerciale - aout 2015
 
Ecgs200 2
Ecgs200 2Ecgs200 2
Ecgs200 2
 
Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017
 
[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?[heaven] #Unchained : comment quitter Facebook ?
[heaven] #Unchained : comment quitter Facebook ?
 
Operating Systems - File Management
Operating Systems -  File ManagementOperating Systems -  File Management
Operating Systems - File Management
 
Avancées sur les Petites Installations d’Assainissement et leurs conditions d...
Avancées sur les Petites Installations d’Assainissement et leurs conditions d...Avancées sur les Petites Installations d’Assainissement et leurs conditions d...
Avancées sur les Petites Installations d’Assainissement et leurs conditions d...
 
Acquisition clients 2013, comprendre et agir.
Acquisition clients 2013, comprendre et agir.Acquisition clients 2013, comprendre et agir.
Acquisition clients 2013, comprendre et agir.
 
Anatomie des business models des maisons de mode et de luxe
Anatomie des business models des maisons de mode et de luxeAnatomie des business models des maisons de mode et de luxe
Anatomie des business models des maisons de mode et de luxe
 
Digitalisation de l'entreprise et son impact sur les métiers
Digitalisation de l'entreprise et son impact sur les métiersDigitalisation de l'entreprise et son impact sur les métiers
Digitalisation de l'entreprise et son impact sur les métiers
 
Have more breakthrough ideas
Have more breakthrough ideasHave more breakthrough ideas
Have more breakthrough ideas
 
Snapshot of Digital India - May 2015
Snapshot of Digital India - May 2015Snapshot of Digital India - May 2015
Snapshot of Digital India - May 2015
 
Elementos De La Circunferencia
Elementos De La CircunferenciaElementos De La Circunferencia
Elementos De La Circunferencia
 
Componentes Proceso De InvestigacióN CientíFica
Componentes Proceso De InvestigacióN CientíFicaComponentes Proceso De InvestigacióN CientíFica
Componentes Proceso De InvestigacióN CientíFica
 
Transducers
TransducersTransducers
Transducers
 
MIOCARDIOPATIAS
MIOCARDIOPATIASMIOCARDIOPATIAS
MIOCARDIOPATIAS
 
Las 100 mejores rokas
Las 100 mejores rokasLas 100 mejores rokas
Las 100 mejores rokas
 
Optimizacion
OptimizacionOptimizacion
Optimizacion
 
Curso de electricidad del automovil estudio del alternador
Curso de electricidad del automovil   estudio del alternadorCurso de electricidad del automovil   estudio del alternador
Curso de electricidad del automovil estudio del alternador
 
Nutrilite Lina Gonzalez marzo 2010
Nutrilite Lina Gonzalez marzo 2010Nutrilite Lina Gonzalez marzo 2010
Nutrilite Lina Gonzalez marzo 2010
 

Plus de Sana Aroussi

Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court cheminSana Aroussi
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesSana Aroussi
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétudeSana Aroussi
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminSana Aroussi
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statiqueSana Aroussi
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesSana Aroussi
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Chapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busChapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busSana Aroussi
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptionsSana Aroussi
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoiresSana Aroussi
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsSana Aroussi
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Sana Aroussi
 
Chapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursChapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursSana Aroussi
 
Chapitre iii circuits séquentiels
Chapitre iii circuits séquentielsChapitre iii circuits séquentiels
Chapitre iii circuits séquentielsSana Aroussi
 

Plus de Sana Aroussi (19)

Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiques
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court chemin
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statique
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Chapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busChapitre iv entrées sorties et bus
Chapitre iv entrées sorties et bus
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptions
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoires
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86
 
Chapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursChapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeurs
 
Chapitre iii circuits séquentiels
Chapitre iii circuits séquentielsChapitre iii circuits séquentiels
Chapitre iii circuits séquentiels
 

Dernier

La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 

Dernier (13)

La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 

Chapitre 5 structures hierarchiques (arbres)

  • 1. CHAPITRE V: Université Saad Dahlab de Blida Faculté des Sciences Département d’Informatique Licence d’Informatique Semestre 4 (2ème année) Algorithmique et Structures de Données CHAPITRE V: STRUCTURES HIÉRARCHIQUES Mme AROUSSI 2014-2015 Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
  • 2. Introduction Définitions 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
  • 3. Dans les tableaux, nous avons : Un accès direct par indice (rapide) L’insertion et la suppression nécessitent des décalages Dans les Listes Linéaires Chaînées, nous avons : Un accès séquentiel lent INTRODUCTION 3 Un accès séquentiel lent L’insertion et la suppression se font uniquement par modification de chaînage Les arbres représentent un compromis entre les deux : Un accès relativement rapide à un élément à partir de sa clé L’insertion et la suppression non coûteuses
  • 4. De plus, les arbres sont des structures de données fondamentales en informatique, très utilisés dans tous les domaines, parce qu’ils sont bien adaptés à la représentation naturelle d’informations homogènes INTRODUCTION 4 représentation naturelle d’informations homogènes organisées, et d’une grande commodité et rapidité de manipulation.
  • 5. Leur usage est multiple, car il capte l’idée de hiérarchie; à titre d’exemples, nous pouvons citer: Découpage d’un 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
  • 6. Leur usage est multiple, car il capte l’idée de hiérarchie; à titre d’exemples, nous pouvons citer: Hiérarchies de fichiers, INTRODUCTION 6
  • 7. Leur usage est multiple, car il capte l’idée de hiérarchie; à titre d’exemples, nous pouvons citer: Expressions Arithmétiques INTRODUCTION - 7 - A * + F B * C - D E L’expression A - (B + C * (D - E)) * F se représente facilement par un arbre où apparaît clairement la priorité des opérations:
  • 8. DÉFINITION & TERMINOLOGIES Un arbre est une structure de données (souvent dynamique) représentant un ensemble de valeurs organisées hiérarchiquement (non linéaire). Chaque valeur est stockée dans un nœud. Les nœuds sont connectés entre eux par des arêtes qui représentent des relations parent/fils. 8 A C DB E G HF I LKJ NœudsArêtes
  • 9. DÉFINITION & TERMINOLOGIES Racine: est le nœud qui n'a pas de prédécesseur (parent) et possède zéro ou plusieurs fils. La racine constitue la caractéristique d'un arbre. A C DB E G HF I Racine Nœud interne 9 Feuille : est un nœud qui n'a pas de successeur (fils). Une feuille est aussi appelée un nœud externe. Nœud interne : est tout nœud qui admet au moins un successeur (fils). E G HF I LKJ Feuilles
  • 10. Dans les tableaux, nous avons : Un accès direct par indice (rapide) L’insertion et la suppression nécessitent des décalages Dans les Listes Linéaires Chaînées, nous avons : Un accès séquentiel lent INTRODUCTION 3 Un accès séquentiel lent L’insertion et la suppression se font uniquement par modification de chaînage Les arbres représentent un compromis entre les deux : Un accès relativement rapide à un élément à partir de sa clé L’insertion et la suppression non coûteuses
  • 11. DÉFINITION & TERMINOLOGIES Sous arbre : est une portion de l'arbre. Dans l'exemple, le nœud G avec ces deux fils J et K constituent un sous arbre. Une branche est une suite de A C DB 11 nœuds connectés de père en fils (de la racine à une feuille). A-B-E A-C A-D-F A-D-G-J ….. E G HF I LKJ
  • 12. DÉFINITION & TERMINOLOGIES Descendants d’un nœud : sont tous les nœuds du sous arbre de racine nœud. Dans l'exemple, les descendants de D sont D, F, G, H, I, J, K et L. A C DB 12 Ascendants d’un nœud : sont tous les nœuds se trouvant sur la branche de la racine vers ce nœud. 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
  • 13. DÉFINITION & TERMINOLOGIES Taille d’un arbre: est le nombre de nœuds qu’il possède. Taille de l’arbre ci contre = 12 Un arbre vide est de taille égale à 0. Degré d’un nœud : est le A C DB 13 Degré d’un nœud : est le nombre de ses fils. Dans l'exemple, le degré de B est 1, le degré de D est 4. Degré d’un arbre : est le degré maximum de ses nœuds. Degré de l’arbre ci contre = 4 E G HF I LKJ
  • 14. DÉFINITION & TERMINOLOGIES Le niveau d'un nœud: est la distance qui le sépare de la racine: Le niveau de la racine = 0 Le niveau de chaque nœud est égale au niveau de son père plus 1 Le niveau du nœud contenant ‘G' est égal à 2. RacineNiveaux 14 Racine …..…………..……………………………………………....... ………………..……………………………………………....... ………………………………....... .……………………………………………....... A C DB E G HF I LKJ Niveaux 0 1 2 3
  • 15. De plus, les arbres sont des structures de données fondamentales en informatique, très utilisés dans tous les domaines, parce qu’ils sont bien adaptés à la représentation naturelle d’informations homogènes INTRODUCTION 4 représentation naturelle d’informations homogènes organisées, et d’une grande commodité et rapidité de manipulation.
  • 16. DÉFINITION & TERMINOLOGIES Forêt : est un ensemble d'arbres. A C DB 16 E G HF I L KJ
  • 17. DÉFINITION & TERMINOLOGIES Définition récursive Cas particulier: NIL est un arbre vide, contenant zéro nœud Racine Racine de T1 Cas général: SI n est un nœud et si T1, T2, ...Tm sont des arbres, ALORS on peut 17 T1 T’1 Racine de T’1 construire un nouvel arbre en connectant T1, T2, ...Tm comme des fils à n. Chaque Ti est définit de la même manière (récursivement). T1, T2, ...Tm sont alors des sous- arbres de n.
  • 18. TYPOLOGIE Arbre m-aire : un arbre m-aire d’ordre n est un arbre ou le degré maximum d’un nœud est égal à n. B-Arbre : Un arbre B d’ordre n est un arbre où : la racine a au moins 2 fils chaque nœud, autre que la racine, a entre n/2 et n fils tous les nœuds feuilles sont au même niveau 18 tous les nœuds feuilles sont au même niveau Arbre binaire : c’est un arbre où le degré maximum d’un nœud est égal à 2. Arbre de Recherche Binaire : c’est un arbre binaire où la clé de chaque nœud est supérieure à celles de ses descendants gauche, et inférieure à celles de ses descendants droits. ……
  • 20. Leur usage est multiple, car il capte l’idée de hiérarchie; à titre d’exemples, nous pouvons citer: Découpage d’un 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
  • 21. DÉFINITION Un arbre binaire est un arbre où chaque nœud est connecté à deux sous-arbres (un sous-arbre gauche et un sous-arbre droit). Donc, un arbre binaire est un arbre de degré 2, c’est-à-dire que chaque nœuds a au plus deux fils. Ainsi, le premier fils d'un nœud n est appelé Fils-Gauche (FG) et le deuxième fils est appelé Fils- 21 Droit (FD). A B C KG F H I J racine D NIL
  • 22. DÉFINITION Un arbre binaire est dit strictement binaire si chaque nœud interne (non feuille) a exactement 2 fils différents de NIL. Si un arbre strictement binaire a n feuilles Alors : le nombre total de ses nœuds = 2n-1. le nombre de ses nœuds non feuilles (nœuds 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 nœuds : 2n-1=11 Le nombre de nœuds internes: n-1=5 (A, B, F, G, I)
  • 23. DÉFINITION Un arbre binaire complet est un arbre strictement binaire où toutes les feuilles sont au même niveau. Dans un arbre binaire complet de profondeur « d » : le nombre total de nœuds n = 20 + 21 + 22 + ... 2d = 2d+1-1 ainsi, d = log2(n+1) – 1 le nombre de nœuds internes = 23 le nombre de nœuds internes = 2d-1 le nombre de feuilles = 2d le nombre de nœuds dans le niveau i = 2i racine D A B C KG F
  • 24. DÉFINITION Un arbre binaire complet est un arbre strictement binaire où toutes les feuilles sont au même niveau. Dans l’exemple ci dessous: d = 2 le nombre total de nœuds n = 23-1 = 7 le nombre de nœuds internes = 24 le nombre de nœuds internes = 22-1 = 3 le nombre de feuilles = 22 = 4 le nombre de nœuds dans le niveau 1 = 2 racine D A B C KG F
  • 25. MODÈLE L'arbre est implémenté souvent de manière dynamique comme un ensemble de maillons (nœuds) chaînés entre eux. La structure d'un nœud de l'arbre est la suivante : 25 Structure de Données TYPE Tnoeud = STRUCTURE Info : Typeqq FG : * Tnoeud FD : * Tnoeud FIN VAR Arbre : * Tnoeud
  • 26. Leur usage est multiple, car il capte l’idée de hiérarchie; à titre d’exemples, nous pouvons citer: Hiérarchies de fichiers, INTRODUCTION 6
  • 27. PARCOURS Le parcours d’un arbre consiste à passer par tous ses nœuds. Les parcours permettent d’effectuer 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 Préordre, l‘Inordre et le Postordre. Des parcours en largeur (breadth-first) explorent l'arbre niveau par niveau
  • 28. PARCOURS EN PROFONDEUR Dans un parcours en profondeur, on descend le plus profondément possible dans l’arbre puis, une fois qu’une feuille a été atteinte, on remonte pour explorer les autres branches en commençant 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 : Préordre (Préfixe) : où on affiche la racine avant ses fils (Racine FG FD), Inordre (Infixe) : où on affiche le fils gauche avant sa racine et son frère droit (FG Racine FD), Postordre(Postfixe) : où on affiche les fils avant leur racine (FG FD Racine).
  • 29. PARCOURS EN PROFONDEUR Ces parcours (préordre, inordre et postordre) sont des parcours simples à définir et à programmer (en récursif). Soit R un arbre binaire (pouvant être vide : R=NIL). S'il n'est pas vide (n pointe le nœud racine), alors il a la forme suivante (avec T1 et T2 des sous arbres définis de la même manière 29 que n) : R T1 T2 Sous arbre gauche G Sous arbre droit D
  • 30. PARCOURS PREORDRE Le parcours préordre de R (s'il n'est pas vide) consiste à visiter le nœud racine (R) ensuite parcourir récursivement en préordre 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
  • 31. PARCOURS PREORDRE Le parcours préordre de R (s'il n'est pas vide) consiste à visiter le nœud racine (R) ensuite parcourir récursivement en préordre 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 CRésultat de parcours:
  • 32. PARCOURS PREORDRE La procédure (récursive) qui affiche les valeurs en parcours préordre d’un arbre de racine R est : Procédure Préordre( R:* Tnoeud ) Début SI R ≠ NIL 32 SI R ≠ NIL ecrire( Info(R) ) Préordre( FG(R) ) Préordre( FD(R) ) FSI fin
  • 33. PARCOURS INORDRE Le parcours inordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en inordre le sous arbre gauche T1, puis visiter le nœud racine (R) ensuite parcourir récursivement 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
  • 34. PARCOURS INORDRE Le parcours inordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en inordre le sous arbre gauche T1, puis visiter le nœud racine (R) ensuite parcourir récursivement 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 Résultat de parcours: H ID EB F GA C
  • 35. PARCOURS INORDRE La procédure (récursive) qui affiche les valeurs en parcours inordre d’un arbre de racine R est : Procédure Inordre( R:*Tnoeud ) Début SI R ≠ NIL 35 SI R ≠ NIL Inordre( FG(R) ) ecrire( Info(R) ) Inordre( FD(R) ) FSI fin
  • 36. PARCOURS POSTORDRE Le parcours postordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en postordre les sous arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui donne [ T1 , T2 , R ou GDR] 36 R T1 T2 Sous arbre gauche G Sous arbre droit D
  • 37. PARCOURS POSTORDRE Le parcours postordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en postordre les sous arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui donne [ T1 , T2 , R ou GDR] 37 A B C E GD F H I Résultat de parcours: HIDEBFG AC
  • 38. PARCOURS POSTORDRE La procédure (récursive) qui affiche les valeurs en parcours postordre d’un arbre de racine R est : Procédure Postordre( R: *Tnoeud) Début SI R≠NIL 38 SI R≠NIL Postordre( FG(R) ) Postordre( FD(R) ) ecrire( Info(R) ) FSI fin
  • 39. PARCOURS EN PROFONDEUR On peut faire ces trois parcours sans utiliser la récursivité. 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 nœuds par lesquels on est descendu et les dépiler quand on en aura besoin pour remonter. 39 les dépiler quand on en aura besoin pour remonter. On peut aussi enrichir la structure des nœuds en incluant un pointeur vers le nœud père. Il existe d'autres types de parcours en profondeur, comme par exemple: Le préordre inverse (R T2 T1 ou RDG), L'inordre inverse (T2 R T1 ou DRG), Le postordre inverse (T2 T1 R ou DGR).
  • 40. PARCOURS EN LARGEUR Dans le parcours par niveau, tous les nœuds d’un même niveau sont traités avant de descendre au niveau suivant Résultat de parcours:A HIDEB FGA C 40 B C E GD F H I HIDEB FGA C
  • 41. PARCOURS EN LARGEUR Dans le parcours par niveau, tous les nœuds d’un même niveau sont traités avant de descendre au niveau suivant Procédure parcours_largeur( R:* Tnoeud ) Var F:filed’attente; P: *Tnoeud; Debut P←R; 41 P←R; 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)); FTQ Fin
  • 42. REPRÉSENTATION CONTIGÜE On peut présenter les arbres de manière statique en utilisant les tableaux. Représentation Standard: Chaque élément du tableau possède 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 booléen pour indiquer si la case est libre ou occupée. TYPE Tnoeud= STRUCTURE Info : Typeqq FG : entier FD : entier vide: booléen FIN
  • 43. REPRÉSENTATION CONTIGÜE Représentation Standard: Si la racine de l’arbre est toujours à la position 1 du tableau, l’arbre sera défini 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 ? ? ?
  • 44. Leur usage est multiple, car il capte l’idée de hiérarchie; à titre d’exemples, nous pouvons citer: Expressions Arithmétiques INTRODUCTION - 7 - A * + F B * C - D E L’expression A - (B + C * (D - E)) * F se représente facilement par un arbre où apparaît clairement la priorité des opérations:
  • 45. REPRÉSENTATION CONTIGÜE Représentation Séquentielle : Dans cette représentation, on élimine les pointeurs entiers (FG, FD et éventuellement Père), en associant à chaque nœud de l'arbre une position fixe prédéfinie dans le tableau: La case d’indice 0 sera toujours vide La case d'indice 1 sera toujours réservée au nœud racine de l'arbre, 45 La case d'indice 1 sera toujours réservée au nœud racine de l'arbre, La case d'indice 2 sera toujours réservée au FG de la racine, La case d'indice 3 sera toujours réservée au FD de la racine, En général, 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 père de la case i il sera toujours positionné à la case i div 2. i div 2 i 2i 2i+1 Père …. Nœud …. FG FD ….
  • 46. REPRÉSENTATION CONTIGÜE Représentation Séquentielle : TYPE Tnoeud= STRUCTURE Info : Typeqq vide: booléen FIN 46 Indice 0 1 2 3 4 5 Info - a b e c d Vide V F F F F F Chaque nœud à l’indice i a pour: nœud à l’indice (2i) = fils de gauche. nœud à l’indice (2i+1) = fils de droite. nœud à l’indice (i div 2) = père.
  • 47. EXEMPLES D’APPLICATION Représentation des Expressions Arithmétiques : Les expressions arithmétiques peuvent êtres représentées sous forme d'arbre binaire. Les nœuds internes contiennent des opérateurs, alors que les feuilles contiennent des valeurs (opérandes). 47 Exemple: l'expression (a-b)*((c+d)/e) sera représentée par l'arbre suivant : c e * - / + d ba
  • 48. EXEMPLES D’APPLICATION Représentation des Expressions Arithmétiques : Les différentes formes de représentation d’une expression arithmétiques peuvent être trouvés en parcourant l’arbre: Le parcours en préordre (RGD) donne la forme polonaise préfixée, Le postordre (GDR) donne la forme postfixée Le parcours inordre (GRD) donne la forme infixée (forme normale 48 Le parcours inordre (GRD) donne la forme infixée (forme normale sans parenthèses) c e * - / + d ba
  • 49. EXEMPLES D’APPLICATION Représentation des Expressions Arithmétiques : L’évaluation d’une expression arithmétiques peuvent se faire en utilisant les différentes formes (préordre, postordre et inordre) et les deux fonctions suivantes: La fonction Opérande(T) qui retourne vrai si T est un opérande, sinon elle retourne faux. 49 opérande, sinon elle retourne faux. La fonction Calcul qui permet de calculer l’opération arithmétique entre deux opérandes
  • 50. EXEMPLES D’APPLICATION Représentation des Expressions Arithmétiques : Fonction Eval_inordre(A: *Tnoeud): réel SI (A= Null) alors Retourner (0) SINON SI Operande(A) alors Retourner (Info(A)) SINON 50 c e * - / + d ba SINON Eval ← Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A))) FSI
  • 51. EXEMPLES D’APPLICATION Représentation d’une Liste Linéaire Chaînée (LLC): On peut représenter une liste linéaire chaînée par un arbre binaire de la façon suivante : Les éléments de la liste sont au niveau des feuilles. Chaque nœud 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 Présentation statique sous forme d’un tableau a b c d e f g
  • 52. DÉFINITION & TERMINOLOGIES Un arbre est une structure de données (souvent dynamique) représentant un ensemble de valeurs organisées hiérarchiquement (non linéaire). Chaque valeur est stockée dans un nœud. Les nœuds sont connectés entre eux par des arêtes qui représentent des relations parent/fils. 8 A C DB E G HF I LKJ NœudsArêtes
  • 53. EXEMPLES D’APPLICATION Représentation d’une Liste Linéaire Chaînée (LLC): Fonction LLCToArbreB (Tab: Tableau, Deb, Fin: entier) : * Tnoeud Var x:Typeqcq; P:*Tnoeud; Mil: entier Debut Si Deb = Fin alors x.Nbr_F 0 x.Val Tab[Deb] Type Typeqcq = Structure Nbr_F: entier Val: caractère Fin 53 x.Val Tab[Deb] P CreerNoeud(x) Sinon Mil (Deb+Fin) div 2 x.Nbr_F Mil + 1 x.Val ’’ P CreerNoeud(x) Aff_FG(P, LLCToArbreB(Tab, Deb, Mil)) Aff_FD(P, LLCToArbreB(Tab, Mil+1, Fin)) Retourner (P) Fin Type Tnoeud = Structure Info: Typeqcq FG: *Tnoeud FD: *Tnoeud Fin Fin
  • 54. EXEMPLES D’APPLICATION Représentation d’une Liste Linéaire Chaînée (LLC): Cette représentation répond avec efficacité au problème de la recherche du Kème élément. Si la position recherchée est inférieure ou égale à l'information du nœud interne on descend à gauche, sinon on descend à droite et en retranche à la position recherchée l'information du nœud. 54 et en retranche à la position recherchée l'information du nœud. Exemple: a. Rechercher le 3ème élément de la liste b. Rechercher le 6ème élément de la liste c. Rechercher le 9ème élément de la liste (n’existe pas!) a b c d e f g 3ème 6ème
  • 55. EXEMPLES D’APPLICATION Représentation d’une Liste Linéaire Chaînée (LLC): 4 22 3 3 6 6 – 4 = 2 9 9 – 4 = 5 55 1 e f g1 1 a b c d 3ème 6ème 3- 2 = 1 1 2 2 – 1 = 1 5 - 2 = 3!!!
  • 56. EXEMPLES D’APPLICATION Représentation d’une Liste Linéaire Chaînée (LLC): Fonction Rechercher_Pos (R:*Tnoeud, K: entier) : * Tnoeud Debut TQ non Feuille (R) faire Si Info (R).Nbr_F ≤ K alors R FG(R) Sinon Fonction Feuille (R:*Tnoeud): booléen Debut 56 Sinon K K- Info (R).Nbr_F R FD(R) FTQ Si K = 1 alors Retourner (R) Sinon Retourner (Null) Fin Debut Si R ≠ Null alors Si FG(R) = Null et et FD (R) = Null alors Retourner (vrai) FSI Retourner (Faux) Fin
  • 57. DÉFINITION & TERMINOLOGIES Racine: est le nœud qui n'a pas de prédécesseur (parent) et possède zéro ou plusieurs fils. La racine constitue la caractéristique d'un arbre. A C DB E G HF I Racine Nœud interne 9 Feuille : est un nœud qui n'a pas de successeur (fils). Une feuille est aussi appelée un nœud externe. Nœud interne : est tout nœud qui admet au moins un successeur (fils). E G HF I LKJ Feuilles
  • 58. Définition Complexité PLAN DE LA PARTIE III Parcours Opérations de Recherche et de mise à jours (Insertion et Suppression) Exemples d’application: Tri par ABR 58
  • 59. DÉFINITION Un Arbre Binaire de Recherche (ABR) est un arbre binaire ordonné tel que pour tout nœud n: Toutes les valeurs du sous-arbe gauche de n sont strictement inférieures à la valeur de n, et Toutes les valeurs du sous-arbre droit de n sont supérieures ou 59 égales à la valeur de n.
  • 60. DÉFINITION Un Arbre Binaire de Recherche (ABR) est un arbre binaire ordonné tel que pour tout nœud « i »: Toutes les valeurs du sous-arbre gauche de « i » sont strictement inférieures à la clé de « i », et Toutes les valeurs du sous-arbre droit de « i » sont supérieures ou 60 égales à la clé de « i ». Intérêt de cette propriété : diminuer la complexité temporel de recherche, d’insertion et de suppression dans l’arbre
  • 61. COMPLEXITÉ Intérêt de cette propriété : diminuer la complexité temporel de recherche, d’insertion et de suppression dans l’arbre 87 ? 61 O (n) O (h) tel que h = log2(n) dans un arbre équilibré
  • 62. PARCOURS Voici un exemple d’un ARB contenant des valeurs entières, appliquer les différents 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 ordonnée suivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59, 71
  • 63. OPÉRATION DE RECHERCHE La recherche est dichotomique, à chaque étape, un sous arbre est éliminé: Rechercher (55) Rechercher (FD(20)) Rechercher (FG(59)) 20 55 ? 63 Rechercher (FG(59)) Rechercher (FD(27)) Rechercher (FD (33)) Élément trouvé 15 59 5 3 10 27 71 33 8 55 52
  • 64. OPÉRATION DE RECHERCHE Fonction 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
  • 65. OPÉRATION DE RECHERCHE Fonction 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 R FG(R) Sinon R FD(R) FTQ Retourner (Null) Fin
  • 66. OPÉRATION D’INSERTION L'insertion d'un élément se fait toujours au niveau d'une feuille. Cette insertion dans un ABR doit maintenir la propriété des arbres de recherche, ainsi: 1. Rechercher la position d’insertion 66 1. Rechercher la position d’insertion 2. Raccorder le nouveau nœud à son parent
  • 67. OPÉRATION D’INSERTION 20 15 59 5 3 10 27 71 33 + 25 25 67 RechercherPosition (25) Rechercher (FD(20)) Rechercher (FG(59)) Position trouvé pour l’insertion, le père est le nœud 27 Insérer 25 au niveau de la feuille dont le père est 27 3 10 8 55 52 25
  • 68. OPÉRATION D’INSERTION Fonction InsererABR_rec (R:*Tnoeud, x: entier) : * Tnoeud Debut Si R = Null alors R CreerNoeud(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
  • 69. OPÉRATION D’INSERTION Fonction InsererABR_iter (R:*Tnoeud, x: entier) : * Tnoeud Var P, Q: *Tnoeud Debut P CreerNoeud(x) Si R = Null alors R P Sinon Q R 69 Q R TQ (Q≠Null) faire Si Info(Q)>x alors Si FG(Q) = Null alors Aff_FG(Q, P) Q FG(Q) Sinon Si FD(Q)=Null alors Aff_FD(Q, P) Q FD(Q) Retourner (R) Fin
  • 70. OPÉRATION DE SUPPRESSION Pour supprimer le nœud « i » d’un ARB, il faudra le rechercher. Une fois le nœud « i » trouvé, on se trouve dans une des situations suivantes : 70
  • 71. OPÉRATION 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 nœud i qui contient la valeur 8 1. Rechercher(8) 2. Libérer le nœud « i » 20 71« i » 15 59 5 3 10 27 71 33 8 55 52 12
  • 72. OPÉRATION DE SUPPRESSION Cas 2: Suppression d'un nœud avec un fils Il faut l'enlever de l'arbre en le remplaçant par son fils. Exemple: supprimer le nœud i qui contient la valeur 10 1. Rechercher(10) 2. Chainer le père de i avec le FD(i) 20 72 3. Libérer le nœud « i » « i » 15 59 5 3 10 27 71 33 12 55 52
  • 73. OPÉRATION DE SUPPRESSION Cas 2: Suppression d'un nœud avec un fils Il faut l'enlever de l'arbre en le remplaçant par son fils. Exemple: supprimer le nœud i qui contient la valeur 10 1. Rechercher(10) 2. Chainer le père de i avec le FG(i) 20 73 3. Libérer le nœud « i » « i » 15 59 5 3 10 27 71 33 55 52 8
  • 74. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Etape 1: On échange le nœud à supprimer avec son successeur le plus proche (le nœud le plus à gauche du sous-arbre droit) ou son plus proche prédécesseur (le nœud 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 prédécesseur Le plus proche successeur
  • 75. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Etape 1 Cas A: On échange le nœud à supprimer avec son successeur le plus proche (le nœud 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
  • 76. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Etape 1 Cas A: On échange le nœud à supprimer avec son successeur le plus proche (le nœud 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): *Tnoeud Debut R FD(R) Si R≠Null alors TQ FG(R)≠Null faire R FG(R) Retourner (R) Fin
  • 77. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Etape 1 Cas A: On échange le nœud à supprimer avec son plus proche prédécesseur (le nœud 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
  • 78. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Etape 1 Cas A: On échange le nœud à supprimer avec son plus proche prédécesseur (le nœud 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): *Tnoeud Debut R FG(R) Si R≠Null alors TQ FD(R)≠Null faire R FD(R) Retourner (R) Fin
  • 79. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Etape 2: on applique à nouveau la procédure de suppression qui est maintenant une feuille ou un nœud avec un seul fils. Ainsi, si on choisit d’échanger le nœud « 66 » avec son plus proche successeur « 69 », on obtient 34 79 34 66 50 56 55 71 70 69 81 22 8 17 9 29 25 23 32 69
  • 80. OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils Puis on applique à nouveau la procédure de suppression qui est maintenant une feuille ou un nœud avec un seul fils. Ainsi, si on choisit d’ échanger le nœud « 66 » avec son plus proche prédécesseur « 56 », on obtient 34 80 34 66 50 55 71 70 69 81 22 8 17 9 29 25 23 32 56
  • 81. DÉFINITION & TERMINOLOGIES Fils d’un nœud : sont ses successeurs. Dans l'exemple, F, G, H, et I sont les fils du nœud D. Frères : sont les successeurs ou les fils issus d'un même nœud A C DB 10 (parent direct). Dans l'exemple, B, C et D sont des frères. Père : est un nœud qui admet au moins un successeur (fils). Dans l'exemple, D est le père des nœuds F, G, H et I. E G HF I LKJ
  • 82. OPÉRATION DE SUPPRESSION Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud Var P, Q: *Tnoeud Debut RechercherABR (R, x, Q, P) Procedure RechercherABR (R: *Tnoeud, x: entier, Var Q: *Tnoeud, Var Père: *Tnoeud) Père Null; Q Null; TQ R ≠ Null faire Si Info (R) = x alors Cette procédure retourne l’adresse du 82 Si Info (R) = x alors Q R Sinon Père R Si Info(R)>x alors R FG(R) Sinon R FD(R) FTQ retourne l’adresse du nœud contenant x (soit Q) ainsi que l’adresse de son père (soit Père)
  • 83. OPÉRATION DE SUPPRESSION Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud Var P, Q: *Tnoeud Debut RechercherABR (R, x, Q, P) Si Q ≠ Null alors // l’élément x existe dans Q Si FG(Q) = Null alors Si FD(Q) = Null alors //Cas n°1: Q est une feuille 83 //Cas n°1: Q est une feuille Chaîner (R, P, Null, x) Sinon //Cas n°2: Q possède un FD Chaîner (R, P, FD(Q), x) Sinon Si FD(Q) = Null alors //Cas n°2: Q possède un FG Chaîner (R, P, FG(Q), x) Cette procédure permet de chaîne le père de Q (P) avec le Fil de Q selon la valeur de x
  • 84. OPÉRATION DE SUPPRESSION Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud Var P, Q: *Tnoeud Debut RechercherABR (R, x, Q, P) Si Q ≠ Null alors // l’élément x existe dans Q Si FG(Q) = Null alors Si FD(Q) = Null alors //Cas n°1: Q est une feuille Procedure Chaîner (Var R: *Tnoeud , PèreQ: *Tnoeud, FilsQ: *Tnoeud, x: entier) 84 //Cas n°1: Q est une feuille Chaîner (R, P, Null, x) Sinon //Cas n°2: Q possède un FD Chaîner (R, P, FD(Q), x) Sinon Si FD(Q) = Null alors //Cas n°2: Q possède un FG Chaîner (R, P, FG(Q), x) FilsQ: *Tnoeud, x: entier) Si PèreQ = Null alors R FilsQ Sinon Si Info(P)>x alors Aff_FG(P, FilsQ) Sinon Aff_FD(P, FilsQ)
  • 85. OPÉRATION DE SUPPRESSION Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud Var P, Q: *Tnoeud Debut RechercherABR (R, x, Q, P) Si Q ≠ Null alors // l’élément x existe dans Q Si FG(Q) = Null alors Si FD(Q) = Null alors //Cas n°1: Q est une feuille Chaîner (R, P, Null, x) Sinon //Cas n°2: Q possède un FD 85 Sinon //Cas n°2: Q possède un FD Chaîner (R, P, FD(Q), x) Sinon Si FD(Q) = Null alors //Cas n°2: Q possède un FG Chaîner (R, P, FG(Q), x) Sinon // Cas n°3: Q possède deux fils Successeur (Q, S, PS) Cette procédure retourne l’adresse du successeur de Q (S) ainsi que l’adresse de son père (PS)
  • 86. DÉFINITION & TERMINOLOGIES Sous arbre : est une portion de l'arbre. Dans l'exemple, le nœud G avec ces deux fils J et K constituent un sous arbre. Une branche est une suite de A C DB 11 nœuds connectés de père en fils (de la racine à une feuille). A-B-E A-C A-D-F A-D-G-J ….. E G HF I LKJ
  • 87. RechercherABR (R, x, Q, P) Si Q ≠ Null alors // l’élément x existe dans Q Fin faux TQ non fin faire Si FG(Q) = Null alors Si FD(Q) = Null alors //Cas n°1: Q est une feuille Chaîner (R, P, Null, x); Fin vrai Sinon //Cas n°2: Q possède un FD Chaîner (R, P, FD(Q), x); Fin vrai Sinon Si FD(Q) = Null alors //Cas n°2: Q possède un FG 87 Si FD(Q) = Null alors //Cas n°2: Q possède un FG Chaîner (R, P, FG(Q), x); Fin vrai Sinon // Cas n°3: Q possède deux fils Successeur (Q, S, P) Aff_Info (Q, Info(S)) Q S; P PS; x Info(S) FTQ LibérerNoeud(Q) FSI Retourner (R)
  • 88. OPÉRATION DE SUPPRESSION Fonction SupprimerABR_rec (R:*Tnoeud, x: entier) : * Tnoeud Debut Si R = Null alors Retourner (R) Sinon Si Info(R)>x alors Aff_FG(R, SupprimerABR_rec(FG(R), x)) 88 Aff_FG(R, SupprimerABR_rec(FG(R), x)) Retourner (R) Sinon Si Info(R)<x alors Aff_FD(R, SupprimerABR_rec(FD(R), x)) Retourner (R) Sinon // Info(R) = x Retourner (SupprimerRacine (R)) Fin
  • 89. OPÉRATION DE SUPPRESSION Fonction SupprimerRacine (R:*Tnoeud) : * Tnoeud Debut Si FG(R) = Null alors Si FD(R) = Null alors //Cas n°1: R est une feuille LibérerNoeud(R) Retourner (Null) Sinon //Cas n°2: R possède un FD D FD(R) LibérerNoeud(R) Retourner (D) 89 Retourner (D) Sinon Si FD(Q) = Null alors //Cas n°2: R possède un FG G FG(R) LibérerNoeud(R) Retourner (G) Sinon // Cas n°3: R possède deux fils S Successeur (R) Aff_Info (R, Info(S)) Aff_FD(R, SupprimerABR_rec(DF(R), Info(S))) Retourner (R) Fin
  • 90. EXEMPLE D’APPLICATION: TRI PAR ABR Étant donné un tableau d’entiers 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
  • 91. DÉFINITION & TERMINOLOGIES Descendants d’un nœud : sont tous les nœuds du sous arbre de racine nœud. Dans l'exemple, les descendants de D sont D, F, G, H, I, J, K et L. A C DB 12 Ascendants d’un nœud : sont tous les nœuds se trouvant sur la branche de la racine vers ce nœud. 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
  • 92. 2. Parcourir l’ABR en inordre : GRD 20 15 35 10 25 40 EXEMPLE D’APPLICATION: TRI PAR ABR 923 5 7 10 12 13 15 16 19 20 25 35 38 40 10 19 5 13 3 7 12 25 40 38 16
  • 93. Procedure Tri_ARB(Var T: Tableau, n: entier) Debut R Null Pour i 0 à n-1 faire R InsererABR (R, T[i]). Inordre (R, T); //Parcours Infixe EXEMPLE D’APPLICATION: TRI PAR ABR 93 Fin Indice est une variable globale initialisée à 0 Procedure Inordre (R: *Tnœud, Var T: Tableau) Si ( R ≠ Null) alors //Arbre n’est pas vide Inordre(FG(R), T)) T[indice] Info(R) //Écrire la valeur dans le tableau indice++ Inordre(FD(R), T)
  • 94. PARTIE IV: ARBRES BINAIRES DE R ÉRECHERCHE ÉQUILIBRÉS (ARBRES AVL)
  • 95. Introduction Définition PLAN DE LA PARTIE IV Techniques d’équilibrage Opérations de Base: Recherche, Insertion et Suppression 95
  • 96. DÉFINITION & TERMINOLOGIES Taille d’un arbre: est le nombre de nœuds qu’il possède. Taille de l’arbre ci contre = 12 Un arbre vide est de taille égale à 0. Degré d’un nœud : est le A C DB 13 Degré d’un nœud : est le nombre de ses fils. Dans l'exemple, le degré de B est 1, le degré de D est 4. Degré d’un arbre : est le degré maximum de ses nœuds. Degré de l’arbre ci contre = 4 E G HF I LKJ
  • 97. INTRODUCTION 87 ? ABR Equilibré Filiformes 97 O (n)O (h) tel que h = log2(n)
  • 98. DÉFINITION Les arbres AVL ont été introduits par les finlandais Adelson- Velskii et Landis dans les années 60. Un arbre AVL est un ABR équilibré dont: la différence de hauteur (ou profondeur) entre le sous- arbre gauche et le sous-arbre droit d'un nœud « R » diffère d'au plus 1. 98 d'au plus 1. |Profondeur(FG(R) ) – Profondeur(FD(R)) | ≤ 1 les arbres gauches et droits d'un nœud sont des arbres AVL. Un champs supplémentaire est ajouté à tous les nœuds: c’est le facteur de déséquilibre (appelé aussi facteur de balance « Bal ») qui est calculé après chaque insertion/suppression.
  • 99. EXEMPLE 100 50 200 Exemple: soit l’ABR suivant. Est-il un arbre AVL? +1 +1 +1 Notons: qu’une feuille est un arbre de hauteur 0, et que l’arbre vide a la hauteur −1. 99 30 80 10 150 40 0 0 0 0 hauteur −1. L’arbre vide et l’arbre réduit à une feuille, sont des arbres AVL Cet arbre est un arbre AVL À vérifier pour chaque nœud R, on a: | Profondeur(FG(R) ) – Profondeur(FD(R)) | <= 1
  • 100. EXEMPLE Exemple: Cet ABR est un arbre AVL avant insertion Insérer la valeur 5 100 50 200 +1 +1 +1 100 30 80 10 150 40 0 0 0 0 0
  • 101. EXEMPLE Exemple: Cet ABR est un arbre AVL avant insertion Insérer la valeur 5 100 50 200+1+2Après insertion, calculer le facteur de déséquilibre de 101 30 80 10 150 40 Cet arbre n’est pas un arbre AVL après insertion de 5 arbre déséquilibré 50 +1 +1 0 0 0 facteur de déséquilibre de chaque nœud.
  • 102. DÉFINITION & TERMINOLOGIES Le niveau d'un nœud: est la distance qui le sépare de la racine: Le niveau de la racine = 0 Le niveau de chaque nœud est égale au niveau de son père plus 1 Le niveau du nœud contenant ‘G' est égal à 2. RacineNiveaux 14 Racine …..…………..……………………………………………....... ………………..……………………………………………....... ………………………………....... .……………………………………………....... A C DB E G HF I LKJ Niveaux 0 1 2 3
  • 103. EXEMPLE Exemple: Cet ABR est un arbre AVL avant insertion Insérer la valeur 45 100 50 200+1+2 103Cet arbre n’est pas un arbre AVL après insertion de 45 arbre déséquilibré 30 80 10 150 40 450 0 -1 -1 0 0
  • 104. TECHNIQUES D’ÉQUILIBRAGE L’opération d’équilibrage, appelée rotation, s’applique à tous les arbres binaires. Le but des rotations est de pouvoir rééquilibrer un ABR. On opère donc une rotation gauche lorsque l’arbre est «déséquilibré à droite», i.e. son sous-arbre droit est plus haut que son sous-arbre gauche. 104 que son sous-arbre gauche. On opère 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 définies que pour les arbres binaires non vides dont le sous-arbre gauche (pour rotation gauche) et sous-arbre droit (pour rotation droite) n’est pas vide. Les rotations préservent l’ordre des données d’un ABR (parcours inordre).
  • 105. TECHNIQUES D’ÉQUILIBRAGE Rotation simple : Rotation droite Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y). La rotation droite est l’opération: ((X, P, Y), R, Z) → (X, P, (Y, R, Z)) +2 105 R P X (hauteur h+1) Déséquilibre gauche Y (hauteur h) Z (hauteur h) P R X (hauteur h+1) Y (hauteur h) Z (hauteur h) +1 +2 0 0 Rotation droite
  • 106. TECHNIQUES D’ÉQUILIBRAGE Rotation simple : Rotation droite Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y). La rotation droite est l’opération: ((X, P, Y), R, Z) → (X, P, (Y, R, Z)) +2 106 R P X (hauteur h) Déséquilibre 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
  • 107. DÉFINITION & 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
  • 108. TECHNIQUES D’ÉQUILIBRAGE Rotation simple : Rotation gauche Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z). La rotation gauche est l’opération: ( 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 Déséquilibre droit X (hauteur h-1) Y (hauteur h) Z (hauteur h) 0 -2 -1 +1Rotation gauche
  • 109. TECHNIQUES D’ÉQUILIBRAGE Rotation double : double rotation gauche-droite C’est une rotation gauche sur le sous arbre-gauche du nœud r suivie d’une rotation droite sur le nœud r R R Rotation gauche Rotation droite Q +2 0+2 109 P Q D (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
  • 110. TECHNIQUES D’ÉQUILIBRAGE Rotation double : double rotation gauche-droite C’est une rotation gauche sur le sous arbre-gauche du nœud r suivie d’une rotation droite sur le nœud r R R Rotation gauche Rotation droite Q +2 0 110 P Q D (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
  • 111. TECHNIQUES D’ÉQUILIBRAGE Rotation double : double rotation gauche-droite C’est une rotation gauche sur le sous arbre-gauche du nœud r suivie d’une rotation droite sur le nœud r R R Rotation gauche Rotation droite Q +2 0+2 111 P Q D (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
  • 112. DÉFINITION & TERMINOLOGIES Forêt : est un ensemble d'arbres. A C DB 16 E G HF I L KJ
  • 113. TECHNIQUES D’ÉQUILIBRAGE Rotation double : double rotation droite-gauche C’est une rotation droite sur le sous arbre-droit du nœud r suivie d’une rotation gauche sur le nœud r Rotation droite Rotation gauche R-2 R -2 Q 0 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 Q A (h) +1 +1 B (h) C (h-1) D (h) Q P -1 -1A (h) B (h) C (h-1) D (h) R P 0 -1 0 A (h) B (h) C (h-1) D (h)
  • 114. TECHNIQUES D’ÉQUILIBRAGE Rotation double : double rotation droite-gauche C’est une rotation droite sur le sous arbre-droit du nœud r suivie d’une rotation gauche sur le nœud r Rotation droite Rotation gauche R-2 R -2 Q 0 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 Q A (h) -1 +1 B (h-1) C (h) D (h) Q P 0 -2A (h) B (h-1) C (h) D (h) R P 1 0 0 A (h) B (h-1) C (h) D (h)
  • 115. OPERATIONS DE BASE La recherche est identique à celui des ABR car les arbres AVL sont avant tout des ABR équilibrés. L’insertion d’un élément dans un arbre AVL peut provoquer un déséquilibre. Donc, pour rétablir l’équilibre (rééquilibrer) de l’arbre après une insertion, une seule 115 rotation ou double rotation suffit. La suppression d’un élément dans un arbre AVL peut provoquer un déséquilibre. Donc pour rétablir l’équilibre (rééquilibrer) de l’arbre après une suppression, il faut jusqu’à h rotations (h est la hauteur de l’arbre) ou double rotations.
  • 116. INSERTION L’ajout d’un nœud se fait toujours au niveau d’une feuille, puis on rééquilibre l’arbre AVL si l’insertion a déséquilibré l’arbre. Le déséquilibre est rencontré lorsque le facteur d’équilibrage d’un nœud de l’arbre égale à ± 2. 116 d’équilibrage d’un nœud de l’arbre égale à ± 2.
  • 117. DÉFINITION & TERMINOLOGIES Définition récursive Cas particulier: NIL est un arbre vide, contenant zéro nœud Racine Racine de T1 Cas général: SI n est un nœud et si T1, T2, ...Tm sont des arbres, ALORS on peut 17 T1 T’1 Racine de T’1 construire un nouvel arbre en connectant T1, T2, ...Tm comme des fils à n. Chaque Ti est définit de la même manière (récursivement). T1, T2, ...Tm sont alors des sous- arbres de n.
  • 118. INSERTION Exemple: soit la série de nombres à insérer 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
  • 119. INSERTION Exemple: soit la série de nombres à insérer 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
  • 120. INSERTION Exemple: soit la série de nombres à insérer 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
  • 121. INSERTION Exemple: soit la série de nombres à insérer dans un arbre AVL (2 10 12 4 16 8 6 14 ) 2 10 12 4 16 8 6 14 10 0 10 1 121 124 8 162 6 14 0 0 1 -2 10 -1 Rotation double 144 8 162 6 12 0 1 0 0 0-1 0
  • 122. TYPOLOGIE Arbre m-aire : un arbre m-aire d’ordre n est un arbre ou le degré maximum d’un nœud est égal à n. B-Arbre : Un arbre B d’ordre n est un arbre où : la racine a au moins 2 fils chaque nœud, autre que la racine, a entre n/2 et n fils tous les nœuds feuilles sont au même niveau 18 tous les nœuds feuilles sont au même niveau Arbre binaire : c’est un arbre où le degré maximum d’un nœud est égal à 2. Arbre de Recherche Binaire : c’est un arbre binaire où la clé de chaque nœud est supérieure à celles de ses descendants gauche, et inférieure à celles de ses descendants droits. ……
  • 123. INSERTION Exemple 2: soit l’arbre ci-dessus, donner le résultat après insertion de 7 10 144 0-1 2 8 0 Rotation 1230 144 8 162 6 12 -1 1 0 0 1 10 9 0 7 Nœud inséré 10 14 4 16 2 6 12 -1 0 0 1 -1 10 9 07 0 0 0 Rotation double
  • 124. INSERTION R h h RR R hh+1 R R h h+1 0 +1 +1 +2 -1 0 AvantAprès insertion à gauche Après 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
  • 125. INSERTION Remarques: Après une insertion, seules les nœuds qui sont sur le chemin du point d’insertion à la racine sont susceptibles d’être déséquilibrés. Cas A: L’arbre devient non équilibré quand le nouveau nœud inséré est un descendant gauche d’un nœud qui avait un facteur 125 d’équilibrage égal à 1 Cas B: L’arbre devient non équilibré quand le nouveau nœud inséré est un descendant droit d’un nœud qui avait un facteur d’équilibrage égal à -1
  • 126. INSERTION R 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
  • 127. INSERTIONR h h+2 -2 Cas B R h -1 P hh 0 Avant 127 R h P h -2 +1 h+1 R h P 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
  • 128. SUPPRESSION Le principe de la suppression d’un élément dans un arbre AVL est le même que dans un ABR, c.à.d. recherche de l’élément à supprimer, suppression et remplacement, le cas échéant, par l’élément qui lui immédiatement 128 inférieur ou supérieur. Après la première phase de la suppression, la hauteur de l’arbre est diminué de 1. Le problème est que cet arbre n’est plus forcément un arbre AVL. Il faut donc le rééquilibrer.
  • 129. SUPPRESSION S’il y a déséquilibre, la rotation appliquée peut diminuer à son tour la hauteur de l’arbre et générer un nouveau déséquilibre. En fait les rotations peuvent s’enchainer en cascade depuis l’élément supprimé jusqu’à la racine. 129 cascade depuis l’élément supprimé jusqu’à la racine. Ainsi, on peut faire jusqu’à h simple rotations ou double rotations (h est la hauteur de l’arbre initial).
  • 131. SUPPRESSION Exemple: soit l’arbre suivant. Donner le résultat après 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 0 7 0 0 0 12 14 4 16 2 6 -1 -1 1 -2 10 0 7 0 0
  • 132. SUPPRESSION Exemple: soit l’arbre suivant. Donner le résultat après 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 0 7 0 0 14 12 4 162 6 -1 0 1 0 10 0 7 0 0
  • 133. SUPPRESSION Exemple: soit l’arbre suivant. Donner le résultat après la suppression de 12 puis 16: 144 9 00 1 9 +2 133 14 12 4 162 6 -1 0 1 0 10 0 7 0 0 144 2 6 -1 1 0 10 0 7 0
  • 134. SUPPRESSION Exemple: soit l’arbre suivant. Donner le résultat après la suppression de 12 puis 16: 9 +2 4 -1 RSD 134 144 2 6 -1 1 0 10 0 7 0 9 14 2 6 -1 1 1 1 0 0 7 0
  • 135. Définition Modèle PLAN DE LA PARTIE II Parcours Représentation contigüe Exemples d’application 20
  • 136. SUPPRESSION Exemple: soit l’arbre suivant. Donner le résultat après la suppression de 30: 40 50 +1+2 -1 100 RDG-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 200 0 0 0 0
  • 137. SUPPRESSION Exemple: soit l’arbre suivant. Donner le résultat après 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 200 0 0 0 0 20 30010 -1 -1 40 50 60 0 9070 +1 100 200 0 0 0 0 0 0
  • 138. PARTIE V: A B ÉARBRES BINAIRES ÉQUILIBRÉS (TAS)
  • 139. Définition Hauteur PLAN DE LA PARTIE V Opérations de Base: Insertion, Recherche et Suppression Implémentation Exemples d’Application 139
  • 140. DÉFINITION Un arbre binaire est un arbre où chaque nœud est connecté à deux sous-arbres (un sous-arbre gauche et un sous-arbre droit). Donc, un arbre binaire est un arbre de degré 2, c’est-à-dire que chaque nœuds a au plus deux fils. Ainsi, le premier fils d'un nœud n est appelé Fils-Gauche (FG) et le deuxième fils est appelé Fils- 21 Droit (FD). A B C KG F H I J racine D NIL
  • 141. DÉFINITION Exemple d’un TASmin Clé (père) ≤ Clè (fils) Le minimum se trouve toujours à la racine Minimum4 141 Maximum 5 6 207 811 915 2516 1214
  • 142. DÉFINITION Exemple d’un TASmax Clé (père) ≥ Clè (fils) Le maximum se trouve toujours à la racine Maximum40 142 Minimum 35 26 2017 811 1915 131 1214
  • 143. HAUTEUR Théorème: Un TAS de n nœud a une hauteur O(log2 n) Démonstration Soit h, la hauteur d’un tas de n nœud Au niveau i≠h, ni=2i 143 i Donc n = 20 + 21 + 22 + ....+ 2h-1 + c tel que , 0≤c<2h n = 2h + c ≥ 2h⇒ h ≤ log2 n ⇒ O(h) = O(log2 n). Conséquence: Les opérations proportionnelles à h sont O (log2 n)
  • 144. INSERTION Pour insérer une valeur « v » dans un TASmin [ou TASmax] 1. Insérer la valeur « v » à la fin du dernier niveau de l’arbre. Tant que la valeur du père de « v » est plus grande 144 2. Tant que la valeur du père de « v » est plus grande [petite] que « v », échanger la valeur du père de v avec « v ». L’étape 1 permet de vérifier la propriété structurelle et l’étape 2 permet de vérifier la propriété de l’ordre.
  • 145. DÉFINITION Un arbre binaire est dit strictement binaire si chaque nœud interne (non feuille) a exactement 2 fils différents de NIL. Si un arbre strictement binaire a n feuilles Alors : le nombre total de ses nœuds = 2n-1. le nombre de ses nœuds non feuilles (nœuds 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 nœuds : 2n-1=11 Le nombre de nœuds internes: n-1=5 (A, B, F, G, I)
  • 146. INSERTION Exemple: Soit le TASmin suivant. Insertion 5 4 6 146 9 6 207 811 1015 2516 1214 5
  • 147. INSERTION Exemple: Soit le TASmin suivant. Insertion 17 4 5 147 9 5 67 811 1015 2516 1214 20 17
  • 148. INSERTION Exemple: Soit le TASmin suivant. Insertion 3 4 5 148 9 5 67 811 1015 2516 1214 20 17 3
  • 149. INSERTION Exemple: Soit le TASmin suivant. Insertion 18 3 5 149 4 5 67 811 109 2515 1214 20 17 16 18
  • 150. DÉFINITION Un arbre binaire complet est un arbre strictement binaire où toutes les feuilles sont au même niveau. Dans un arbre binaire complet de profondeur « d » : le nombre total de nœuds n = 20 + 21 + 22 + ... 2d = 2d+1-1 ainsi, d = log2(n+1) – 1 le nombre de nœuds internes = 23 le nombre de nœuds internes = 2d-1 le nombre de feuilles = 2d le nombre de nœuds dans le niveau i = 2i racine D A B C KG F
  • 151. 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 13 10 19 13 35 20 15 5 5 19 10 35 20 15 13 3 3 5 10 19 20 15 13 35 12
  • 152. 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
  • 153. 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 13 35
  • 154. 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 40 40 20 35 15 19 13 5 3 12 7 16 10 25
  • 155. DÉFINITION Un arbre binaire complet est un arbre strictement binaire où toutes les feuilles sont au même niveau. Dans l’exemple ci dessous: d = 2 le nombre total de nœuds n = 23-1 = 7 le nombre de nœuds internes = 24 le nombre de nœuds internes = 22-1 = 3 le nombre de feuilles = 22 = 4 le nombre de nœuds dans le niveau 1 = 2 racine D A B C KG F
  • 156. 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
  • 157. INSERTION L’insertion d’une valeur « v » peut nécessiter O(h) = O(log2(n)) opérations où h est la hauteur du TAS et n est son nombre des nœuds. En effet, au pire des cas, l’échange peut se remonter à la racine 157 En effet, au pire des cas, l’échange peut se remonter à la racine dans le cas où « v » est inférieure à la valeur de la racine, ainsi, il devient le nouveau minimum
  • 158. RECHERCHE Pour rechercher une valeur « v » dans un TASmin [ou TASmax], on doit parcourir l’arbre 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 supérieure [inférieure] à la valeur de l’un des nœuds de niveau « i-1 ».
  • 159. RECHERCHE Exemple: Soit le TASmin suivant. 7 ? 4 6 159 9 6 207 811 1015 2516 1214 La valeur existe, fin de recherche
  • 160. MODÈLE L'arbre est implémenté souvent de manière dynamique comme un ensemble de maillons (nœuds) chaînés entre eux. La structure d'un nœud de l'arbre est la suivante : 25 Structure de Données TYPE Tnoeud = STRUCTURE Info : Typeqq FG : * Tnoeud FD : * Tnoeud FIN VAR Arbre : * Tnoeud
  • 161. RECHERCHE Exemple: Soit le TASmin suivant. 3 ? 4 6 161 9 6 207 811 1015 2516 1214 La valeur n’existe pas , fin de recherche
  • 162. RECHERCHE Exemple: Soit le TASmin suivant. 30 ? 4 6 162 9 6 207 811 1015 2516 1214 Fin de recherche, la valeur n’existe pas
  • 163. RECHERCHE La recherche d'une valeur « v » dans un TAS peut nécessiter O(n) opérations où n est le nombre des nœuds. Pire des cas: Si « v » est supérieure à la valeur maximale du TASmin [ou inférieure à la valeur minimale du TASmax], alors on doit descendre jusqu’au dernier niveau en parcourant 163 tous les nœuds pour vérifier que la valeur recherchée n’existe pas. La recherche étant un pré-requis à la suppression d'une valeur « v », une suppression peut nécessiter O(n) opérations aussi.
  • 164. SUPPRESSION Pour supprimer une valeur « v » dans un TASmin [ou TASmax] 1. Rechercher la valeur « v », si elle existe on passe à l’étape suivante, sinon stop. Soit « P » le nœud contenant la valeur « v », 164 2. Soit « P » le nœud contenant la valeur « v », remplacer la valeur de « P » par la valeur du dernier nœud du dernier niveau (soit « Q » ce nœud et « x » sa valeur). Cela permet de vérifier la propriété structurelle.
  • 165. SUPPRESSION Pour supprimer une valeur « v » dans un TASmin [ou TASmax] 3. Vérifier la propriété d’ordre: a. Tant que la valeur « x » est inférieure [supérieure] à celle du père, échanger la valeur « x » avec celle du 165 celle du père, échanger la valeur « x » avec celle du père. b. Tant que la valeur « x » est supérieure [inférieure] à celle de l’un de ses fils, échanger la valeur « x » avec celle du plus petit [grand] de ses fils.
  • 166. SUPPRESSION Exemple: Soit le TASmin suivant. Donner le résultat après la suppression de 9, 16, 6 et 4. 4 6 166 9 6 207 811 1015 2516 1214
  • 167. MODÈLE On définit le modèle (machine abstraite) suivant d’un arbre binaire: Fonction Rôle Info(p) permet d'accéder à l'information du nœud p FG(p) permet d'accéder à l'information de fils gauche du nœud p FD(p) permet d'accéder à l'information de fils droit du nœud p 26 FD(p) permet d'accéder à l'information de fils droit du nœud p Aff_info(p, x) permet de modifier l'information du nœud p Aff_FG(p, x) permet de modifier l'information de fils gauche du nœud p Aff_FD(p, x) permet de modifier l'information de fils droit du nœud p Créer_noeud(x) permet de créer un nœud avec x comme information et retourne la référence du nœud. Le nœud créé a Nil comme fils gauche et droit. Liberer_noeud(p) permet de libérer le nœud référencé par p.
  • 168. SUPPRESSION Exemple: Soit le TASmin suivant. Suppression de 9, 16. 4 6 168 8 6 207 11 1015 2516 1214
  • 169. SUPPRESSION Exemple: Soit le TASmin suivant. Suppression de 16. 4 6 169 8 6 2071015 2511 1214
  • 170. SUPPRESSION Exemple: Soit le TASmin suivant. Suppression de 6. 4 6 170 8 6 2071011 2515 1214
  • 171. SUPPRESSION Exemple: Soit le TASmin suivant. Suppression de 6. 4 12 171 8 12 2071011 2515 14
  • 172. PARCOURS Le parcours d’un arbre consiste à passer par tous ses nœuds. Les parcours permettent d’effectuer 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 Préordre, l‘Inordre et le Postordre. Des parcours en largeur (breadth-first) explorent l'arbre niveau par niveau
  • 173. SUPPRESSION Exemple: Soit le TASmin suivant. Suppression de 4. 14 7 173 8 7 20121011 2515
  • 174. SUPPRESSION Exemple: Soit le TASmin suivant. Suppression de 4. 7 12 174 8 12 20141011 2515
  • 175. IMPLÉMENTATION Un TAS se représente naturellement par un tableau: Les sommets sont numérotés par un parcours en largeur, de gauche à droite. Le sommet « i » est rangé dans la case d’indice i du tableau. 41 2 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 5 6 207 811 915 2516 1214 2 3 4 5 6 7 8 9 10 11 12 13
  • 176. IMPLÉMENTATION On parle ici de la représentation statique séquentielle d’un arbre binaire La case 0 est vide Indice(racine)=1 Indice(FG)=2*Indice(Père) 176 Indice(FG)=2*Indice(Père) Indice(FD)=2*Indice(Père)+1 Indice(Père)= [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
  • 177. PARCOURS EN PROFONDEUR Dans un parcours en profondeur, on descend le plus profondément possible dans l’arbre puis, une fois qu’une feuille a été atteinte, on remonte pour explorer les autres branches en commençant 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 : Préordre (Préfixe) : où on affiche la racine avant ses fils (Racine FG FD), Inordre (Infixe) : où on affiche le fils gauche avant sa racine et son frère droit (FG Racine FD), Postordre(Postfixe) : où on affiche les fils avant leur racine (FG FD Racine).
  • 178. IMPLÉMENTATION STRUCTURE DE DONNÉES TYPE Tarbre = STRUCTURE T : TABLEAU[0..Max-1] d’entier Dernier: ENTIER // indice sur la dernière case remplie du T (initialisé à 0) 178 T (initialisé à 0) FIN VAR R : Tarbre
  • 179. IMPLÉMENTATION MODÈLE Entête Corp Procédure CreerNoeud (Var R: Tarbre, x: entier) R.dernier++ R.T[dernier] x Fonction Info (R: Tarbre, i:entier): entier Retourner (R.T[i]) Procédure Aff_Info (Var R: R.T[i] x 179 Procédure 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 + 1≤R.dernier) alors Retourner (2*i + 1) Sinon Retourner (-1) Fonction Père (R: Tarbre, i:entier): entier Si (i div 2>0) alors Retourner (i div 2) Sinon Retourner (-1)
  • 180. INSERTION (EXEMPLE ILLUSTRATIF) 4 5 6 15 9 7 20 16 25 14 12 11 8 3 4 5 6 207 811 915 2516 1214 3 4 5 6 15 9 7 3 16 25 14 12 11 8 20 4 5 6 37 811 915 2516 1214 20 180 4 5 3 15 9 7 6 16 25 14 12 11 8 20 4 5 3 67 811 915 2516 1214 20 3 5 4 15 9 7 6 16 25 14 12 11 8 20 3 5 4 67 811 915 2516 1214 20
  • 181. IMPLÉMENTATION INSERTION (ALGORITHME) Procédure Inserer_TASmin(Var R: Tarbre, x: entier) Var P, i: entier Début CreerNoeud (R, x); i R.dernier P Père(R, i) 181 P Père(R, i) TQ ((P≠-1) et (Info (R, P) > x)) faire // Info (R, P) <x dans le cas TASmax Permuter (R, i, P) i P P Père (R, i) FTQ Fin Procédure Permuter (Var R: Tarbre, i,j: entier) Var tmp: entier Tmp Info (R, i) Aff_Info (R, i, Info (R, j)) Aff_Info (R, j, Tmp)
  • 182. PARCOURS EN PROFONDEUR Ces parcours (préordre, inordre et postordre) sont des parcours simples à définir et à programmer (en récursif). Soit R un arbre binaire (pouvant être vide : R=NIL). S'il n'est pas vide (n pointe le nœud racine), alors il a la forme suivante (avec T1 et T2 des sous arbres définis de la même manière 29 que n) : R T1 T2 Sous arbre gauche G Sous arbre droit D
  • 183. IMPLÉMENTATION RECHERCHE (ALGORITHME) Fonction Rechercher_TAS(R: Tarbre, x: entier): entier Var i: entier; Début On peut aussi faire une simple recherche séquentielle dans le tableau T comme suit: 183 Pour i 1 à R.dernier faire Si Info (R, i) = x alors retourner (i) Retourner (-1) Fin
  • 184. SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS A)) 2 8 4 15 9 5 20 26 25 14 12 11 6 2 8 4 205 611 915 2526 1214 2 8 4 205 11 915 256 1214 2 8 4 15 9 5 20 6 25 14 12 11 184 5 8 4 205 11 96 2515 1214 2 8 4 6 9 5 20 15 25 14 12 11 2 6 4 205 11 98 2515 1214 2 6 4 8 9 5 20 15 25 14 12 11
  • 185. SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B)) 4 5 6 15 9 7 20 16 25 14 12 11 26 4 5 6 207 2611 915 2516 1214 26 5 6 207 11 915 2516 1214 26 5 6 15 9 7 20 16 25 14 12 11 185 5 26 6 207 11 915 2516 1214 5 26 6 15 9 7 20 16 25 14 12 11 5 9 6 207 11 2615 2516 1214 5 9 6 15 26 7 20 16 25 14 12 11
  • 186. SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B)) 5 26 6 207 11 915 2516 1214 5 26 6 15 9 7 20 16 25 14 12 11 5 9 6 207 11 2615 2516 1214 5 9 6 15 26 7 20 16 25 14 12 11 186 5 9 6 207 11 2615 2516 2614 5 9 6 15 12 7 20 16 25 14 26 11
  • 187. PARCOURS PREORDRE Le parcours préordre de R (s'il n'est pas vide) consiste à visiter le nœud racine (R) ensuite parcourir récursivement en préordre 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
  • 188. IMPLÉMENTATION SUPPRESSION (ALGORITHME) Procédure Supprimer_TASmin (Var R: Tarbre, x: entier) Var P, G, D, min: entier Début …….. Sinon //Etape 3: cas B min i; fin faux 188 Répéter 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
  • 189. EXEMPLES D’APPLICATION Malgré que la recherche et la suppression dans un TAS sont plus coûteuses que dans un ABR ou un AVL, les TAS sont très utiles entre autre pour le tri et pour implémenter les files de priorité. 189 implémenter les files de priorité.
  • 190. Étant donné un tableau d’entiers T (n: sa taille), dire comment peut on trier (ordre croissant) ce tableau en utilisant un TASmin ou TAS max? EXEMPLE D’APPLICATION TRI PAR TAS 190 Exemple: 20 15 10 35 19 13 5 3 12 7 16 40 25 38
  • 191. 1. Transformer le tableau en un TASMIN 20 15 10 35 19 13 5 3 12 7 16 40 25 38 EXEMPLE D’APPLICATION TRI PAR TAS 191 3 5 10 12 7 15 13 35 19 20 16 40 25 38
  • 192. PARCOURS PREORDRE Le parcours préordre de R (s'il n'est pas vide) consiste à visiter le nœud racine (R) ensuite parcourir récursivement en préordre 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 CRésultat de parcours:
  • 193. 2. Extraire n fois le minimum du TASMIN : 7 12 10 EXEMPLE D’APPLICATION TRI 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
  • 194. 2. Extraire n fois le minimum du TASMIN : 12 16 13 19 20 15 40 13 16 15 19 20 38 40 EXEMPLE D’APPLICATION TRI PAR TAS 194 3 5 7 10 12 13 15 35 25 38 35 25 15 16 25 19 20 38 40 35
  • 195. 2. Extraire n fois le minimum du TASMIN : 16 19 25 35 20 38 40 19 20 25 35 40 38 EXEMPLE D’APPLICATION TRI 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
  • 196. EXEMPLE D’APPLICATION TRI PAR TAS Tri_TASmin (Tab: Tableau, n: entier) Var R: Tarbre Début R.Dernier 0; //Construire le TAS 196 //Construire le TAS Pour i 0 à n-1 faire Insérer_TASmin (R, Tab[i]) // Extraire les minimums Pour i 0 à n-1 faire Tab[i] R.T[1] Supprimer_TASmin (R, R.T[1]) // supprimer la valeur de la racine FPour Fin
  • 197. PARCOURS PREORDRE La procédure (récursive) qui affiche les valeurs en parcours préordre d’un arbre de racine R est : Procédure Préordre( R:* Tnoeud ) Début SI R ≠ NIL 32 SI R ≠ NIL ecrire( Info(R) ) Préordre( FG(R) ) Préordre( FD(R) ) FSI fin
  • 198. Modèle Implémentation Créerfile(F) F.dernier←0 File_Attente_priorité = TAS F: Tarbre EXEMPLE D’APPLICATION IMPLÉMENTATION D’UNE 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
  • 200. Définition Parcours PLAN DE LA PARTIE VI Implémentation Exemples d’Application 200
  • 201. DÉFINITION Un arbre m-aire d'ordre d est un arbre où chaque nœud 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 théoriquement illimité. 201 théoriquement illimité. NœudsArêtes a b c d e f g h i j k l 0 1 2 3 Niveaux racine Feuilles Profondeur Arbre d’ordre 4
  • 202. PARCOURS De même que les arbres binaires, on distingue deux types de parcours : Des parcours en profondeur qui explorent l'arbre branche par branche: Préordre : où on affiche le père avant ses fils, 202 Préordre : où on affiche le père avant ses fils, Postordre : où on affiche les fils avant leur père. Le parcours en largeur (breadth-first) qui explore l'arbre niveau par niveau
  • 203. PARCOURS PREORDRE Le parcours préordre de R (s'il n'est pas vide) consiste à visiter le nœud racine (R) ensuite parcourir récursivement en préordre les sous arbres F1, F2, … jusqu’à Fd, ce qui donne : [ R F1 F2 ….. Fd] R R 203 R F2F1 Fd … a b c d e f g h i j k l a b e c d f g j k h i l
  • 204. PARCOURS POSTORDRE Le parcours postordre de R (s'il n'est pas vide) consiste à parcourir récursivement en postordre les sous arbres F1, F2, … jusqu’à Fd ensuite visiter le nœud racine (R), ce qui donne : [F1 F2 ….. Fd R ] R R 204 R F2F1 Fd … a b c d e f g h i j k l e b c f j k g h l i d a
  • 205. PARCOURS EN LARGEUR Dans le parcours par niveau, tous les nœuds d’un même niveau sont traités avant de descendre au niveau suivant a0 Niveaux R 205 a 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
  • 206. PARCOURS INORDRE Le parcours inordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en inordre le sous arbre gauche T1, puis visiter le nœud racine (R) ensuite parcourir récursivement 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
  • 207. REPRÉSENTATION DYNAMIQUE on distingue deux cas: Cas 1: Si l’ordre de l’arbre est connu alors on crée un nœud avec deux champs (information et un tableau de d pointeurs pour représenter les fils du nœud). 207 pointeurs pour représenter les fils du nœud). TYPE TnoeudM = STRUCTURE Info : Typeqq Fils : TABLEAU[0..d-1] DE * TnoeudM FIN VAR R : * TnoeudM
  • 208. REPRÉSENTATION DYNAMIQUE on distingue deux cas: Cas 2: Si l’ordre de l’arbre est inconnu alors au niveau de chaque nœud, on ne représente que l'adresse du fils le plus à gauche et celle du frère immédiatement à droite. 208 plus à gauche et celle du frère immédiatement à droite. TYPE TnoeudM = STRUCTURE Info : Typeqq FilsG, FrèreD : * TnoeudM FIN VAR R : * TnoeudM a b c d e f g h i j k l
  • 209. REPRÉSENTATION DYNAMIQUE La deuxième représentation dynamique est la plus générale car elle peut être utilisée aussi dans le cas où le degré de l’arbre est connu. TYPE TnoeudM = STRUCTURE a 209 TYPE TnoeudM = STRUCTURE Info : Typeqq FilsG, FrèreD : * TnoeudM FIN VAR R : * TnoeudM b c d e f g h i j k l
  • 210. REPRÉSENTATION STATIQUE Dans la représentation statique, Chaque case du tableau représente un nœud de l’arbre La racine se trouve toujours dans la première case du tableau De même que la représentation dynamique, on distingue deux cas: 210 deux cas: Cas 1: Si l’ordre de l’arbre 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 nœud. Cas 2 (plus général): Si l’ordre de l’arbre est inconnu alors au niveau de chaque nœud, on ne représente que deux indices : l'indice du fils le plus à gauche et l'indice de son frère immédiatement à droite.
  • 211. PARCOURS INORDRE Le parcours inordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en inordre le sous arbre gauche T1, puis visiter le nœud racine (R) ensuite parcourir récursivement 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 Résultat de parcours: H ID EB F GA C
  • 212. REPRÉSENTATION STATIQUE a 1 -1 b 4 2 c -1 3 d 5 -1 0 1 2 3 R TYPE TnoeudM = STRUCTURE Info : Typeqq FilsG, FrèreD : entier FIN VAR R : TABLEAU [0..Max-1] DE * TnoeudM Info FiG FrD 212 e -1 -1 f -1 6 g 9 7 h -1 8 i 11 -1 j -1 10 k -1 -1 l -1 -1 4 5 6 7 8 9 10 11 a b c d e f g h i j k l
  • 213. MODÈLE Pour manipuler ce type d'arbres, on défini un modèle formé par les opérations suivantes : Module Rôle CreerNoeud(x) Créer un nœud isolé contenant x comme information LibererNoeud(P) Détruire le nœud P 213 LibererNoeud(P) Détruire le nœud P Info(P) Retourner l'information stockée dans le nœud P Fils(P, i) retourner le ième fils du nœud P Aff-info(P, x) affecter x dans le champ « info » du nœud P Aff-Fils(P, Q, i) affecter l’adresse du nœud Q au fils i du nœud P
  • 214. MODÈLE Exercice: Donner l’implémentation de ce modèle pour chaque présentation de l’arbre (statique/dynamique dans le cas où le degré de l’arbre est connu ou pas) Module Rôle Créer un nœud isolé contenant x comme 214 CreerNoeud(x) Créer un nœud isolé contenant x comme information LibererNoeud(P) Détruire le nœud P Info(P) Retourner l'information stockée dans le nœud P Fils(P, i) retourner le ième fils du nœud P Aff-info(P, x) affecter x dans le champ « info » du nœud P Aff-Fils(P, Q, i) affecter l’adresse du nœud Q au fils i du nœud P
  • 215. EXEMPLES D’APPLICATION Transformation d’un arbre m-aire en arbre binaire 1. Etape 1: Lier les frères dans une liste linéaire chaînée 2. Etape 2: Faire une rotation de 45 ° dans le sens des aiguilles d’une montre 215 aiguilles d’une montre a b c d e f g h i j k l R
  • 216. PARCOURS INORDRE La procédure (récursive) qui affiche les valeurs en parcours inordre d’un arbre de racine R est : Procédure Inordre( R:*Tnoeud ) Début SI R ≠ NIL 35 SI R ≠ NIL Inordre( FG(R) ) ecrire( Info(R) ) Inordre( FD(R) ) FSI fin
  • 217. EXEMPLES D’APPLICATION 2. Etape 2: Faire une rotation de 45 ° dans le sens des aiguilles d’une montre a b e c d c d Transformation d’un arbre m-aire en arbre binaire 217 aiguilles d’une 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
  • 218. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) C'est une généralisation des Arbres Binaire de Recherche (ABR) pour être utilisés en mémoire secondaire où les E/S sont « bufférisées ». Elle est aussi 218 secondaire où les E/S sont « bufférisées ». Elle est aussi utilisée pour l’ organisation de fichiers (les indexes des articles)
  • 219. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) Chaque nœud renferme un tableau de (d-1) valeurs ordonnées et un tableau de d fils, car dans un AMR d'ordre d, le nombre de fils d'un nœud (le degré) est toujours égal au nombre de valeur stockées + 1. 219 toujours égal au nombre de valeur stockées + 1. s1 k1 s2 ….. kj-1 sj kj …... kd-1 sd ki des données tq: k1 < k2 ....< kd-1
  • 220. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) s1 k1 s2 ….. kj-1 sj kj …... kd-1 sd ki des données tq: k1 < k2 ....< kd-1 (Éléments du s1) < k1 (Éléments 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 (Éléments du s1) < k1 (Éléments du sd) > kd-1 kj-1 < (Éléments du sj) < kj (j=2,3, ...d-1)
  • 221. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) La structure de l’arbre ARM est la suivante: Type TnœudAMR = Structure Info : Tableau[0..d-2] d’entier 221 Fils : Tableau[0..d-1] de *TnoeudAMR Degré : entier Fin
  • 222. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) Exemple : soit l’arbre m-aires de recherche AMR d’ordre 4 222
  • 223. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) Pour écrire des algorithmes sur ce type d'arbres, le modèle doit être formé des opérations 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)
  • 224. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) La recherche dans un AMR ressemble beaucoup à celle effectuée dans un ABR, excepté qu’au lieu de prendre à chaque nœud une décision de branchement 224 prendre à chaque nœud une décision de branchement binaire (Fils gauche ou droit), on prend une décision à options multiples, selon le nombre de fils du nœud. La complexité de cette recherche est O(logdegré(n) ).
  • 225. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) Exemple: Rechercher l’élément 68. 225On récupère l’adresse du nœud (nœud P) ainsi la position dans le nœud (soit pos = 2) où l’élément 68 doit exister.
  • 226. PARCOURS POSTORDRE Le parcours postordre de R (s'il n'est pas vide) consiste d'abord à parcourir récursivement en postordre les sous arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui donne [ T1 , T2 , R ou GDR] 36 R T1 T2 Sous arbre gauche G Sous arbre droit D
  • 227. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) Exemple: Insérer les éléments suivants: 1, 40, 68, 170. 227 1 6 10 37 40 68 170
  • 228. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) On distingue deux types de suppression: 1. Suppression logique: Laisser la clé au niveau du nœud et le marquer comme supprimé 228 Le nœud reste utilisé pour l'algorithme de recherche L’insertion d’un nœud supprimé consiste à le marquer comme non supprimé 2. Suppression physique: Technique similaire à celle des ABR
  • 229. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) 2. Suppression physique: a. Si l’élément à supprimer est le seul élément dans le nœud alors libérer le nœud. Exemple: supprimer 37 ou 110 229
  • 230. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) 2. Suppression physique: Si l’élément à supprimer a un sous arbre gauche ou droit vide alors supprimer l’élément, ensuite tasser le nœud (décalage dans le nœud + changer l’adresse du fils). Exemple: la suppression du 65 entraîne le décalage de 69 à la 230 Exemple: la suppression du 65 entraîne le décalage de 69 à la position de 65 ainsi le déplacement du fils droit de 65. 68 62 69 68
  • 231. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) 2. Suppression physique: b. Si l’élément à supprimer a un sous arbre gauche ou droit vide alors supprimer l’élément, ensuite tasser le nœud (décalage dans le nœud + changer l’adresse du fils). Exemple: la suppression du 120 entraîne le décalage de 150 à 231 Exemple: la suppression du 120 entraîne le décalage de 150 à la position de 120. 68 100 120 110
  • 232. EXEMPLES D’APPLICATION Arbres M-aire de Recherche (AMR) 2. Suppression physique: c. Si l’élément à supprimer a des sous arbres gauche et droit tous les deux non vides alors remplacer l’élément à supprimer par son successeur/prédécesseur, ensuite supprimer ce successeur/prédécesseur 232 supprimer ce successeur/prédécesseur Exemple: la suppression du 85 entraîne le remplacement du 85 par 100 , ensuite la suppression du 100 120 150 110 12 50 100
  • 233. SOURCES DE CE COURS N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole nationale Supérieure d’Informatique (ESI), 2014. Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale Supérieure d’Informatique (ESI), Disponible sur http://zegour.esi.dz/Cours/Cours_sdd.htm W. K. Hidouci, Cours Structures De Données et Fichiers, École nationale Supérieure d’Informatique, Disponible sur hidouci.esi.dz/algo/ B. Boutoumi, Cours d’Algorithmique et Structures de données, Université Saad Dahlab de Blida, 2014, Disponible sur https://sites.google.com/a/esi.dz/s- aroussi/algorithmique-et-structure-de-donnees/nouveau-programme . A. Aroussi, Cours d’Algorithmique Avancé, Université Saad Dahlab de Blida, 2013, Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/Algorithmique/annee- universitaire-2013-2014-3gsi 233