Arbre AVL

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir AVL.
Un exemple d'arbre non-AVL.

En informatique théorique, les arbres AVL ont été historiquement les premiers arbres binaires de recherche automatiquement équilibrés. Dans un arbre AVL, les hauteurs des deux sous-arbres d'un même nœud diffèrent au plus de un. La recherche, l'insertion et la suppression sont toutes en O(\log_{2}(n)) dans le pire des cas. L'insertion et la suppression nécessitent d'effectuer des rotations.

La dénomination « arbre AVL » provient des noms de ses deux inventeurs, respectivement Georgii Adelson-Velsky et Evguenii Landis, qui l'ont publié en 1962 sous le titre An algorithm for the organization of information[1].

Le facteur d'équilibrage d'un nœud est la différence entre la hauteur de son sous-arbre droit et celle de son sous-arbre gauche. Un nœud dont le facteur d'équilibrage est 1, 0, ou -1 est considéré comme équilibré. Un nœud avec tout autre facteur est considéré comme déséquilibré et requiert un rééquilibrage. Le facteur d'équilibrage est soit calculé à partir des hauteurs des sous-arbres, soit stocké dans chaque nœud de l'arbre (ce qui permet un gain de place, ce facteur pouvant être stocké sur deux bits, mais complexifie les opérations d'insertion et de suppression).

Le même arbre après un rééquilibrage.

Opérations[modifier | modifier le code]

Les opérations de base d'un arbre AVL mettent en œuvre généralement les mêmes algorithmes que pour un arbre binaire de recherche, à ceci près qu'il faut ajouter des rotations de rééquilibrage nommées « rotations AVL ».

Insertion[modifier | modifier le code]

L'insertion d'un nœud dans un arbre AVL se déroule en deux étapes : tout d'abord, on insère le nœud exactement de la même manière que dans un arbre binaire de recherche ; puis on remonte depuis le nœud inséré vers la racine en effectuant une rotation sur chaque sous-arbre déséquilibré. La hauteur de l'arbre étant en O(\log_{2}(n)), et les rotations ayant un coût constant, l'insertion se fait finalement en O(\log_{2}(n)).

Suppression[modifier | modifier le code]

La suppression dans un arbre AVL peut se faire par rotations successives du nœud à supprimer jusqu'à une feuille (en choisissant ces rotations de sorte que l'arbre reste équilibré), et ensuite en supprimant cette feuille directement. La suppression se fait aussi en O(\log_{2}(n)).

Recherche[modifier | modifier le code]

La recherche dans un arbre AVL se déroule exactement de la même manière que pour un arbre binaire de recherche, et comme la hauteur d'un arbre AVL est en O(\log_{2}(n)), elle se fait donc en O(\log_{2}(n)). Contrairement aux arbres splay, la recherche ne modifie pas la structure de l'arbre.

Hauteur[modifier | modifier le code]

Dans un arbre AVL de hauteur h, dans le pire des cas, en supposant que l'arbre est déséquilibré vers la gauche, le sous-arbre de gauche aura une hauteur de h-1, tandis que le sous-arbre de droite aura une hauteur de h-2. Ceci donne une formule par récurrence pour connaître la taille minimale S_{\text{min}}(h) d'un arbre AVL de hauteur h. Cette formule de récurrence est proche de la définition par récurrence des nombres de Fibonacci : S_{\text{min}}(h)=S_{\text{min}}(h-1)+S_{\text{min}}(h-2)+1. D'où une estimation asymptotique pour S_{\text{min}}(h) de : \frac{1}{\sqrt{5}}\varphi^{h-2}-1,\varphi est le nombre d'or.

À cause de la propriété d'équilibre des sous-arbres des AVL, la hauteur maximale H_{max} d'un AVL avec n nœuds internes est liée à la taille minimale d'un AVL de hauteur h. La hauteur maximale est inférieure à[2],[3] : 
\log_\varphi(\sqrt 5 (n+2)) - 2 = \log_\varphi(2) \cdot \log_2(\sqrt 5 (n+2)) - 2 \approx 1{{,}}44\log_2(n+2) - 0{{,}}328

Cela donne une formule pour calculer la hauteur, dans le pire des cas, pour un arbre AVL contenant n nœuds internes.

Cette grandeur est meilleure que pour les arbres rouge et noir, où on a[2],[4] : 2 \times \log_{2}{n}

Notes et références[modifier | modifier le code]

  1. (en) G. Adelson-Velskii et E. M. Landis, « An algorithm for the organization of information ». Soviet Mathematics Doklady, 3:1259–1263, 1962.
  2. a et b Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction à l’algorithmique, Dunod,‎ 2002, 2e éd., 1146 p. [détail de l’édition] (ISBN 2-10-003922-9), annexe B
  3. [PDF] http://www.engr.mun.ca/~theo/Courses/dm/pub/2004/dm-application5.pdf
  4. Pour des informations sur la taille, on pourra aussi consulter la page web (en) http://www.dyalog.dk/dfnsdws/n_avl.htm

Sources[modifier | modifier le code]

  • Danièle Beauquier, Jean Berstel, Philippe Chrétienne : Éléments d’algorithmique. Masson, 1992. (ISBN 2-225-82704-4) Voir en particulier le chapitre 6 sur les « arbres et ensembles ordonnées ».
  • Donald Knuth. The Art of Computer Programming, volume 3 : « Sorting and Searching », 3e édition. Addison-Wesley, 1997. (ISBN 0-201-89685-0) Voir en particulier les pages 458 à 475 de la section 6.2.3 : « Balanced Trees », expression qui désigne les arbres AVL chez Knuth.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Lien externe[modifier | modifier le code]