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