Borne inférieure sur la complexité du tri d`un tableau

publicité
Université Paris Diderot – Paris 7
L3 Informatique
Algorithmique
Année 2009-2010, 1er semestre
Borne inférieure sur la complexité du tri d’un tableau
Soit A un algorithme de tri d’un tableau T qui repose uniquement sur des comparaisons d’éléments du
tableau entre eux. On souhaite montrer qu’un tel algorithme effectue dans le pire cas au moins n(log2 n−2)
comparaisons, où n est la taille du tableau T .
Exercice 1 [Permutations]
1. Supposons que pour trier des tableaux de n éléments distincts parmi {1, . . . , n}, tout algorithme
effectue au moins n(log2 n − 2) comparaisons dans le pire cas. Justifier alors que tout algorithme
pour trier des tableaux quelconques de n éléments effectue au moins n(log2 n − 2) comparaisons
dans le pire cas.
2. En déduire que pour montrer notre borne inférieure, on peut se restreindre au cas des tableaux
dont les n éléments sont distincts et appartiennent à {1, . . . , n}.
Ainsi, dans toute la suite, T désignera un tableau à n éléments distincts de l’ensemble {1, . . . , n}.
Exercice 2 [Arbre des comparaisons]
On représente le fonctionnement de l’algorithme A par un arbre binaire comme suit. Cet arbre représente uniquement les comparaisons et pas les éventuelles modifications apportées au tableau au cours de
l’algorithme. Il est appelé arbre des comparaisons de l’algorithme A.
Lorsque A compare deux éléments T [i] et T [j], il y a deux situations possibles selon le tableau T : soit
T [i] < T [j], soit T [i] > T [j]. On représentera cette situation par un branchement dans l’arbre : le fils
gauche correspond à la situation T [i] < T [j], c’est-à-dire qu’il s’agit des tableaux pour lesquels T [i] < T [j]
à cette étape de l’algorithme, tandis que le fils droit correspond à la situation T [i] > T [j], c’est-à-dire
qu’il s’agit des tableaux pour lesquels T [i] > T [j] à cette étape de l’algorithme. Dans chacun des deux
sous-arbres, l’algorithme continue les comparaisons (et les éventuelles permutations d’éléments) jusqu’à
ce que le tableau soit trié.
Par exemple, pour trier un tableau à trois éléments, le tri par sélection trouve d’abord le maximum du
tableau, c’est-à-dire qu’il compare d’abord T [1] et T [2] ; si T [1] < T [2], il compare ensuite T [2] et T [3],
sinon il compare T [1] et T [3] ; il place le maximum à la fin du tableau (opération non représentée dans
l’arbre) ; et pour terminer il compare T [1] et T [2]. L’arbre des comparaisons du tri par sélection pour un
tableau de taille 3 est donc le suivant :
T [1] < T [2]?
T [2] < T [3]?
T [1] < T [2]?
•
•
T [1] < T [3]?
T [1] < T [2]?
•
T [1] < T [2]?
•
•
1
•
T [1] < T [2]?
•
•
Question 1.
1. Donner l’arbre des comparaisons pour le tri par insertion pour les tableaux de taille 2 et 3. Décrire
l’arbre pour un tableau de taille quelconque.
2. Faire de même pour le tri à bulles.
On se place maintenant dans le cadre général d’un algorithme A quelconque pour trier un tableau.
Question 2.
1. Justifier que l’exécution de l’algorithme A sur un tableau donné correspond à une branche dans
l’arbre des comparaisons de A.
2. Réciproquement, est-ce que chaque branche correspond réellement à l’exécution de l’algorithme sur
un tableau particulier, ou bien existe-t-il des branches qui ne seront jamais empruntées ?
3. Montrer que les exécutions de l’algorithme sur deux tableaux distincts correspondent à deux
branches distinctes.
4. Ainsi, chaque feuille correspond à l’exécution de l’algorithme sur au plus un tableau ; dans ce cas, on
étiquettera la feuille par ce tableau. Étiqueter de cette façon les feuilles des arbres de comparaisons
de la question 1.
5. Justifier qu’on peut élaguer l’arbre de sorte à supprimer les feuilles non étiquetées.
Exercice 3 [Déroulement d’un algorithme]
1. Justifier que tous les tableaux possibles doivent se retrouver aux feuilles de l’arbre.
2. Justifier que la hauteur de l’arbre correspond au nombre de comparaisons effectuées par l’algorithme
dans le pire cas.
3. Combien de feuilles un arbre de hauteur h possède-t-il au maximum ?
4. Combien de feuilles l’arbre élagué de l’algorithme A contient-il pour les tableaux de taille n ?
5. En utilisant la formule de Stirling
n! ∼
n n √
2πn,
e
en déduire la borne inférieure mentionnée au début du problème.
Exercice 4 [Un tri linéaire ?]
1. Proposer un algorithme fonctionnant en O(k + n) pour trier un tableau de n entiers (pas forcément
distincts) compris entre 1 et k.
2. Que dire de la complexité de cet algorithme lorsque k ≤ n ?
3. Est-ce en contradiction avec la borne inférieure que l’on vient de montrer ?
2
Téléchargement