TNSI : Arbres AVL
\(=\) Arbres Binaires de Recherche Équilibrés⚓︎
Définition⚓︎
Les deux inventeurs et
, ont étudié ces Arbres en \(1962\) dans leur article An Algorithm for the Organization of Information.
Arbre AVL, pour Adelson-Velskii et Landis, 1962
Un
Caractérisation d'un Arbre AVL⚓︎
On peut traduire cette définition en calculant, pour chaque noeud, un paramètre/nombre nommé facteur d'équilibrage :
Facteur d'Équilibrage d'un noeud
Le
Caractérisation d'un Arbre AVL
Un ABR est un arbre AVL \(\Leftrightarrow\) tous les noeuds ont un facteur d'équilibrage de \(-1\), \(0\) ou \(1\)
Caractérisation d'un Arbre Déséquilibré
Un ABR est déséquilibré \(\Leftrightarrow\) il existe au moins un noeud tel que:
- facteur \(\le -2\)
- facteur \(\ge 2\)
Cas de Figure⚓︎
Arbres AVL⚓︎
Un Exemple d'Arbres AVL : Les Arbres de Fibonacci : \(AF_{n+1}=1+AF_{n}+AF_{n-1}\)⚓︎
- On ajoute un nouveau noeud \(r\) à la Racine
- L'enfant gauche de \(r\) est \(AF_{n}\)
- L'enfant droit de \(r\) est \(AF_{n-1}\)
AVANT Rééquilibrage
= un ABR équilibré,
APRÈS Rééquilibrage
Hauteur Logarithmique d'un Arbre AVL⚓︎
Pte
Dans un arbre AVL, La hauteur \(h\) est logarithmique en \(n\)
càd que \(h\) est proportionnelle à \(\log_2 (n)\,\,\) avec \(C\approx 1,45\)
càd qu'il existe une constante \(C\) telle que :
Opérations de Base des Arbres AVL⚓︎
Recherche dans un Arbre AVL⚓︎
Recherche d'une Clé dans un Arbre AVL
La Recherche d'une Clé dans un arbre AVL se déroule exactement comme dans un Arbre Binaire de Recherche (ABR),
La complexité de la Recherche d'une Clé dans un Arbre AVL est donc encore en \(O(h)\), comme pour un arbre ABR, et de plus, puisque la hauteur \(h\) d'un arbre AVL est en \(O ( \log_2 ( n ) )\), Alors :
Complexité de la Recherche dans un Arbre AVL
Dans un Arbre AVL, La Recherche d'une Clé se fait en
Insertion dans un Arbre AVL⚓︎
Principe Général de l'insertion dans un Arbre AVL⚓︎
Insertion d'une Clé dans un Arbre AVL
L'Insertion d'un noeud dans un arbre AVL se déroule en deux étapes :
Insertion dans l'arbre AVL : Tout d'abord, on insère le noeud à la bonne place, exactement comme dans un ABR
Rééquilibrage (si besoin) : Si le facteur d'équilibrage \(eq(s)\) d'un noeud \(s\) est :
Alors on rééquilibre l'arbre AVL en remontant (uniquement) sur le chemin vers la racine depuis le noeud inséré en effectuant :
* une
Pour chaque insertion, il sera nécessaire de réaliser \(0\) ou \(1\) rotation simple ou double.
Rééquilibrage d'un Arbre AVL : Rotation Simple et Rotations Double⚓︎
Hein
des Rotations
C'est quoi çà
- Rotation Double à Droite autour de r : \(=\) Rotation Gauche-Droite
- Rotation Double à Gauche autour de r \(=\) Rotation Droite-Gauche
Un Vrai Exemple détaillé d'insertion dans un AVL⚓︎
On considère l'arbre AVL suivant:
L'Arbre AVL devient
provisoirement déséquilibré :
$$eq(6)=-1; eq(8)=-2$$
L'Arbre AVL redevient équilibré.
TOUS les facteurs d'équilibrage vérifient :
$$eq(s)\in \{-1;0;+1\}$$
L'Arbre AVL devient
provisoirement déséquilibré :
$$eq(25)=+1; \,\, eq(23)=+2$$
L'Arbre AVL redevient équilibré.
TOUS les facteurs d'équilibrage vérifient :
$$eq(s)\in \{-1;0;+1\}$$
L'Arbre AVL devient
provisoirement déséquilibré :
$$eq(6)=+1; \,\, eq(8)=-2$$
L'Arbre AVL redevient équilibré.
TOUS les facteurs d'équilibrage vérifient :
$$eq(s)\in \{-1;0;+1\}$$
L'Arbre AVL devient
provisoirement déséquilibré :
$$eq(25)=-1; \,\, eq(23)=+2$$
L'Arbre AVL redevient équilibré.
TOUS les facteurs d'équilibrage vérifient :
$$eq(s)\in \{-1;0;+1\}$$
Complexité de l'Insertion d'une Clé dans un Arbre AVL⚓︎
La Complexité de l'Insertion d'une Clé dans un Arbre AVL est donc encore, dans le pire des cas, en \(O(h)+O(1)=O(h)\), et puisque la hauteur \(h\) d'un arbre AVL est en \(O ( \log_2 ( n ) )\), Alors :
Complexité de l'Insertion d'une Clé dans un Arbre AVL
Dans un Arbre AVL, L'insertion d'une Clé se fait en
- Chercher l'endroit où insérer la clé prend un temps \(O(\log_2 (n))\)
- Trouver un noeud déséquilibré (s'il y en a un) prend un temps \(O(\log_2 (n))\)
- Rééquilibrer l'arbre prend un temps \(O(1)\)
Suppression dans un Arbre AVL⚓︎
Suppression d'une Clé dans un Arbre AVL
La Suppression d'un noeud dans un arbre AVL se déroule en deux étapes :
Suppression dans l'arbre AVL : Tout d'abord, on Supprime le noeud, exactement comme dans un ABR
Rééquilibrage (si besoin) : Si le facteur d'équilibrage \(eq(s)\) d'un noeud \(s\) est :
Alors on rééquilibre l'arbre AVL en remontant (uniquement) sur le chemin vers la racine depuis le noeud supprimé en effectuant :
- une
Rotation Simple : complexité en \(O(1)\), ou bien - une
Rotation Double (= \(2\) rotations simples connexes) : complexité en \(O(1)\)
Pour chaque suppression, il sera nécessaire de réaliser au total entre \(0\) et \(h\) rotations simples ou doubles, où \(h\) est la hauteur (initiale) de l'arbre.
Complexité de la Suppression d'une Clé dans un Arbre AVL
La suppression se fait aussi en
- Chercher le noeud à supprimer prend un temps \(O(\log_2 (n))\)
- On devra faire, au plus, \(O(\log_2 (n))\) Rééquilibrages
- Chaque Rééquilibrage prend un temps \(O(1)\)
Résumé des Opérations dans un Arbre AVL⚓︎
Pte
Dans un Arbre AVL, dans le pire des cas, on peut déterminer les complexités en temps pour les opérations suivantes :
- Recherche d'une Clé :
\(O(\log_2 (n))\) - Insertion d'une Clé :
\(O(\log_2 (n))\) - Suppression d'une Clé :
\(O(\log_2 (n))\)