Arbres AVL
Adel’son - Vel’skii
AV - L
Landis (1962)
IFT2810, A2009, Sylvie Hamel
Université de Montréal 1
Arbres AVL
Arbres AVL
Un arbre AVL est un arbre binaire de recherche balancé i.e un arbre
binaire ayant les propriétés suivantes:
La hauteur d’un arbre AVL est en O(log n)
cl´e(u)<cl´e(v)cl´e(w)
Soient , et trois noeuds tels que est dans le
sous-arbre gauche de et dans son sous-arbre droit.
Alors, on a
u
v
w
u
v
w
Les éléments sont gardés en mémoire
dans les noeuds internes
Un parcours symétrique de l’arbre
visite les clés en ordre croissant
Propriété de balance: Pour chaque
noeud interne , la hauteur des
enfants de diffère d’au plus 1
v
v
44
17 78
32 50 88
48 62
arbres
binaires
de
recherche
4
1
1
1
1
3
2
2
2
Arbres AVL
Chercher dans les arbres AVL
Pour chercher un élément de clé k dans un arbre AVL, on procéde
exactement de la même façon que pour la recherche dans les arbres
binaires de recherche:
Exemple 1: Chercher(4)
6
Le prochain noeud visité dépend du résultat de la comparaison de k
avec la clé du noeud dans lequel on se trouve.
Si on trouve un noeud interne de clé
k, on retourne la valeur correspondant
à cette entrée de clé k
Sinon, on retourne NULL
Exemple 1: Chercher(3)
<
2
>
4
=
<
IFT2810, A2009, Sylvie Hamel
Université de Montréal
3
Arbres AVL
Insérer dans les arbres AVL
Pour insérer un élément (k,v) dans un arbre AVL, on commence par
exécuter l’algorithme d’insertion d’un arbre binaire de recherche.
Exemple 1: Insérer(54,v)
On commence par exécuter chercher(k)
Si k n’est pas dans l’arbre l’algorithme
chercher(k) se terminera dans une feuille w
On insère k dans w et on change w en un
noeud interne
Si k est dans l’arbre l’algorithme chercher(k)
se terminera dans un noeud interne w. On
applique alors récursivement l’algorithme
chercher(k) sur le filsDroit de w, jusqu’à ce
qu’on trouve une feuille.
44
17 78
32 50 88
48 62
44
78
50
62
<
>
w
>
<
Après l’insertion de (54,v), certains noeuds ne sont
plus balancés!!
1
3
4
2
44
17 78
32 50 88
48 62
54
w
78
44
IFT2810, A2009, Sylvie Hamel
Université de Montréal
4
Arbres AVL
Restructuration de l’arbre après une insertion
Après l’insertion d’une entrée dans un arbre AVL, il est possible que
certains noeuds internes soient débalancés.
Pour retrouver la propriété de balance, on va
devoir restructurer l’arbre comme suit:
Les noeuds débalancés sont situés sur le
chemin du noeud w à la racine (pourquoi?)
44
17 78
32 50 88
48 62
54
1
3
4
2
78
44
w
z
On va nommer le premier noeud débalancé
qu’on trouve sur ce chemin.
z
On va nommer le fils de de plus grande
hauteur
z
y
y
On va nommer le fils de de plus grande
hauteur (si égalité, on choisit le fils qui est un
ancêtre de )
y
x
w
x
IFT2810, A2009, Sylvie Hamel
Université de Montréal
5
Arbres AVL
Restructuration de l’arbre après une insertion (suite)
44
17 78
32 50 88
48 62
54
1
3
4
2
78
44
w
z
y
x
Étant donné les noeuds internes x, y et z, on
renomme par “a” le premier de ces sommets visités
lors d’un parcours symétrique de l’arbre, par “b”, le
deuxième et par “c”, le troisième.
a
b
c
Appliquer un algorithme de restructuration qui va
rebalancer le noeud interne z (rebalancement local)
Goodrich et Tamassia (tableau)
Rotations et lois associatives
À la fin de la restructuration tous les noeuds internes
seront balancés (rebalancement global)
IFT2810, A2009, Sylvie Hamel
Université de Montréal
6
Arbres AVL
Restructuration de l’arbre après une insertion
version Goodrich et Tamassia:
a
b
c
88
44
17 78
32 50
48 62
2
5
1
1
3
4
2
1
54
1
T
0
T
2
T
3
x
y
z
2
3
4
5
6
7
1
débalancé...
T1
44
17
32
2
1
48
1
T
0
54
T1
1
62
78
b
50
a
c
T2
88
1
T
3
2
2
3
4
...balancé
IFT2810, A2009, Sylvie Hamel
Université de Montréal
7
Arbres AVL
Rotations et lois associatives
1) Rotations simples
vers la droite
T4
(T4BT2)CT3
T4B(T2CT3)
T0
A
B
C
T1
T2
T3
z
y
x
B
A
T0
T1
C
T2
T3
z
y
x
IFT2810, A2009, Sylvie Hamel
Université de Montréal
T4
8
Arbres AVL
Rotations et lois associatives (suite)
1) Rotations simples (suite)
vers la gauche
T0A(T1BT4)
(T0AT1)BT4
A
B
C
T0
T1
T2
T3
z
y
x
B
A
T0
T1
C
T2
T3
z
y
x
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Rotations et lois associatives
2) Rotations doubles
vers la droite
9
Arbres AVL
B
A
T0
T1
C
T2
T3
C
A
T0
T3
B
T1
T2
(T0A(T1BT2)) CT3
(T0AT1)B(T2CT3)
z
y
x
z
y
x
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Rotations et lois associatives (suite)
2) Rotations doubles (suite)
vers la gauche
10
Arbres AVL
B
A
T0
T1
C
T2
T3
A
C
T3
T0
B
T1
T2
T0A((T2BT3)CT4)
(T0AT1)B(T2CT3)
z
y
x
z
y
x
IFT2810, A2009, Sylvie Hamel
Université de Montréal
11
Arbres AVL
Supprimer dans les arbres AVL
Pour supprimer un élément de clé k dans un arbre AVL, on commence par
exécuter l’algorithme de suppression d’un arbre binaire de recherche.
Après la suppression, il est possible que certains noeuds internes soient
débalancés (en fait un seul noeud sera débalancé)
On va faire une restructuration de l’arbre autour de ce noeud, ce qui
causera un rebalancement local. Il est possible que cette restructuration
cause le débalancement d’un autre noeud.
On va restucturer l’arbre tant qu’il y a un noeud débalancé sur le chemin
de p à la racine, où p est le parent du noeud enle
IFT2810, A2009, Sylvie Hamel
Université de Montréal
5
12
Arbres AVL
Supprimer dans un arbre binaire de recherche (rappel)
Pour enlever un élément de clé k dans un arbre binaire de recherche, on
commence par exécuter l’algorithme chercher(k).
Exemple 1: Enlever(4)
Si k est pas dans l’arbre l’algorithme
chercher(k) se terminera dans un
noeud interne w
Si l’un des enfant de w est une
feuille, on enlève cette feuille et w
Sinon...
6
92
51 8
6
92
45 8
6
2
<
>
4
5
w
IFT2810, A2009, Sylvie Hamel
Université de Montréal
13
Arbres AVL
Supprimer dans un arbre binaire de recherche (suite)
Si k est pas dans l’arbre, l’algorithme chercher(k) se terminera dans un noeud
interne w. Si les fils de w sont tous les deux des noeuds internes alors
Exemple 2: Enlever(3)
3
1
8
6 9
5
2
1
3
>
w
On trouve le noeud interne y qui suit w
lors d’un parcours symétrique de l’arbre et
son fils gauche x
8
6
5
y
x
On enlève l’entrée dans w et on la
remplace par l’entrée dans y
On enlève les noeuds y et x
5
1
8
6 9
w
2
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Supprimer dans les arbres AVL
14
Arbres AVL
Après la suppression d’un noeud, il est possible que son parent p cause un
débalancement
44
17
7832 50
88
48
62
54
Exemple: Enlever(32)
44
17
7850
88
48
62
54
17
3 4
5
24
5
p
IFT2810, A2009, Sylvie Hamel
Université de Montréal
T2
44
17
7850
88
48
62
54
15
Arbres AVL
Supprimer dans les arbres AVL (suite)
Soit le premier noeud non balancé sur le chemin allant de ce parent p à la
racine de l’arbre. Soit le fils de de hauteur maximale et soit , le fils de
de hauteur maximale
z
y
x
z
y
p
z
y
x
Étant donné les noeuds internes x, y et z, on renomme par le premier de ces
sommets visités lors d’un parcours symétrique de l’arbre, par , le deuxième et
par , le troisième.
a
b
c
a
b
c
T0
T1
T2
T0a(T1bT2)
(T0aT1)bT2
62
b
78
88
c
44
a
17
T0
50
48 54
T1
IFT2810, A2009, Sylvie Hamel
Université de Montréal
16
Arbres AVL
Supprimer dans les arbres AVL (suite)
Attention!! Il est possible qu’après le rebalancement
d’un noeud, un autre noeud (sur le chemin
allant vers la racine) se retrouve débalancé
On continue donc à balancer l’arbre
jusqu’à ce qu’on atteingne la racine
Exemple au tableau!!
IFT2810, A2009, Sylvie Hamel
Université de Montréal
17
Arbres AVL
Performances pour les arbres AVL
Rebalancer un noeud prend un temps O(1), si on implémente l’arbre AVL
à l’aide d’une structure chaînée
L’algorithme de recherche prend un temps O(log n)
La hauteur de l’arbre est O(log n) et aucune restructuration est
nécessaire
L’algorithme d’insertion prend un temps O(log n)
Chercher l’endroit où insérer prend un temps O(log n)
Trouver un noeud non balancé (si il y en a un) prend un
temps O(log n)
Restructurer l’arbre prend un temps O(1)
L’algorithme de suppression prend un temps O(log n)
Chercher le noeud à enlever prend un temps O(log n)
On devra faire, au plus, O(log n) restructuration
Chaque restructuration prend un temps O(1)
IFT2810, A2009, Sylvie Hamel
Université de Montréal
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !