Arbres AVL AV - L Adel’son - Vel’skii Landis (1962) Arbres AVL Un arbre AVL est un arbre binaire de recherche balancé i.e un arbre binaire ayant les propriétés suivantes: arbres binaires 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 Un parcours symétrique de l’arbre visite les clés en ordre croissant 44 17 2 32 Propriété de balance: Pour chaque noeud interne v , la hauteur des enfants de v diffère d’au plus 1 4 3 78 1 50 48 1 2 62 88 1 1 La hauteur d’un arbre AVL est en O(log n) IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 1 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) 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 2 1 Exemple 1: Chercher(3) IFT2015, A2009, Sylvie Hamel Université de Montréal 6 < Arbres AVL 9 > < 4 = 8 2 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. 44 Exemple 1: Insérer(54,v) 17 On commence par exécuter chercher(k) 50 50 Arbres AVL 88 62 62 < w 44 2 17 78 32 Après l’insertion de (54,v), certains noeuds ne sont plus balancés!! IFT2015, A2009, Sylvie Hamel Université de Montréal > 48 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. 78 < 32 Si k n’est pas dans l’arbre l’algorithme chercher(k) se terminera dans une feuille w > 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: Les noeuds débalancés sont situés sur le chemin du noeud w à la racine (pourquoi?) On va nommer z le premier noeud débalancé qu’on trouve sur ce chemin. On va nommer y le fils de hauteur z de plus grande 44 z 2 17 32 y 50 4 78 3 48 88 62 54 x 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 ) IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 4 1 Restructuration de l’arbre après une insertion (suite) É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. Appliquer un algorithme de restructuration qui va rebalancer le noeud interne z (rebalancement local) Goodrich et Tamassia (tableau) 44 2 17 32 a y c z 50 78 4 3 48 88 62 54 1 b x w Rotations et lois associatives À la fin de la restructuration tous les noeuds internes seront balancés (rebalancement global) IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 5 Restructuration de l’arbre après une insertion version Goodrich et Tamassia: 44 2 5 a 17 débalancé... z 3 1 32 1 2 1 7 1 50 48 4 78 2y 1 c6 4 3 62 88 xb 5 T3 54 T2 T0 4 T1 44 3 2 17 62 1 a 32 ...balancé b 2 2 50 78 1 c 1 48 1 54 88 T2 T0 IFT2015, A2009, Sylvie Hamel Université de Montréal T1 Arbres AVL T3 6 Rotations et lois associatives 1) Rotations simples y z C y vers la droite x B B A x A T3 T2 T0 C T2 T1 z T3 T1 T0 (T4 B T2) C IFT2015, A2009, Sylvie Hamel Université de Montréal T3 T4 Arbres AVL B (T2 C T3) 7 Rotations et lois associatives (suite) 1) Rotations simples (suite) y z A vers la gauche B y B T0 C T1 T2 T0 A z (T1 IFT2015, A2009, Sylvie Hamel Université de Montréal B x A C T1 T0 T2 T3 T3 T4) (T0 Arbres AVL A T1) B x T4 8 Rotations et lois associatives 2) Rotations doubles vers la droite y z x C B y A T3 B T0 x T1 (T0 A (T1 A C T1 T0 z T2 T3 T2 B T2)) IFT2015, A2009, Sylvie Hamel Université de Montréal C (T0 T3 Arbres AVL A T1) B (T2 C T3) 9 Rotations et lois associatives (suite) 2) Rotations doubles (suite) vers la gauche A x z B C T0 xB T1 T0 A ((T12 B y z T3 C y A T1 T0 T2 T3 T2 T23) IFT2015, A2009, Sylvie Hamel Université de Montréal C T34) (T0 Arbres AVL A T1) B (T2 C T3) 10 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 enlevé IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 11 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 n’est pas dans l’arbre l’algorithme chercher(k) se terminera dans une feuille 22 6 9 > 5 44 w 5 Si l’un des enfant de w est une feuille, on enlève cette feuille et w 6 2 Sinon... 1 IFT2015, A2009, Sylvie Hamel Université de Montréal 8 Arbres AVL 9 5 8 12 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) > 1 On trouve le noeud interne y qui suit w lors d’un parcours symétrique de l’arbre et son fils gauche x 33 w 2 88 6 9 y 5 On enlève l’entrée dans w et on la remplace par l’entrée dans y x On enlève les noeuds y et x 1 5 w 2 8 6 IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 9 13 Supprimer dans les arbres AVL Après la suppression d’un noeud, il est possible que son parent p cause un débalancement Exemple: Enlever(32) 4 4 44 44 2 17 62 32 50 48 1 3 p 17 17 62 50 78 54 IFT2015, A2009, Sylvie Hamel Université de Montréal 48 88 Arbres AVL 3 78 54 88 14 Supprimer dans les arbres AVL (suite) 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. za 44 p 17 62 50 T0 48 a yb T0 88 54 44 78 50 17 xc 78 62 b 48 c 88 54 T2 T1 T2 T1 T0 a (T1 b T2) IFT2015, A2009, Sylvie Hamel Université de Montréal (T0 Arbres AVL a T1) b T2 15 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!! IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 16 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) IFT2015, A2009, Sylvie Hamel Université de Montréal Arbres AVL 17