Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →