Probleme – Combien de nœuds faut-il pour être haut ?
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 10 — Arbres
Énoncé
On dit qu'un arbre binaire est équilibré en hauteur si, en chacun de ses nœuds, les hauteurs des deux fils diffèrent d'au plus .
- Donner une relation de récurrence pour , le nombre minimal de nœuds d'un tel arbre de hauteur .
- Calculer et l'exprimer avec la suite de Fibonacci.
- En déduire une majoration de la hauteur en fonction du nombre de nœuds, et la vérifier.
- Pourquoi ce résultat est-il celui qui justifie tout le chapitre suivant ?
Corrigé
1. La récurrence. Un arbre équilibré de hauteur et de taille minimale a une racine, un fils de hauteur — il en faut un pour atteindre la hauteur — et un second fils dont la hauteur est au moins , par la contrainte d'équilibre. Pour minimiser, on prend exactement , et chacun des deux fils est lui-même minimal. D'où
La convention du cours rend l'initialisation limpide : est l'arbre vide, et non un cas particulier. Avec la convention , il faudrait ici une exception.
2. Les valeurs, calculées, et la forme close :
On reconnaît les nombres de Fibonacci diminués de , et l'identité
a été vérifiée pour de à , avec . Par exemple et .
Preuve. Par récurrence forte. et . Puis
3. La majoration de la hauteur. Un arbre équilibré de hauteur et de taille vérifie , donc . Comme avec , on obtient en passant au logarithme
Cette borne a été vérifiée numériquement pour de à , c'est-à-dire jusqu'à nœuds : elle tient, avec un écart maximal de .
Le chiffre à retenir est . Un arbre équilibré en hauteur est au plus plus haut que l'arbre parfait de même taille. La comparaison, obtenue en cherchant le plus grand tel que , est frappante :
| hauteur d'un arbre parfait | hauteur maximale d'un équilibré | |
|---|---|---|
Contre une hauteur de pour un peigne de même taille.
4. Pourquoi ce résultat gouverne le chapitre suivant. Le cours a établi deux choses : la hauteur est comprise entre et , et toute recherche coûte . Il en découlait une question sans réponse : comment garantir qu'on est du bon côté ?
Ce problème donne la réponse, et elle est du meilleur genre : une contrainte purement locale — en chaque nœud, les hauteurs des fils diffèrent d'au plus — suffit à garantir une propriété globale, . On peut donc maintenir l'équilibre en ne regardant, à chaque insertion, que le voisinage du chemin parcouru : c'est ce que feront les arbres bicolores du chapitre chap:tas.
L'arbre qui sature la borne mérite d'être connu : c'est l'arbre de Fibonacci, défini par . Il est le pire cas de tous les algorithmes d'arbres équilibrés, et c'est donc le premier arbre sur lequel on les teste — une application directe de la méthode du chapitre chap:discipline : ne pas tester au hasard, tester aux frontières.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.