Arbres AVL AV - Université de Montréal

publicité
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:
AV - L
Adel’son - Vel’skii
Landis









arbres 


binaires 

(1962)
de
recherche












Soient u , v et w trois noeuds tels que u est dans le
sous-arbre gauche de v et w dans son sous-arbre droit.
Alors, on a
cl é(u) < cl é(v) ≤ cl é(w)
Les éléments sont gardés en mémoire
dans les noeuds internes
4
44
2
17
Un parcours symétrique de l’arbre
visite les clés en ordre croissant
32
3
78
1
Propriété de balance: Pour chaque
noeud interne v , la hauteur des
enfants de v diffère d’au plus 1
50
48
2
62
1
88
1
1
La hauteur d’un arbre AVL est en O(log n)
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Insérer dans les arbres AVL
Chercher 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.
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:
Sinon, on retourne NULL
2
1
Exemple 1: Chercher(3)
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Arbres AVL
9
<
4
=
8
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Arbres AVL
>
88
62
62
48
<
w
44
2
17
78
32
Après l’insertion de (54,v), certains noeuds ne sont
plus balancés!!
2
78
50
50
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.
>
<
32
Si k n’est pas dans l’arbre l’algorithme
chercher(k) se terminera dans une feuille w
6
>
17
On commence par exécuter chercher(k)
Le prochain noeud visité dépend du résultat de la comparaison de k
avec la clé du noeud dans lequel on se trouve.
<
44
Exemple 1: Insérer(54,v)
Exemple 1: Chercher(4)
Si on trouve un noeud interne de clé
k, on retourne la valeur correspondant
à cette entrée de clé k
1
Arbres AVL
3
50
48
4
88
1
62
54
w
3
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:
z
z
2
17
32
On va nommer z le premier noeud débalancé
qu’on trouve sur ce chemin.
On va nommer y le fils de
hauteur
É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.
44
Les noeuds débalancés sont situés sur le
chemin du noeud w à la racine (pourquoi?)
y
50
3
48
88
62
54
de plus grande
4
78
x
4
5
débalancé...
3
1
32
1
2y
1
3
62
xb
T1
17
...balancé
b
B
B
x A
T3
A
T2
T0
C
T2
T1
z
T3
2
2
50
78
1
T1
T4
62
c
1
48
y
y
T0
3
2
a
5
T2
44
1
1
w
Arbres AVL
z
x
5
T3
T0
32
88
b
62 x
54
1) Rotations simples
88
54
4
3
50
Rotations et lois associatives
vers la droite
7
1
4
2
1
4
78
48
C
4
78
50
48
IFT2810, A2009, Sylvie Hamel
Université de Montréal
c
z 6
a
17
32
a
y
À la fin de la restructuration tous les noeuds internes
seront balancés (rebalancement global)
Restructuration de l’arbre après une insertion
version Goodrich et Tamassia:
2
Appliquer un algorithme de restructuration qui va
rebalancer le noeud interne z (rebalancement local)
c
z
2
17
Rotations et lois associatives
Arbres AVL
44
1
44
Goodrich et Tamassia (tableau)
w
On va nommer x le fils de y de plus grande
hauteur (si égalité, on choisit le fils qui est un
ancêtre de w )
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Restructuration de l’arbre après une insertion (suite)
(T4
1
54
88
B
T2)
C
T3
T4
B
(T2
C
T3)
T2
T0
IFT2810, A2009, Sylvie Hamel
Université de Montréal
T1
Arbres AVL
T3
6
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Arbres AVL
7
Rotations et lois associatives
Rotations et lois associatives (suite)
2) Rotations doubles
1) Rotations simples (suite)
y
A
z
vers la gauche
B
y
B
T0
z
C
T1
T2
x
vers la droite
A
T1
T0
y
x
C
T2
T3
A
(T1
B
(T0
A
T1)
B
T4
x
xB
T1
T0
A
((T2
B
y
z
T3
C y
A
T1
T0
T2
T3
IFT2810, A2009, Sylvie Hamel
Université de Montréal
C
A
(T1
T2
T3
T2
B
T2 ))
C
(T0
T3
A
Arbres AVL
T1 )
B
(T2
C
T3 )
9
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 enlevé
T2
T3)
(T0
T1
T0
z
Après la suppression, il est possible que certains noeuds internes soient
débalancés (en fait un seul noeud sera débalancé)
B
C
x
C
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.
z
T0
B
T0
A
Supprimer dans les arbres AVL
2) Rotations doubles (suite)
A
y
T3
IFT2810, A2009, Sylvie Hamel
Université de Montréal
8
Arbres AVL
Rotations et lois associatives (suite)
vers la gauche
B
T1
T4)
IFT2810, A2009, Sylvie Hamel
Université de Montréal
x
A
T3
T4
T0
z
C
T4)
(T0
Arbres AVL
A
T1 )
B
(T2
C
T3 )
10
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Arbres AVL
11
Supprimer dans un arbre binaire de recherche (rappel)
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
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)
22
Si k est pas dans l’arbre l’algorithme
chercher(k) se terminera dans un
noeud interne w
Exemple 2: Enlever(3)
6
44
w
8
5
5
12
32
50
48
IFT2810, A2009, Sylvie Hamel
Université de Montréal
2
17
17
50
78
54
48
Soit z le premier noeud non balancé sur le chemin allant de ce parent p à la
racine de l’arbre. Soit y le fils de z de hauteur maximale et soit x , le fils de
y de hauteur maximale
É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.
88
44
4
p
78
54
17
62
50
T0
48
88
a
yb
T0
88
54
62
b
44
78
50
17
xc
78
48
c
88
54
T2
T1
T2
T1
T0
IFT2810, A2009, Sylvie Hamel
Université de Montréal
13
Arbres AVL
za
62
9
Supprimer dans les arbres AVL (suite)
5
p
8
6
44
4
w
2
Exemple: Enlever(32)
44
x
8
Arbres AVL
5
9
y 5
5
Après la suppression d’un noeud, il est possible que son parent p cause un
débalancement
62
88
6
9
Supprimer dans les arbres AVL
17
2
1
2
1
w
On enlève les noeuds y et x
6
Sinon...
3
33
On enlève l’entrée dans w et on la
remplace par l’entrée dans y
Si l’un des enfant de w est une
feuille, on enlève cette feuille et w
IFT2810, A2009, Sylvie Hamel
Université de Montréal
>
1
On trouve le noeud interne y qui suit w
lors d’un parcours symétrique de l’arbre et
son fils gauche x
9
>
5
Supprimer dans un arbre binaire de recherche (suite)
Arbres AVL
14
a
(T1
b
T2)
IFT2810, A2009, Sylvie Hamel
Université de Montréal
(T0
Arbres AVL
a
T1)
b
T2
15
Performances pour les arbres AVL
Supprimer dans les arbres AVL (suite)
Rebalancer un noeud prend un temps O(1), si on implémente l’arbre AVL
à l’aide d’une structure chaînée
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é
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)
On continue donc à balancer l’arbre
jusqu’à ce qu’on atteingne la racine
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)
Exemple au tableau!!
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
Arbres AVL
16
IFT2810, A2009, Sylvie Hamel
Université de Montréal
Arbres AVL
17
Téléchargement