algorithmique (école d'ingénieur) · Chapitre 9 · Exercice de TD
Combien d'arbres binaires de recherche ?
Arbres binaires de recherche de coût minimum · niveau 3 (difficile)
Énoncé
On note le nombre d'abr différents construits sur valeurs distinctes.
- Donner , , , en dessinant les arbres.
- En raisonnant sur la valeur à la racine, montrer que pour .
- Écrire le programme qui calcule en et donner , , . Que penser d'un algorithme qui énumérerait tous les abr pour garder le moins coûteux ?
Corrigé
- (l'arbre vide), , (la seconde valeur à gauche ou à droite de la première), (racine : deux arbres ; racine : un ; racine : deux).
- Si la racine est la -ème plus petite valeur, le sous-arbre gauche est un abr quelconque sur les plus petites ( choix) et le sous-arbre droit un abr quelconque sur les autres ( choix), indépendamment. On somme sur la racine.
static long[] nombreAbr(int N) {
long[] B = new long[N + 1];
B[0] = 1; // l'arbre vide
for (int n = 1; n < N + 1; n++)
for (int k = 0; k < n; k++) B[n] += B[k] * B[n - 1 - k]; // racine = (k+1)-ème valeur
return B;
}
- Exécution :
b(4) = 14, b(9) = 4862, b(20) = 6564120420, b(30) = 3814986502092304
Ce sont les nombres de Catalan, qui croissent comme (à un facteur polynomial près). Énumérer les abr est envisageable pour , impossible dès ; la programmation dynamique trouve l'optimum en , voire avec Knuth.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.