Corrige TD08 PDF
Corrige TD08 PDF
Corrige TD08 PDF
1
– n = p + q + r : un nœud a soit zéro, soit un, soit deux fils.
– 0 × p + 1 × q + 2 × r = n − 1 : tous les nœuds, la racine exceptée, ont un père ; on compte ces n − 1
nœuds à partir de leurs pères, 0 × p étant fils d’un nœud sans fils, 1 × q étant fils d’un nœud ayant
un unique fils et 2 × r étant fils d’un nœud ayant deux fils.
– 2 × p + 1 × q + 0 × r = b : on compte les branches vides de chaque nœud.
En additionnant les deux dernières équations on obtient :
2(p + q + r) = b + n − 1 ⇔ 2n = b + n − 1 ⇔ b=n+1
Complexité du tri
Les algorithmes de tris par comparaison peuvent être considérés de façon abstraite en termes d’arbres de
décision. Un arbre de décision représente les comparaisons (à l’exclusion de toute autre opération) effectuées
par un algorithme de tri lorsqu’il traite une entrée de taille donnée. La figure 1 présente l’arbre de décision
correspondant à l’algorithme de tri par insertion s’exécutant sur une liste de trois éléments.
Soient ha1 , a2 , ..., an i les n valeurs à trier. Dans un arbre de décision chaque nœud interne est étiqueté
par une expression ai ≤ aj , pour certaines valeurs de i et de j, 1 ≤ i, j ≤ n. L’exécution de l’algorithme
de tri suit un chemin qui part de la racine de l’arbre de décision pour aboutir à une feuille. À chaque
nœud interne, on effectue une comparaison ai ≤ aj et les comparaisons suivantes auront lieu dans le sous-
arbre gauche si ai ≤ aj et dans le sous-arbre droit sinon. Chaque feuille est désignée par une permutation
hπ(1), π(2), ..., π(n)i : si l’algorithme de tri aboutit en la feuille hπ(1), π(2), ..., π(n)i, les valeurs à trier
vérifient : aπ(1) ≤ aπ(2) ≤ ... ≤ aπ(n) .
≤ a1 ≤ a2
>
a2 ≤ a3 a1 ≤ a3
≤ > ≤ >
h1, 2, 3i a1 ≤ a3 h2, 1, 3i a2 ≤ a3
≤ > ≤ >
h1, 3, 2i h3, 1, 2i h2, 3, 1i h3, 2, 1i
Fig. 1 – Arbre de décision correspondant au traitement de trois éléments au moyen du tri par insertion.
2
1. Quel est le nombre de feuilles d’un tel arbre de décisions ?
On a n! permutations possibles de n éléments, donc n! feuilles possibles à notre arbre de décision.
2. En déduire une borne inférieure sur la hauteur de l’arbre de décision.
On a vu précédemment que : f ≤ 2h ce qui équivaut à h ≥ log2 f avec ici f = n!. Donc h ≥ log2 (n!).
3. En déduire une borne inférieure sur la complexité du tri de n éléments.
n
Indication : d’après la formule de Stirling, on a n! > ne .
La longueur d’un chemin de la racine à une feuille dans l’arbre de décision est égale au nombre de
comparaisons nécessaires au tri pour parvenir à la réponse souhaitée. La longueur du plus long chemin
de la racine à une feuille — qui est égale par définition à la hauteur de l’arbre — nous donne donc
la complexité T (n) de l’algorithme dans le pire cas. D’après la question précédente, la hauteur d’un
tel arbre de décision, quel que soit l’algorithme de tri, est au moins de log2 (n!). Donc, en utilisant la
formule de Stirling : T (n) ≥ log2 (n!) > n log( ne ), d’où, comme log(ab) = log(a) + log(b) :
VérifieArbre(x)
(b1 , min 1 , max 1 ) ← VérifieArbre(gauche(x))
si b1 = Faux alors renvoyer (Faux, 0, 0)
(b2 , min 2 , max 2 ) ← VérifieArbre(droit(x))
si b2 = Faux alors renvoyer (Faux, 0, 0)
si max 1 ≤ clé(x) ≤ min 2
alors renvoyer (Vrai, min 1 , max 2 )
sinon renvoyer (Faux, 0, 0)