Les arbres AVL

Transcription

Les arbres AVL
Les arbres AVL
DUT Informatique – Deuxième année
Université du Havre
G. Simon/B. Mermet – octobre 2007
Introduction
➲
Pourquoi
●
●
➲
Les arbres équilibrés rendent les recherches
plus efficaces
Trouver comment maintenir un arbre
relativement équilibré au fur et à mesure des
insertions (et suppression)
Solution :
●
●
Les arbres AVL (Adelson-Velskii et Landis) :
pour tout sommet, les hauteurs des sousarbres gauche et droit diffèrent d’au plus 1.
Rmq : un arbre AVL N'EST PAS un arbre
équilibré
G. Simon/B. Mermet – octobre 2007
Exemple d'arbre AVL
H=4
50
H=2
H=3
40
80
H=2
H=1
20
H=0
Rappel : hauteur
arbre vide = -1
G. Simon/B. Mermet – octobre 2007
H=1
45
H=0
30
42
H=0
60
H=1
90
H=0
47
H=0
70
48
Préambule : Rotation droite
s1
s2
sa1
s2
sa3
sa2
s1
sa1
sa2
Rotation droite autour de S1, notée rd(S1)
G. Simon/B. Mermet – octobre 2007
sa3
Préambule : Rotation gauche
s2
s1
s2
s1
sa3
sa1
sa2
sa3
sa1
sa2
Rotation gauche autour de S1, notée rg(s1)
G. Simon/B. Mermet – octobre 2007
Insertion dans un arbre AVL
Le principe de l'insertion dans un arbre AVL
est le suivant :
●
●
- insérer le nouveau noeud au bon endroit
- au fur et à mesure de la remontée dans l'arbre
(du noeud père du noeud inséré à la racine),
rééquilibrer l'arbre en effectuant les rotations
apropriées
G. Simon/B. Mermet – octobre 2007
Choix des rotations
➲
Notations
●
●
●
●
➲
Soient N le noeud courant, Ng son fils gauche et Nd sont fils
droit.
Soient Ngg le fils gauche de Ng et Ngd le fils droit de Ng
Soient Ndg le fils gauche de Nd et Ndd le fils droit de Nd
Soit h(x) la hauteur de l'arbre de racine le noeud x.
Algorithme
●
●
Si |h(Ng)-h(Nd)| <= 1, ne rien faire
Sinon
●
●
●
●
Si h(Ng)-h(Nd) = 2
● Si h(Ngg) > h(Ngd) Alors rd(N)
● Sinon rg(Ng) puis rd(N)
Sinon (h(Ng)-h(Nd) = -2)
● Si h(Ndd) > h(Ndg) Alors rg(N)
● Sinon rd(Nd) puis rg(N)
Fsi
Fsi
G. Simon/B. Mermet – octobre 2007
cas (1)
cas (1a)
cas (1b)
cas (2)
cas (2a)
cas (2b)
Exemple d'ajout : 49
50
40
80
20
60
45
90
H=2
30
42
N 47
70
H=1
Nd
h(Ng) = -1
h(Nd) = 1
h(Ng)-h(Nd) = -2 => cas (2)
h(Ndd) > h(Ndg) => cas (2a) :
rg(N)
48
H=0
G. Simon/B. Mermet – octobre 2007
49 Ndd
Exemple d'ajout : 49
50
40
80
H=2
H=1
20
60
45
30
OK
H=1
H=0
H=0
90
42
48
70
H=0
47
G. Simon/B. Mermet – octobre 2007
H=0
49
Exemple d'ajout : 49
50
OK
H=3
H=2
N 40
80
H=2
H=1
20
H=1
H=0
60
90
45
30
H=0
H=1
H=0
H=0
42
48
70
H=0
47
G. Simon/B. Mermet – octobre 2007
H=0
49
Exemple d'ajout : 49
OK
50
H=3
H=2
N 40
80
H=2
H=1
20
H=1
H=0
60
90
45
30
H=0
H=1
H=0
H=0
42
48
70
H=0
47
G. Simon/B. Mermet – octobre 2007
H=0
49
Exemple d'ajout : 46
50
N 40
80
N 45
20
H=0
30
42
Ng
Nd
60
90
H=2
48
70
H=1
47
46
G. Simon/B. Mermet – octobre 2007
H=0
49
h(Ng) = 0
h(Nd) = 2
h(Ng) – h(Nd) = -2 => cas (2)
h(Ndg) > h(Ndd) =>cas (2b)
rd(Nd) puis rg(N)
Exemple d'ajout : 46
50
N 40
80
N 45
20
30
90
47
42
46
G. Simon/B. Mermet – octobre 2007
60
h(Ng) = 0
h(Nd) = 2
h(Ng) – h(Nd) = -2 => cas (2)
h(Ndg) > h(Ndd) =>cas (2b)
rd(Nd) puis rg(N)
70
48
49
Exemple d'ajout : 46
H=4
50
H=3
H=2
N 40
80
H=1
H=2
20
H=1
H=0
60
90
47
H=1
H=0
30
H=1
48
45
H=0
H=0
42
G. Simon/B. Mermet – octobre 2007
46
H=0
H=0
70
49
h(Ng) = 0
h(Nd) = 2
h(Ng) – h(Nd) = -2 => cas (2)
h(Ndg) > h(Ndd) =>cas (2b)
rd(Nd) puis rg(N)

Documents pareils