2. Non puisqu’il peut y avoir des tests inutiles. Par exemple, pour le tri à bulles, la branche T[1] < T [2]
puis T[2] < T [3] puis T[1] > T [2] n’est pas possible (il n’y a pas eu d’échanges donc à la fin, on a
toujours T[1] < T [2]).
3. Si deux tableaux distincts correspondaient à la même branche, alors l’algorithme effectuerait exac-
tement la même chose sur les deux tableaux (échange des éléments, etc.). Puisqu’ils sont distincts
au départ, on aboutirait donc à deux tableaux distincts, or ce n’est pas le cas puisqu’à la fin on
aboutit toujours au tableau [1,2, . . . , n].
4. Pour les deux feuilles de l’arbre du tri par insertion pour les tableaux à 2 éléments, les étiquettes
sont : [1,2] et [2,1].
Pour les tableaux à 3 éléments : [1,2,3],[1,3,2],[2,3,1],[2,1,3],[3,1,2] et [3,2,1]
Pour les deux feuilles de l’arbre du tri à bulles pour les tableaux à 2 éléments, les étiquettes sont :
[1,2] et [2,1].
Pour les tableaux à 3 éléments : la deuxième et la sixième feuille ne correspondent pas à des
exécutions valides. Pour les autres feuilles : [1,2,3],[1,3,2],[2,3,1],[2,1,3],[3,1,2] et [3,2,1]
5. On peut supprimer les feuilles non étiquetées puisqu’elles ne correspondent pas à des exécutions
valides de l’algorithme.
Exercice 3 [Déroulement d’un algorithme]
1. Tous les tableaux possibles doivent se retrouver aux feuilles de l’arbre puisque l’algorithme doit être
capable de tous les trier.
2. Le nombre de comparaisons effectuées par l’algorithme sur un tableau donné correspond à la lon-
gueur de la branche correspondant à ce tableau. Puisque la hauteur de l’arbre est la longueur
maximale d’une branche, il s’agit bien du nombre de comparaisons dans le pire cas.
3. Un arbre binaire de hauteur hpossède au maximum 2hfeuilles. Preuve par récurrence sur h: vrai
pour h= 0 (1 feuille). Pour un arbre de hauteur h+1 : la racine possède deux sous-arbres de hauteur
≤hdonc ils ont au plus 2hfeuilles chacun. En tout, l’arbre de hauteur h+ 1 a≤2×2h= 2h+1
feuilles.
4. Il faut exactement une feuille par tableau de néléments distincts parmi {1, . . . , n}, c’est-à-dire n!
(factorielle n).
5. On doit donc avoir 2h≥n!. D’après la formule de Stirling, pour nassez grand on a n!≥n
en.
Donc h≥log2(n!) ≥n(log2n−log2e). Puisque log2(e) = 1/ln 2 ≤2, on a bien que la hauteur de
l’arbre, donc le nombre de comparaisons effectuées par l’algorithme dans le pire cas, est au moins
n(log2n−2).
Exercice 4 [Un tri linéaire ?]
1. Puisque toutes les valeurs de Tsont comprises entre 1 et k, on peut créer un tableau Ade taille k
et remplir la case ide Apar le nombre d’occurences de idans T.
Puis pour trier T, on parcourt le tableau Adans l’ordre et pour la case ion écrit dans T(à la suite)
toutes les occurences de i. À chaque étape, soit on avance d’une case dans A, soit on avance d’une
case dans T. Ainsi il y a k+nétapes, chacune en temps constant. Donc la complexité est O(k+n).
2. Si k≤n, on a donc un tri en O(n), linéaire.
3. Non car ce tri n’est pas fondé sur des comparaisons et est donc exclu de notre modèle : on connaît
a priori la forme des entrées et on peut donc tester si elles sont égales à une certaine valeur, plutôt
que des les comparer entre elles.
Noter qu’en particulier, cet algorithme ne trie pas en temps linéaire des tableaux quelconques : dès
que k6∈ O(n), ce tri n’est plus linéaire.
2