Adloun

Arbres binaires de recherche de coût minimum

Cours · algorithmique (école d'ingénieur), chapitre 9 · école d'ingénieur, informatique · le début du chapitre, la suite sur Adloun

Objectifs du chapitre

  • Définir les arbres binaires et les arbres binaires de recherche (abr), et les programmer en Java par des fonctions récursives courtes, justifiées par leur définition.
  • Définir le coût moyen de recherche d'un abr, connaissant les fréquences de recherche de ses valeurs.
  • Comparer trois constructions : gloutonne, de hauteur minimum (diviser pour régner) et de coût minimum (programmation dynamique).
  • Découvrir une récurrence sur des intervalles, calculée par tailles croissantes, le long des diagonales d'un tableau.

9.1 Arbres binaires

Nous avons déjà rencontré les listes d'entiers (chapitre 7) : une liste est soit vide, soit un couple formé d'un premier élément et d'un reste , lui-même une liste. Les arbres binaires se définissent de la même manière, récursivement.

Définition 9.1Arbre binaire

Un arbre binaire (ab) d'entiers est :

  • soit l'arbre vide, noté ;
  • soit un triplet où est un entier, la valeur à la racine, et où et sont des arbres binaires, les sous-arbres gauche et droit.

L'arbre , dont les deux sous-arbres sont vides, est une feuille.

Exemple 9.2écriture parenthésée et représentation graphique

L'arbre a la valeur à sa racine, la feuille à gauche et la feuille à droite. Les informaticiens le dessinent racine en haut :

9.1.1 Représentation en Java

La classe AB suit la définition : l'arbre vide est représenté par null, un arbre non vide par un objet qui contient sa valeur racine et ses deux sous-arbres.


static class AB {
    int vr; AB g, d;
    AB(int vr, AB g, AB d) { this.vr = vr; this.g = g; this.d = d; }
}
static boolean vide(AB a) { return a == null; }
static int vr(AB a) { return a.vr; }   // a doit être non vide
static AB sag(AB a) { return a.g; }    // a doit être non vide
static AB sad(AB a) { return a.d; }    // a doit être non vide

L'arbre de l'exemple est construit par new AB(4, new AB(3, null, null), new AB(6, null, null)).

9.1.2 Taille et hauteur

La taille d'un arbre est son nombre de valeurs. Sa hauteur est la longueur (en nombre d'arcs) du plus long chemin depuis la racine. Une feuille est de hauteur ; par une convention cohérente, l'arbre vide est de hauteur . Les deux fonctions s'écrivent en suivant la définition récursive : un cas pour l'arbre vide, un cas pour .


static int taille(AB a) {
    if (vide(a)) return 0;
    return 1 + taille(sag(a)) + taille(sad(a));
}
static int hauteur(AB a) {
    if (vide(a)) return -1;
    return 1 + Math.max(hauteur(sag(a)), hauteur(sad(a)));
}

Chaque valeur de l'arbre donne lieu à un appel, et chaque appel est en temps constant (hors appels récursifs) : ces fonctions sont en pour un arbre de taille .

9.2 Arbres binaires de recherche

Définition 9.3Arbre binaire de recherche

Un arbre binaire de recherche (abr) est :

  • soit l'arbre vide ;
  • soit un arbre non vide tel que
  • ;
  • ;
  • et sont des abr.
Exemple 9.4un abr sur les valeurs à

Toutes les valeurs à gauche de lui sont inférieures, toutes celles à droite lui sont supérieures, et cela est vrai en chaque sommet.

9.2.1 Afficher les valeurs dans l'ordre

Pour afficher les valeurs d'un abr dans l'ordre croissant, il suffit d'afficher celles du sous-arbre gauche (croissantes), puis la racine, puis celles du sous-arbre droit (croissantes). C'est le parcours gauche--racine--droite (grd). Sa justification est exactement la définition des abr :


static void grd(AB a) { // affiche les valeurs de l'abr a dans l'ordre croissant
    if (vide(a)) return;           // sans rien faire, les valeurs de () sont affichées
    grd(sag(a));                   // (1) les valeurs de g ont été affichées croissantes
    System.out.print(vr(a) + " "); // (2) puis la valeur racine
    grd(sad(a));                   // (3) puis les valeurs de d, croissantes
    // (1), (2), (3) et les propriétés (a), (b) des abr :
    // les valeurs de a ont été affichées croissantes
}

La suite du cours est sur Adloun

Le chapitre en entier, formules et figures comprises, avec le tuteur, les fiches, les QCM et les exercices.

Lire la suite du cours

En accès libre, sans inscription.

Exercices corrigés de ce chapitre

Lire la suite du cours →