Préparation à l’agrégation 2009/2010 Algèbre et Calcul Formel
Définition 1 Un arbre de décision est un arbre binaire complet dont chaque nœud est
étiqueté par une comparaison 𝑎𝑖:𝑎𝑗entre deux éléments de la liste (on suppose la
liste composée d’éléments tous distincts), et dont les feuilles correspondent aux per-
mutations de la liste de départ.
Un algorithme de tri devant être capable de produire toutes les permutations de son
entrée, le nombre de feuilles d’un tel arbre doit être au moins 𝑛!. Le temps d’exécution
dans le cas le plus défavorable correspond à la hauteur de l’arbre, c’est-à-dire au plus
long chemin de la racine à une feuille. On en déduit le théorème suivant :
Théorème 1 Un algorithme de tri par comparaison nécessite au moins 𝑂(𝑛lg 𝑛)com-
paraisons dans le pire cas.
2.4 Tri rapide
Pour le tri rapide, on choisit un élément dans la liste qui va servir de pivot : on
le place alors à sa place définitive en mettant tous les éléments de la liste qui lui sont
inférieurs avant lui. On rappelle ensuite la procédure récursivement sur les deux sous-
listes obtenues.
C’est le tri le plus utilisé en pratique ; pourquoi ?
3 Tri par tas
Le tri par tas est un des algorithmes de tri les plus efficaces asymptotiquement,
puisqu’il est agit à la fois en place et en temps optimal. Pour cela, il faut avoir recours
à la structure de tas.
Définition 2 Un tas est un arbre binaire presque complet, c’est-à-dire dont tous les
niveaux sont remplis, à l’exception éventuelle du dernier qui se rempli de gauche à
droite.
Un tas-max est un tas dont chaque nœud a une valeur inférieure à celle de son
parent.
Il est facile de représenter un tas par un tableau en rangeant les éléments par pro-
fondeurs successives, car le calcul des positions du parent et des deux fils d’un nœud à
la position 𝑖dans le tableau correspondent respectivement à ⌊𝑖/2⌋,2𝑖et 2𝑖+ 1.
Exercice 3 On suppose donné un tas max sous forme d’une liste 𝐿. Écrire une pro-
cédure Entasser(L,a) qui insère 𝑎dans 𝐿en préservant la structure de tas max.
Montrer que la complexité de votre procédure est en 𝑂(lg ∣𝐿∣).
Exercice 4 Donner une procédure pour transformer en place une liste en tas max.
Exercice 5 En déduire l’algorithme du tri par tas et montrer que sa complexité est en
𝑂(𝑛lg 𝑛).
Bonus Refaire le TD en utilisant le type Array à la place du type list. On pourra
écrire des fonctions size,elements, . .. pour s’abstraire de nops,op, . . .
C. Picaronny & J. Villard 2 E.N.S. de Cachan