informatique (MP2I/MPI) · Chapitre 11 · Exercice de TD
Problème — La suppression dans un ABR, et la dégradation qu'elle provoque
Arbres de recherche, tas et files de priorité · niveau 3 (difficile)
Énoncé
Le chapitre donne la recherche et l'insertion, jamais la suppression.
- Écrire
supprimeet distinguer les trois cas. Prouver que l'invariant d'ABR est préservé. - Cette suppression est asymétrique : elle remplace toujours par le successeur. Que peut-on craindre ?
- Mesurer l'effet de couples suppression/insertion aléatoires sur la profondeur moyenne, et comparer à une variante symétrique.
Corrigé de la question 1
1. Les trois cas.
(* Renvoie le minimum de l'arbre. Précondition : a n'est pas vide. *)
let rec minimum = function
| Vide -> failwith "arbre vide"
| Noeud (Vide, e, _) -> e (* le minimum est TOUT À GAUCHE *)
| Noeud (g, _, _) -> minimum g
(* Renvoie l'ABR privé de x. Si x est absent, renvoie l'arbre inchangé.
Précondition : a est un ABR. Complexité : O(h). *)
let rec supprime x = function
| Vide -> Vide
| Noeud (g, e, d) ->
if x < e then Noeud (supprime x g, e, d)
else if x > e then Noeud (g, e, supprime x d)
else match g, d with
| Vide, _ -> d (* (a) et (b) : au plus un fils *)
| _, Vide -> g
| _, _ -> (* (c) deux fils : le SUCCESSEUR remonte *)
let s = minimum d in
Noeud (g, s, supprime s d)
(a) Feuille : on rend Vide. (b) Un seul fils : on rend ce fils — les deux premiers motifs traitent les deux cas d'un coup. (c) Deux fils : on ne peut supprimer le nœud sans le remplacer, et le seul remplaçant valide est le successeur — le plus petit du sous-arbre droit — ou le prédécesseur. On le remonte, puis on le supprime de sa position d'origine ; ce second appel tombe forcément dans le cas (a) ou (b), puisque le minimum d'un arbre n'a pas de fils gauche.
Préservation de l'invariant (cas (c), les autres étant immédiats). Soit le minimum de . Toutes les étiquettes de sont , donc : l'invariant tient à gauche. Toutes celles de sont par minimalité de : il tient à droite. Terminaison : chaque appel descend d'un niveau, le variant est la hauteur du sous-arbre. Complexité : pour la descente, plus pour le minimum et la suppression secondaire, soit .
Mesuré sur : retirer (feuille), (un fils), (deux fils) ou (absent) rend à chaque fois un ABR valide, contrôlé par la croissance du parcours infixe.
Question 2 : comment l'IA t'aide
2. Cette suppression est asymétrique : elle remplace toujours par le successeur. Que peut-on craindre ?
Élève
Le successeur est le minimum du sous-arbre droit, un remplaçant tout aussi valide que le prédécesseur. Je ne vois pas ce qu'on peut reprocher à ce choix : chaque suppression rend un ABR correct.
IA
La correction n'est pas en cause ; regarde plutôt la forme. Lors d'une suppression d'un nœud à deux fils, dans quel sous-arbre un nœud disparaît-il réellement, et l'autre sous-arbre change-t-il ?
Élève
C'est le sous-arbre droit qui perd un nœud ; le gauche reste tel quel.
IA
Si ce schéma se répète au fil de nombreuses suppressions et insertions aléatoires, quel effet cumulé attends-tu sur la forme de l'arbre, et donc sur le coût des opérations suivantes ?
L'IA ne donne pas la réponse : elle pose la question qui fait avancer. À toi de continuer.
Continue cet exercice avec l'IA
Reprends la question 2 là où le dialogue s'arrête, puis la suite de l'exercice.
Continuer avec l'IA — gratuit, sans inscriptionGratuit, sans inscription. L'IA te guide pas à pas, sans te donner la réponse.