Structures de données avancées :
Arbres AVL & Arbres Rouge et Noir
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
http://zegour.esi.dz email: d_zegour@esi.dz
Les arbres AVL
Arbres AVL
Un arbre AVL est un arbre de recherche binaire équilibré
Ajouter un champ balance (facteur d'équilibrage ) au niveau de chaque noeud
8 0 7
0 0 +1
3 2
7 3 4
5
8 6
1 0
8 2
9 4
0 0
0 0 +1
-1
9 0 0
0
| Profondeur(fg(n) )–
Profondeur(fd(n)) | <= 1
8 0 7
0 0 +1
3 2
7 3 4
5
8 6
1 0
8 2
9 4
0 0
0 0 +1
-1
9 0 0
0
5 +1
+1
+2
Les arbres AVL
Arbres AVL (Cas de déséquilibre)
0
8 0 7
0 0 +1
3 2
7 3 4
5
8 6
1 0
8 2
9 4
0 0
0 0 +1
-1
9 0 0
0
5 5 -1 -1
+2
Les arbres AVL
Arbres AVL (Cas de déséquilibre)
0
Arbres AVL (Techniques d'équilibrage ) Examinons un
sous arbre de racine le plus
jeune antécédent qui devient non équilibré suite à une insertion
Cas où le facteur d'équilibrage est +1
Les arbres AVL
A
B T3
T1 T2
+1 0
h=n h=n
h=n
B
Le nouveau nœud est inséré dans le sous arbre gauche de B. Donc f(B) devient 1 et f(A) devient 2
Arbres AVL (Techniques d'équilibrage ) Examinons un
sous arbre de racine le plus
jeune antécédent qui devient non équilibré suite à une insertion
Les arbres AVL
A
B T4
T1
+1 0
C
T2 T3
0
h=n
h=n
h=n-1 h=n-1
B
Le nouveau nœud est inséré dans le sous arbre droit de B. f(B) devient -1 et f(A) devient 2.
Cas où le facteur d'équilibrage est +1
Arbres AVL (Techniques d'équilibrage ) Transformer l'arbre de telle sorte que
l'inordre soit préservé l'arbre transformé soit équilibré
Les arbres AVL
Arbres AVL (Techniques d'équilibrage )
(a) rotation droite du nœud A
Les arbres AVL
A
B T3
T1 T2
+2 +1
h=n h=n
h=n
B
A B
T3 T1
T2 0 0
h=n
h=n h=n
B
Arbres AVL (Techniques d'équilibrage ) (b) rotation
gauche du nœud B suivie par une rotation droite du nœud A
Les arbres AVL
A
B T4
T1
+2
-1
C
T2 T3
0
h=n
h=n
h=n-1 h=n-1
B
h=n-1
B A
T1 T4
0
0
C
T2
-1
h=n h=n-1 h=n
B
T3
Arbres AVL (Algorithme d'insertion)
La première partie de l'algorithme consiste à insérer la clé dans l'arbre sans tenir compte du facteur d'équilibrage
Elle garde aussi la trace du plus jeune
antécédent, soit Y qui devient non équilibré
La deuxième partie fait la transformation à partir de Y
Les arbres AVL
Arbres AVL (Rotation gauche)
N
D D
G D
D G
P
D
D G
N D
D
G
P
AFF_FD(N, DG) AFF_FG(D, N)) AFF_FG(Parent, D) Rotation gauche(N)
Les arbres AVL
Arbres AVL (Rotation droite)
N
G D
G D
G G
P
G
D G
G N
G D
P
AFF_FG(N, GD) AFF_FD(G, N)) AFF_FD(Parent, G) Rotation droite (N)
Les arbres AVL
Arbres AVL (Exemples)
Insérons la séquence : A, B, X, L, M, C, D, E, H, R, F dans un arbre AVL.
Insertion A, B, X
Les arbres AVL
A
B
X
A
B
X
Arbres AVL (Exemples)
Insérons la séquence : A, B, X, L, M, C, D, E, H, R, F dans un arbre AVL.
Insertion L, M
Les arbres AVL
A
B
X
L
M
A
B
M
L X
Arbres AVL (Exemples)
Insérons la séquence : A, B, X, L, M, C, D, E, H, R, F dans un arbre AVL.
Insertion C
Les arbres AVL
A
B
M
L X
C
B
L
M
C X
A
Arbres AVL (Exemples)
Insérons la séquence : A, B, X, L, M, C, D, E, H, R, F dans un arbre AVL.
Insertion D, E
Les arbres AVL
B
L
M
C X
A
D
E
B
L
M
D X
A
C E
Arbres AVL (Exemples)
Insérons la séquence : A, B, X, L, M, C, D, E, H, R, F dans un arbre AVL.
Insertion H, R, F
Les arbres AVL
D
L
R
F X
B
E H A C
M
Arbres AVL (Suppression)
Étape 1 : comme dans un arbre de recherche binaire ordinaire
Étape 2 : mettre à jour les balances Cas où la balance d’un nœud A devient +2
Le fils gauche B de A doit exister Les cas suivants peuvent se présenter
a) B a une balance égale à + 1 b) B a une balance égale à – 1 c) B a une balance égale à 0
Même traitement symétrique dans le cas où la balance d’un nœud A devient -2 Traitement peut continuer en cascade
Les arbres AVL
Arbres AVL (Suppression) B a une balance égale à + 1
A
B n-1
n n-1
+2 +1
A B
n-1 n
n-1 0
0
Les arbres AVL
Arbres AVL (Suppression) B a une balance égale à -1
B a donc un fils à sa droite, soit C.
Cas Balance (C)= 0
A
B n-1
n-1 n
+2 -1
A
B n-1
n-1
+2 -1
C
n-1 n-1
0
Les arbres AVL
Arbres AVL (Suppression)
B a une balance égale à -1 , C son fils droit avec Balance(C)=0
A C
n-1 n-1
0
0 B
n-1 n-1
0 A
B n-1
n-1
+2
-1
C
n-1 n-1
0
Les arbres AVL
Arbres AVL (Suppression) B a une balance égale à -1
B a donc un fils à sa droite, soit C.
Balance (C)= +1
A
B n-1
n-1 n
+2 -1
A
B n-1
n-1
+2 -1
C
n-1 n-2
+1
Les arbres AVL
Arbres AVL (Suppression)
A C
n-1 n-2
0
-1 B
n-1 n-1
0 A
B n-1
n-1
+2
-1
C
n-1 n-2
+1
B a une balance égale à -1 , C son fils droit avec Balance(C)=+1
Les arbres AVL
Arbres AVL (Suppression) B a une balance égale à -1
B a donc un fils à sa droite, soit C.
Balance (C)= -1
A
B n-1
n-1 n
+2 -1
A
B n-1
n-1
+2 -1
C
n-2 n-1
-1
Les arbres AVL
Arbres AVL (Suppression)
A C
n-1 n-1
0
0 B
n-2 n-1
+1 A
B n-1
n-1
+2
-1
C
n-2 n-1
-1
B a une balance égale à -1 , C son fils droit avec Balance(C)=-1
Les arbres AVL
Arbres AVL (Suppression) B a une balance égale à 0
A
B n-1
n n
+2 0
A B
n-1 n
n -1
+1
Les arbres AVL
Arbres AVL (Analyse théorique)
la profondeur maximale d'un arbre binaire équilibré est 1.44*Log2n
La recherche dans un tel arbre n'exige jamais plus de 44% de plus de comparaisons que pour un arbre binaire complet
Operations de maintenance :
- Restructuration = 1 rotation ou double rotation - Insertion : au plus 1 restructuration
- suppression : au plus Log2 (N) restructurations
Les arbres AVL
Les arbres Rouge et Noir
Arbre 2-4
37
50 30
35
39 70
10
20 33
34
36 38 40 60
80 10
0 90
32
Arbre rouge et noir
Arbres Red Black
Un arbre rouge et noir (RB-tree) est un arbre binaire de recherche où chaque nœud est de couleur rouge ou noire .
- Nœuds noirs : équilibrage parfait
- Nœuds rouges : tolérer légèrement le déséquilibre Pire des cas:
Alternance entre les nœuds rouges et noirs.
De plus, toutes les branches issues de tout nœud :
1. Ne possèdent pas deux nœuds rouges consécutifs.
2. Possèdent le même nombre de nœuds noirs
Les arbres Rouge et Noir
La racine est noire // Les nœuds Nils sont considérés noirs
Arbres Red Black (Insertion)
Insertion comme dans un arbre de recherche binaire.
Si son père est aussi rouge, un algorithme de maintenance est appliqué Le nœud inséré est toujours une feuille
On lui attribue la couleur rouge
Les arbres Rouge et Noir
Arbres Red Black(Insertion) CAS 1: le frère F de P est
rouge
P P
F P
X
P P
F P
X
Les nœuds P et F deviennent noirs et leur père PP devient rouge.
Le processus continue en cascade X : nœud
introduit
Les arbres Rouge et Noir
Arbres Red Black(Insertion)
CAS 2: le frère F de P est noir et X est le fils gauche de P.
P P
F P
X D
P
P
P X P
D F P
Rotation droite du nœud PP.
P devient noir et PP rouge.
Le processus se termine
Les arbres Rouge et Noir
Arbres Red Black(Insertion)
CAS 3: le frère F de P est noir et X est le fils droit de P.
P P
F P
X
B A
X
P P P
B F A
Rotation gauche du nœud P + rotation droite du nœud PP.
X devient noir et PP rouge.
Le processus se termine
Les arbres Rouge et Noir
Arbres Red Black(Insertion)
CAS 4: le nœud père P est la racine de l'arbre
P
X
P
X
Le nœud père devient noir
C'est le seul cas où la hauteur noire de l'arbre augmente.
Le processus se termine
Les arbres Rouge et Noir
Arbres Red Black (Exemple)
13
10
13
10
13
5
5
10
Rotation 13
Couleur du frère de P= noir Et X = fg(P)
X P
Insérer 13 Insérer 10
Insérer 5
Les arbres Rouge et Noir
Arbres Red Black(exemple)
5
10
13
Coloration Couleur du frère de P=
rouge Insérer 2
2 X
P
PP
5
10
13
2 X
P
PP
5
10
13
2 X
P Coloration PP
Les arbres Rouge et Noir
Arbres Red Black (exemple)
Double rotation Insérer 4
5
10
13
2
X P
PP
4
Couleur du frère de P= noir
ET X = fd(P) ET P=FG(PP) 4
10
13
2 5
Les arbres Rouge et Noir
Suppression comme dans un arbre de recherche binaire.
On considère que le nœud qui remplace le nœud supprimé porte une couleur noire en plus.
Ceci signifie qu'il devient noir s'il est rouge et qu'il devient doublement noir s'il est déjà noir.
L’algorithme de maintenance a donc pour rôle de supprimer ce nœud doublement noir.
Si le nœud physiquement supprimé est noir, un algorithme de maintenance est appliqué.
Arbres Red Black (Suppression)
Les arbres Rouge et Noir
P
P
F X
P
F X
Soit X le noeud doublement noir (Supposé ici comme un fils gauche) et P son père
CAS 1: Le frere F de X est noir et a deux fils noirs
P
P
F X
F X
PP
Transformer F en un noeud rouge
Si le parent P est noir, le processus continue en remontant dans l’arbre. P devient le nouveau noeud doublement noir.
Arbres Red Black (Suppression)
Les arbres Rouge et Noir
P
P
F
A X
F D
B C
F
F P D
X A B C
CAS 2: Le frère F du noeud X est noir et a un fils droit rouge (FD)
Rotation gauche de P
Recolorer : P et FD deviennent noirs et la couleur de F est celle de P avant la transformation.
Le processus se termine
Arbres Red Black (Suppression)
Les arbres Rouge et Noir
P
P
F F
G X
A B
F G
F P
X A B
CAS 3: Le frere F du noeud X est noir et a un fils gauche rouge(FG)
Rotation droite (F) + rotation gauche (P).
Recolorer : P devient noir et la couleur de FG est celle de P avant la transformation.
Le processus se termine
Arbres Red Black (Suppression)
Les arbres Rouge et Noir
P
P
S X
A B
CAS 4: Le frère F de X est rouge
S
B P
PX A
Rotation gauche (P)
Le processus continue selon le cas 1, 2 ou 3
Arbres Red Black (Suppression)
Les arbres Rouge et Noir
PX
Soit X le noeud doublement noir
CAS 0: X est la racine de l’arbre
X
X devient simplement un noeud noir.
C’est le seul cas ou la hauteur de l’arbre diminue. Le processus se termine.
Arbres Red Black (Suppression)
Les arbres Rouge et Noir
Arbres Red-Black (Analyse théorique)
la profondeur maximale d'un arbre binaire équilibré est 2*Log2(n)
Recherche, insertion et suppression : O(Log2(n)) Operations de maintenance :
- Restructuration et coloration.
- Insertion : au plus 1 restructuration et au plus Log2 (n) colorations.
- suppression : au plus 2 restructurations et au plus Log2 (n) colorations.
N : nombre d’élements insérés.