Académique Documents
Professionnel Documents
Culture Documents
ALGORITHMIQUE AVANCÉE
Mme AROUSSI
2015-2016
Coefficient 1, Crédit 3
2
OBJECTIFS DU COURS
3
CONTENU DU COURS
I. Arbres de Recherche
III. NP-Complétude
4
Université Blida 1
Faculté des Sciences
Département d’Informatique
Master GSI (Génie des Systèmes Informatiques)
Semestre 1
CHAPITRE I:
ARBRES DE RECHERCHE
Mme AROUSSI
2015-2016
Introduction
Définitions et Terminologies
Topologie
Partie V: B-Arbres
INTRODUCTION
Dans les tableaux, nous avons :
chaînage
manipulation.
8
INTRODUCTION
Leur usage est multiple, car il capte l’idée de hiérarchie; à
paragraphes…,
Livre
C1 C2 C3
S2.1.1 S2.1.2
INTRODUCTION
Leur usage est multiple, car il capte l’idée de hiérarchie; à
Hiérarchies de fichiers,
10
INTRODUCTION
Leur usage est multiple, car il capte l’idée de hiérarchie; à
Expressions Arithmétiques
L’expression A - (B + C * (D - E)) * F A *
se représente facilement par un arbre + F
où apparaît clairement la priorité des
B *
opérations:
C -
11
D E
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.
Arêtes Nœuds
A
B C D
E F G H I
12
J K L
DÉFINITION & TERMINOLOGIES
Racine: est le nœud qui n'a
Racine
pas de prédécesseur (parent) et
A
possède zéro ou plusieurs fils. La Nœud interne
racine constitue la caractéristique B C D
d'un arbre.
E F G H I
Feuille : est un nœud qui n'a
pas de successeur (fils). Une
J K L
feuille est aussi appelée un nœud
externe. Feuilles
A-B-E
A-C J K L
A-D-F
A-D-G-J 15
…..
DÉFINITION & TERMINOLOGIES
Descendants d’un nœud :
sont tous les nœuds du sous arbre
de racine nœud. Dans l'exemple,
A
les descendants de D sont F, G,
H, I, J, K et L. B C D
Ascendants d’un nœud :
sont tous les nœuds se trouvant E F G H I
ascendants de J sont G, D et A.
16
Les ascendants de E sont B et A.
DÉFINITION & TERMINOLOGIES
Taille d’un arbre: est le
nombre de nœuds qu’il possède.
Taille de l’arbre ci contre = 12
A
Un arbre vide est de taille
égale à 0.
B C D
Degré d’un nœud : est le
nombre de ses fils. Dans E F G H I
1 .…………………………………………….......
B C D
2 E F
………………..…………………………………………….......
G H I
18
3 …..…………..…………………………………………….......
J K L
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
Niveaux Racine
0 ………………………………....... A
1 .…………………………………………….......
B C D
2 E F
………………..…………………………………………….......
G H I
19
3 …..…………..…………………………………………….......
J K L
DÉFINITION & TERMINOLOGIES
Forêt : est un ensemble d'arbres.
B C D
E F H I
G L
J K
20
DÉFINITION & TERMINOLOGIES
Définition récursive
Cas particulier: NIL est un arbre vide, contenant zéro nœud
sous- arbres de n.
TYPOLOGIE
Arbre binaire : est un arbre où le degré maximum d’un nœud
est égal à 2.
Arbre de Recherche Binaire : 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.
Arbre m-aire d’ordre n : est un arbre ou le degré maximum
d’un nœud est égal à n.
B-Arbre 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
22
tous les nœuds feuilles sont au même niveau
……
PARTIE II:
ARBRES BINAIRES
PLAN DE LA PARTIE II
Définition
Modèle
Parcours
Exemples d’application
24
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 d’ordre 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-
Droit (FD). racine A
NIL
B F
C G K
D H I 25
J
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
A racine
2n-1=11
H I
Le nombre de nœuds 26
C D G K
27
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 = 22-1 = 3
racine
le nombre de feuilles = 22 = 4 A
C D G K
28
MODÈLE
Structure de Données
TYPE Tnoeud = STRUCTURE
Info : Typeqq
FG : * Tnoeud
FD : * Tnoeud
FIN
VAR Arbre : * Tnoeud 29
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
T1 T2
33
T1 T2
34
B C
D E F G
H I 35
T1 T2
37
B C
D E F G
38
H I
Résultat de parcours: HDIBEAFC G
PARCOURS INORDRE
La procédure (récursive) qui affiche les valeurs en
parcours inordre d’un arbre de racine R est :
T1 T2
40
B C
D E F G
H I
41
42
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.
On peut aussi enrichir la structure des nœuds en incluant un
pointeur vers le nœud père.
A Résultat de parcours:
ABCDEFGH I
B C
D E F G
H I
44
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;
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)); 45
FTQ
Fin
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).
Exemple: l'expression (a-b)*((c+d)/e) sera représentée par l'arbre
suivant :
*
- /
a b + e
46
c d
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
sans parenthèses)
*
- /
a b + e
47
c d
EXEMPLES D’APPLICATION
Représentation des Expressions Arithmétiques :
L’évaluation d’une expression arithmétiques peuvent se faire les
deux fonctions suivantes:
La fonction Opérande(T) qui retourne vrai si T est un
opérande, sinon elle retourne faux.
La fonction Calcul qui permet de calculer l’opération
arithmétique entre deux opérandes
48
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
Eval ← Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A)))
FSI
*
- /
a b + e 49
c d
PARTIE III:
ARBRES BINAIRES DE
RECHERCHE(ABR)
PLAN DE LA PARTIE III
Définition
Complexité
Parcours
Suppression)
51
52
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
87 ?
15 59
5 27 71
3 10 33
55
8
52
Le parcours inordre de cet arbre donne la liste ordonnée
55
Élément trouvé
3 10 33
55
8 56
52
OPÉRATION DE RECHERCHE
Fonction RechercherABR (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
Retourner (Null)
Sinon
Si Info (R) = x alors
Retourner (R)
Sinon
Si Info(R)>x alors
Retourner (RechercherABR (FG(R), x))
Sinon
Retourner (RechercherABR (FD(R), x)) 57
Fin
OPÉRATION D’INSERTION
L'insertion d'un élément se fait toujours au niveau d'une
58
OPÉRATION D’INSERTION
+ 25
20
15 59
5 27 71
3 10 25 33
55
RechercherPosition (25) 8
Rechercher (FD(20)) 52
Rechercher (FG(59))
61
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.
1. Rechercher(8)
2. Libérer le nœud « i » 20
15 59
5 27 71
3 10 33
«i» 12 55
8 62
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.
1. Rechercher(10)
3. Libérer le nœud « i » 15 59
5 27 71
3 10 33
«i»
12 55 63
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.
1. Rechercher(10)
3. Libérer le nœud « i » 15 59
5 27 71
3 10 «i» 33
55
8 64
52
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
22 66
8 29 50 71
Le plus proche 56 70 81
17 25 prédécesseur
9 23 32 55 69
65
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
22 66
8 29 50 71
17 25 56 70 81
66
9 23 32 55 69
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
66
Fonction Successeur (R: *Tnoeud): *Tnoeud
Debut 50 71
RFD(R)
Si R≠Null alors 56 70 81
TQ FG(R)≠Null faire RFG(R) 67
Retourner (R)
55 69
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
34
22 66
8 29 50 71
17 25 56 70 81
68
9 23 32 55 69
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
22 66
69
8 29 50 71
17 25 56 70 81
9 23 32 55 69
70
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.
22 66
56
8 29 50 71
17 25 55 70 81
9 23 32 69
71
OPÉRATION DE SUPPRESSION
En conclusion, 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 :
«i»
Cas Action
FG FD
Feuille Null Null Remplacer « i » par Null
Avec un Null ≠Null Remplacer « i » par FD(i)
fils ≠Null Null Remplacer « i » par FG(i)
1. Rechercher le plus proche
Avec prédécesseur ou successeur de « i »,
deux ≠Null ≠Null soit P.
fils 2. Remplacer Info(i) par Info(P)
72
3. Remplacer P par FG(P) ou FD(P)
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
Retourner (R)
Sinon
Si Info(R)>x alors
Aff_FG(R, SupprimerABR (FG(R), x))
Retourner (R)
Sinon
Si Info(R)<x alors
Aff_FD(R, SupprimerABR (FD(R), x))
Retourner (R)
Sinon // Info(R) = x
Retourner (SupprimerRacine (R))
73
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
DFD(R)
LibérerNoeud(R)
Retourner (D)
Sinon
Si FD(Q) = Null alors //Cas n°2: R possède un FG
GFG(R)
LibérerNoeud(R)
Retourner (G)
Sinon // Cas n°3: R possède deux fils
SSuccesseur (R)
Aff_Info (R, Info(S))
Aff_FD(R, SupprimerABR (DF(R), Info(S))) 74
Retourner (R)
Fin
EXEMPLE D’APPLICATION: TRI PAR ABR
Étant donné un tableau d’entiers T (n: sa taille), dire
Exemple:
20 15 10 35 19 13 5 3 12 7 16 40 25 38
75
EXEMPLE D’APPLICATION: TRI PAR ABR
20 15 10 35 19 13 5 3 12 7 16 40 25 38
20
15 35
10 25 40
19
5 13 38
76
16
3 7 12
EXEMPLE D’APPLICATION: TRI PAR ABR
15 35
10 25 40
19
5 13 38
16
3 7 12
3 5 7 10 12 13 15 16 19 20 25 35 38 40 77
EXEMPLE D’APPLICATION: TRI PAR ABR
Procedure Tri_ARB(Var T: Tableau, n: entier)
Debut
RNull
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++ 78
Inordre(FD(R), T)
PARTIE IV:
ARBRES BINAIRES DE
RECHERCHE ÉQUILIBRÉS
(ARBRES AVL)
PLAN DE LA PARTIE IV
Introduction
Définition
Techniques d’équilibrage
80
Suppression
INTRODUCTION
La complexité au meilleur des cas de la recherche, de
l’insertion et de la suppression dans un ABR est O(h), où
h est la hauteur (ou profondeur) de l’arbre. Ce cas est
atteint par des arbres équilibrés
87 ?
+1
50
+1
200
0
30 0
80 0
150
0 0
10 40
85
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 5 100
+1 10 0 40
5 0
arbre déséquilibré
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 45 +1
100
+1
50
+1
200
0
30 0
80 0
150
0 0
10 40
87
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 45
100
+2 50 +1 200
-1 30 0
80 0
150
0 10 -1 40
45 0
arbre déséquilibré
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.
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.
89
Les rotations préservent l’ordre des données d’un ABR (parcours
inordre).
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation droite
+2
0
R P
Rotation droite
P 0
+1 R
Z
(hauteur
h)
X
Y (hauteur
h+1)
X
(hauteur
h) Y Z
(hauteur (hauteur 90
(hauteur
h+1) h) h)
Déséquilibre gauche
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation droite
+2
-1
R P
Rotation droite
P +1
0 R
Z
(hauteur
h-1)
X
(hauteur
X Y h)
Y Z
(hauteur
(hauteur (hauteur 91
(hauteur
h) h) h-1)
h)
Déséquilibre gauche
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation gauche
-2 Rotation gauche 0
R P
-1 0 R
P
X
(hauteur
Z
h)
Y
(hauteur Z X Y (hauteur
h+1)
h) (hauteur (hauteur h)
(hauteur h)
h+1) 92
Déséquilibre droit
TECHNIQUES D’ÉQUILIBRAGE
Rotation simple : Rotation gauche
-2 Rotation gauche +1
R P
0 -1 R
P
X
(hauteur
Z
h-1)
X Y
Y Z (hauteur h-1)
(hauteur
(hauteur
h)
(hauteur (hauteur h)
h) h) 93
Déséquilibre droit
TECHNIQUES D’ÉQUILIBRAGE
Rotation double : double rotation gauche-droite
A 0 0
(h) C A B C D
(h) (h) (h)
(h) (h)
A B
B C (h) (h)
(h) (h)
94
((A, P, (B, Q, C)), R, D) → (((A, P, B), Q, C), R, D) → ((A, P, B), Q, (C, R, D))
TECHNIQUES D’ÉQUILIBRAGE
Rotation double : double rotation gauche-droite
A B
B C (h) (h)
(h) (h-1)
95
((A, P, (B, Q, C)), R, D) → (((A, P, B), Q, C), R, D) → ((A, P, B), Q, (C, R, D))
TECHNIQUES D’ÉQUILIBRAGE
Rotation double : double rotation gauche-droite
A -1 +1
(h) C A B C D
(h) (h-1) (h)
(h) (h)
A B
B C (h) (h-1)
(h-1) (h)
96
((A, P, (B, Q, C)), R, D) → (((A, P, B), Q, C), R, D) → ((A, P, B), Q, (C, R, D))
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
-2 R R
Q
-2
0
P Q
A
R P
+1 -1
A (h) 0 0
(h) Q P
0 D B 0
(h) (h) A B C D
(h) (h) (h) (h)
B C C D
(h) (h) (h) (h)
97
(A, R, ((B, Q, C), P, D)) → (A, R, (B, Q, (C, P, D))) → ((A, R, B), Q, (C, P, D))
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
-2 R R
Q
-2
0
P Q
A
R P
+1 -1
A (h) 0 -1
(h) Q P
+1 D B -1
(h) (h) A B C D
(h) (h) (h-1) (h)
B C C D
(h) (h-1) (h-1) (h)
98
(A, R, ((B, Q, C), P, D)) → (A, R, (B, Q, (C, P, D))) → ((A, R, B), Q, (C, P, D))
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
-2 R R
Q
-2
0
P Q
A
R P
+1 -2
A (h) 1 0
(h) Q P
-1 D B 0
(h) (h-1)
A B C D
(h) (h-1) (h) (h)
B C C D
(h-1) (h) (h) (h)
99
(A, R, ((B, Q, C), P, D)) → (A, R, (B, Q, (C, P, D))) → ((A, R, B), Q, (C, P, D))
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
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
100
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.
101
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
-2
2
0
2
10 -1
2 10 12 4 16 8 6 14
Rotation simple
2 -1 12 0
10 0 10 0
102
2 0 12 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 2 10 12 4 16 8 6 14
10 1
10 0
2 -1 12 0 2 -1 12 -1
4 0 4 0 16 0
103
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
0
10
2 -2 12 -1
Rotation 4 0
12 -1
simple
-1
4 16 0
0 2 8 0 16 0
104
8 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
4 -1 12 -1
0 2 8 1 16 0
105
6 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
1
10 0 10
12 4 -1 14 0
4 -1 -2
Rotation
double
0
2 8 1 16 1 2 8 1 12 16
0
0 0
6 14 0 6 0 106
0
INSERTION
Exemple 2: soit l’arbre suivant, donner le résultat après
insertion de 7
10
4 14
2 8 12 16
1 6 9
107
INSERTION
Exemple 2: soit l’arbre ci-dessus, donner le résultat
après insertion de 7
2
10 8
0
4 -1 14 0
Rotation 0
4 10
-1
double
1
2 8 1 12 16
0 0
14 0
1
2 6 -1 9 0
0
1 6 -1 9 0
12 16
0
1 7 0 0
0
7
0 108
Nœud inséré
INSERTION
Après insertion à gauche Avant Après insertion à droite
+1 R 0 R -1 R
h+1 h h h h h+1
+2 R Cas A +1 R 0 R
0 -1 R -2 Cas B
R R
110
+2 Cas A
R
INSERTION
h+2 h
Avant
+1 R
0 P
h
+2 R h h +2 R
+1 P -1 P
h h
h+1 h h h+1
0 P
h
h h
-2 R -2 R
+1 P -1 P
h h
h+1 h h h
inférieur ou supérieur.
rééquilibrer.
SUPPRESSION
S’il y a déséquilibre, la rotation appliquée peut diminuer
114
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 10:
0 0
8 8
0 0
4 10
-1
4 12
-1
14 0
14 -1
1
2 6 -1 9 0 1
2 6 -1 9 0
0
1 12 16 0 0
1 16 0
7 0 0 7 0
115
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 8:
0 0
8 9
0 0
4 12
-1
4 12
-2
14 -1 14 -1
1
2 6 -1 9 0 1
2 6 -1
0
1 16 0 0
1 16 0
7 0
7 0
116
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 8:
1
0
9 9
RSG
0 0
4
0 -2 4 14
12
0 0
14 -1 1
2 6 12 16
1
2 6 -1
-1
0
1 16 0
0
1 7 0
7 0
117
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 12 puis 16:
1
9 9
+2
0 0
4 14 4
0
14
0
0 0
1
2 6 -1 12 16 1
2 6 -1
0
1 7 0 0
1 7 0
118
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 12 puis 16:
+2
9 -1
4
RSD
0 0
4 14 1
2 1
9
1
2 6 -1 1 0 6 -1
14 0
0
0
1 7 0 7
119
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:
-1 -1
50 50
+2
30
+1
100
+1
40 100
+1
0
-1 -1
-1
10 40 80 +1 200 -1
10 80 +1 200
+1 0
0
0 0
0
20 70 90 300 0
20 70 90 300
+1
0
60 120
60 0
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:
-1
50 -2
50
+2 RDG-D
40 100
+1
0
20 100
+1
-1 0
-1
10 80 +1 200 0
-1
10 40 80 +1 200
+1 0
0
0
20 70 90 300
70 90 0 300 0
+1
0
60 121
0
60
SUPPRESSION
Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:
-2 0
50 80
RDD-G
0 0
20 100
+1
50 100
-1
0 0
-1 -1
10 40 80 +1 200 20
0 +1
70 90 200
0
70 90 0 300 0
10 40 60 300
0
+1
0 0 0
122
0
60
PARTIE V:
ARBRES M-AIRE DE
RECHERCHE (AMR)
PLAN DE LA PARTIE V
Définitions
Modèle
Suppression
124
DÉFINITION
pointeurs.
125
DÉFINITION
Si s1, s2, ... sd sont les « d » sous arbres issus d'un nœud
donné avec les clés k1, k2, ....,kd-1 dans l'ordre ascendant,
alors :
Toutes les clés dans s1 sont inférieurs à k1
Toutes les clés dans sj (j=2,3, ...d-1) sont supérieurs à kj-1 et
inférieur à kj
Toutes les clés dans sd sont supérieurs kd-1.
128
MODÈLE
La structure de l’arbre ARM est la suivante:
Fin
129
MODÈLE
Pour écrire des algorithmes sur ce type d'arbres, le modèle
doit être formé des opérations suivantes :
CreerNoeud(x) LibererNoeud(P)
Info(P, i) Aff_info(P, x, i)
Fils (P, i) Aff_fils(P, Q, i)
Degré(P) Aff_Degré(P, n)
130
RECHERCHE
131
RECHERCHE
Exemple: Rechercher l’élément 68.
1 6 10 37 40
170
68
134
SUPPRESSION
On distingue deux types de suppression:
1. Suppression logique:
Laisser la clé au niveau du nœud et le marquer comme
supprimé
Le nœud reste utilisé pour l'algorithme de recherche
L’insertion d’un nœud supprimé consiste à le marquer
comme non supprimé
135
SUPPRESSION
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
136
SUPPRESSION
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 65 entraîne le décalage de 69 à la
position de 65 ainsi le déplacement du fils droit de 65.
62 69 137
68 68
SUPPRESSION
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 à
la position de 120.
100 120
110
138
68
SUPPRESSION
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
Exemple: la suppression du 85 entraîne le remplacement du
85 par 100 , ensuite la suppression du 100
12 50 100
120 150
139
110
PARTIE VI:
B-ARBRES: AMR EQUILIBRÉS
PLAN DE LA PARTIE VI
Introduction
Définition
141
INTRODUCTION
niveau.
Boeng / Balanced).
142
DÉFINITION
Un B-arbre d'ordre d (tel que d= 2*m +1) est défini comme
suit :
nœud trouvé.
144
INSERTION
Exemple: Considérons le B-arbre suivant d'ordre 3,
insérer les valeurs suivantes dans l’ordre : 55, 57, 95, 85, 87.
145
INSERTION
2. Si le nœud (P) n’est pas plein alors insérer la clé à sa
bonne position dans le nœud.
3. Sinon, si le nœud (P) est plein, l’éclatement se fait en
cascade (approche ascendante) comme suit
a. Classer les clés dans l’ordre croissant : a1, a2, …ad; soit
amil la clé du milieu
b. déplacer les clés amil+1 … ad dans un nouveau nœud (Q)
c. Insérer la valeur du milieu amil dans le nœud père (aller
à 2) de telle sorte que le nœud P se trouvera à sa
gauche et Q à sa droite. 146
INSERTION
Exemple: Considérons le B-arbre suivant d'ordre 3,
insérer les valeurs suivantes dans l’ordre : 55, 57, 95, 85, 87.
147
INSERTION
Exemple: Considérons le B-arbre suivant d'ordre 3,
insérer les valeurs suivantes dans l’ordre : 55, 57, 95, 85, 87.
148
SUPPRESSION
Il faut supprimer l‘élément tout en préservant la qualité
de B-arbre, c'est à dire en gardant au moins m clés dans le
nœud (non racine).
C'est le cas de la suppression physique dans un Arbre de
M-aire Recherche (AMR). En plus, si le nœud feuille qui
contenait la clé à supprimer a moins de m clés, alors l'action
suivante est entreprise :
149
SUPPRESSION
Cas 1: Si l'un des frères (gauche ou droit) contient plus de
m clés, alors la clé, soit Ks, dans le nœud père qui sépare
entre les deux frères est ajoutée au nœud "underflow" et le
dernier (si frère droit) ou le premier élément (si frère gauche)
est ajoutée au père à la place de Ks.
B-arbre d’ordre 5
Suppression de 113
150
SUPPRESSION
Cas 2-a: Si les deux frères contenaient exactement m clés,
le nœud "underflow" et l'un de ses frères seront concaténés (
fusionnés ou consolidés) en un seul nœud qui contient aussi
la clé séparatrice de leur père.
B-arbre d’ordre 5
Suppression de 120
151
SUPPRESSION
Cas 2-b: Il est aussi possible que le père contient
seulement m clés et par conséquent il n'a pas de clé à
donner. Dans ce cas, il peut emprunter de son père et frère.
B-arbre d’ordre 5
Suppression de 65
152
SUPPRESSION
Cas 2-c: Dans le pire des cas, quand les frères du père
n'ont pas des clés à donner, le père et son frère peuvent aussi
être concaténés et une clé est prise du grand père.
B-arbre d’ordre 5
Suppression de 173
153
SUPPRESSION
Cas 2-d: Si tous les antécédents d'un nœud et leurs frères
contiennent exactement m clés, une clé sera prise de la
racine (due aux concaténations en cascades):
Si la racine avait plus d'une clé, ceci termine le
processus.
Si la racine contenait une seule clé, elle sera utilisée
dans la concaténation. Le nœud racine est libéré et la
profondeur de l'arbre est réduit d'une unité.
154
SOURCES DE CE COURS
N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole
nationale Supérieure d’Informatique (ESI), 2014.
donnees/annee-universitaire-2014-2015/ancien-programme/semestre-2