Algorithmique L2S3 Harmonisation UFR d'IEEA Université Lille 1 20132014 TP : Tris de tableaux Dans ce TP vous pouvez utiliser le module Permutation donné sur le portail. Il fournit les fonctions suivantes : identite : int -> int array qui prend en paramètre un entier n et retourne un tableau de taille n dont la case i contient l'entier i melange : int array -> int array qui prend en paramètre un tableau d'entiers et échange (pseudo-)aléatoirement ses cases 1 Tri à bulles Le tri à bulles est le tri le plus naturel, son principe est très simple : on parcours le tableau jusqu'à la n et chaque fois qu'on rencontre un indice i pour lequel t(i) est supérieur à t(i + 1) on intervertit ces deux éléments. On recommence le parcours tant que le tableau n'est pas trié. Les premières questions ont pour objectif de vous aider à bien comprendre comment fonctionne l'algorithme. Testez à la main l'algorithme du tri à bulles sur le tableau t = [|5; 4; 3; 2; 1|] en représentant le tableau après chaque échange d'éléments. Q0.1 . Que se passe-t-il pour le plus grand élément ? Et pour le plus petit ? Observez également la progression des autres éléments. Q0.2 . Q0.3 . En déduire une borne supérieure du nombre de parcours nécessaires au tri du tableau. Il y a plusieurs variantes de l'algorithme dont certaines utilisent la borne précédement identiée, mais pas toutes. Implantez en caml le tri à bulles en essayant d'obtenir une variante qui eectue le moins possible de comparaisons entre les éléments du tableau. Justiez si possible l'ecacité de votre tri. Q0.4 . Q0.5 . Identiez un pire et un meilleur cas pour votre tri à bulles. Combien de comparaisons entre éléments du tableau sont eectuées dans le pire et le meilleur cas pour trier un tableau de taille n ? Q0.6 . Comparez votre résultat de la question précédente à un compteur inséré à votre fonction que vous acherez à la n du tri. Q0.7 . Q0.8 . 2 Donnez l'ordre de grandeur asymptotique du nombre de comparaisons eectuées. Tri par sélection Le principe de l'algorithme du tri par sélection consiste à construire petit à petit une partie de tableau triée de taille croissante en sélectionant à chaque étape le plus petit élément de la partie non triée puis en l'échangeant avec le premier élément de la partie non triée comme sur les schémas suivants. element minimum partie non triee partie triee Y ........ partie triee X ..... X ........ Y ..... partie non triee partie non triee 1 Q0.9 . Testez cet l'algorithme du tri par sélection sur le tableau t = [|4; 5; 2; 3; 1|]. Prouvez que cet algorithme est bien un algorithme de tri. Pour cela vous pouvez remarquer que certaines assertions restent vraies à chaque étape de l'algorithme (invariant de boucle). Q0.10 . Q0.11 . Implantez en caml le tri par sélection. Q0.12 . Identiez un pire et un meilleur cas pour le tri par sélection. Combien de comparaisons entre éléments du tableau sont eectuées dans le pire et le meilleur cas pour trier un tableau de taille n ? Q0.13 . Comparez votre résultat de la question précédente à un compteur de comparaisons inséré à votre fonction que vous acherez à la n du tri. Q0.14 . Q0.15 . 3 Donnez l'ordre de grandeur asymptotique du nombre de comparaisons eectuées. Tri par insertion Comme pour le tri par sélection, au cours du tri par insertion une partie du tableau est triée et les éléments non encore triés sont ajoutés un par un. La diérence entre les deux réside dans la manière d'ajouter un nouvel élément à la partie triée. Dans le tri par insertion c'est l'élément non trié de plus petit indice et pas celui de valeur minimum qui est ajouté. Il est inséré à sa place dans la partie triée ce qui peut nécessiter de décaler une partie des éléments triés pour lui faire une place comme indiqué sur le schéma suivant. partie triee partie triee element a inserer 1 4 5 3 2 1 3 decalage partie non triee Q0.16 . 4 5 2 partie non triee Testez cet l'algorithme du tri par insertion sur le tableau t = [|4; 5; 2; 3; 1|]. Implanter l'algorithme du tri par insertion en caml de deux manières diérentes. Dans l'une des versions la place du nouvel élément est recherchée puis le décalage d'une partie du tableau est eectuée, alors que dans la seconde les deux opérations de recherche et décalage sont eectuées en même temps. Q0.17 . Q0.18 . Identiez un pire et un meilleur cas pour vos deux versions du tri par insertion. Combien de comparaisons entre éléments du tableau sont eectuées dans le pire et le meilleur cas pour trier un tableau de taille n avec chacune des versions ? Q0.19 . Q0.20 . Donnez l'ordre de grandeur asymptotique du nombre de comparaisons eectuées. 2