diff --git a/slides/cours_17.md b/slides/cours_17.md index 5b2049bc92f348626b6da2e0087fadf99e951008..9612e8faa48fe7a36f57bb0ffdff956d80700d62 100644 --- a/slides/cours_17.md +++ b/slides/cours_17.md @@ -1343,7 +1343,7 @@ graph TD; ## Cas 2a -* `v1`, `v2`, `u`, `w` ont la même hauteur. +* `v1`, `v2`, `u`, `w` même hauteur. * déséquilibre en `C` après insertion dans `v2`  @@ -1397,3 +1397,115 @@ graph TD; ::: +# Le facteur d'équilibre (balance factor) + +## Définition + +``` +fe(arbre) = hauteur(droite(arbre)) - hauteur(gauche(arbre)) +``` + +## Valeurs possibles? + +. . . + +``` +fe = {-1, 0, 1} // arbre AVL +fe = {-2, 2} // arbre déséquilibré +``` + +{width=40%} + +# Algorithme d'insertion + +* Insérer le noeud comme d'habitude. +* Mettre à jour les facteurs d'équilibre jusqu'à la racine (ou au premier + noeud déséquilibré). +* Rééquilibrer le noeud si nécessaire. + +## Cas possibles + +::: columns + +:::: column + +## Sous-arbre gauche (avant) + +``` +fe(P) = 1 +fe(P) = 0 +fe(P) = -1 +``` + +:::: + +:::: column + +## Sous-arbre gauche (après) + +. . . + +``` +=> fe(P) = 0 +=> fe(P) = -1 +=> fe(P) = -2 // Rééquilibrer P +``` + +:::: + +::: + +# Algorithme d'insertion + +* Insérer le noeud comme d'habitude. +* Mettre à jour les facteurs d'équilibre jusqu'à la racine (ou au premier + noeud déséquilibré). +* Rééquilibrer le noeud si nécessaire. + +## Cas possibles + +::: columns + +:::: column + +## Sous-arbre droit (avant) + +``` +fe(P) = 1 +fe(P) = 0 +fe(P) = -1 +``` + +:::: + +:::: column + +## Sous-arbre droit (après) + +. . . + +``` +=> fe(P) = 0 +=> fe(P) = +1 +=> fe(P) = +2 // Rééquilibrer P +``` + +:::: + +::: + +# Rééquilibrage + +## Lien avec les cas vus plus tôt + +``` +fe(P) = -2 && fe(gauche(P)) = -1 => cas 1a +fe(P) = -2 && fe(gauche(P)) = +1 => cas 2a + +fe(P) = +2 && fe(gauche(P)) = -1 => cas 1b +fe(P) = +2 && fe(gauche(P)) = +1 => cas 2b +``` + +## Dessiner les différents cas, sur le dessin ci-dessous + + diff --git a/slides/figs/cas1b_gauche.png b/slides/figs/cas1b_gauche.png index a5c2a9c8825f137a4eaa441419103fd5339f242a..050eceea5d8a28b24d7c2684ccb4f0f5a0b10cd8 100644 Binary files a/slides/figs/cas1b_gauche.png and b/slides/figs/cas1b_gauche.png differ diff --git a/slides/figs/cas2a_gauche.png b/slides/figs/cas2a_gauche.png index ececa19ebcec20f93cfb7856dfc6a1408a492474..3ef07573f717b27cc49e97209bb34811c16a5319 100644 Binary files a/slides/figs/cas2a_gauche.png and b/slides/figs/cas2a_gauche.png differ diff --git a/slides/figs/cas2b_droite.png b/slides/figs/cas2b_droite.png index 6ac1f9fed77d593dd4b70846a9cf2a8f3ff036b3..f61d56e332600f56aade1584dc579dd1708e1791 100644 Binary files a/slides/figs/cas2b_droite.png and b/slides/figs/cas2b_droite.png differ diff --git a/slides/figs/cas2b_gauche.png b/slides/figs/cas2b_gauche.png index 5b7fbfd3bca0ea88fb566b7e0fada8c52f675f1a..96474155d1814f0f945f1dfe19cf9bb6508ef148 100644 Binary files a/slides/figs/cas2b_gauche.png and b/slides/figs/cas2b_gauche.png differ diff --git a/slides/figs/facteur_equilibre.png b/slides/figs/facteur_equilibre.png new file mode 100644 index 0000000000000000000000000000000000000000..df60e129ff990ed2ae13647d5e1ca56ae739a9ef Binary files /dev/null and b/slides/figs/facteur_equilibre.png differ diff --git a/slides/figs/rotation_gauche_droite.png b/slides/figs/rotation_gauche_droite.png new file mode 100644 index 0000000000000000000000000000000000000000..28f7476188fc858ecd5fc37b32b933b2956f9d27 Binary files /dev/null and b/slides/figs/rotation_gauche_droite.png differ