L3 - Introduction à l’algorithmique (Année 2013/2014) F .Papadopoulos/B. Francesco/G. Lucarelli TD3 - Tri Exercice 1. Tri Vous allez trier par ordre croissant le tableau suivant en utilisant différents algorithmes (explicitez clairement les différentes étapes) : 12 7 1 4 22 31 6 8 15 17 34 16 1. Utiliser les algorithmes vus en cours (tri par insertion, tri fusion, tri rapide) pour trier le tableau. Il existe de nombreuses façons de trier un tableau. En voici une autre appelée tri à bulle : Tri à Bulle(T : tableau d’entier de taille n) : initialisation : temp, i=0; permutation=TRUE; while permutation do permutation=FALSE; for (i == 0, i ≤ n − 2, i + +) do if (T[i]>T[i+1]) then temp=T[i]; T[i]=T[i+1]; T[i+1]=temp; permutation=TRUE; end end end 2. Utiliser le tri à bulles pour trier le tableau. 3. Montrer que le tri à bulle termine et qu’il renvoie le bon résultat. Indication : montrer l’invariant I(j) : "à la fin de la jième itération de la boucle for, les j dernières cases du tableau contiennent les j plus grand éléments triés par ordre croissant". 4. Donner la complexité du tri à bulle dans le pire cas (complexité en nombre de comparaisons et en nombre de permutations). Voici encore une autre façon de trier un tableau : le tri par énumération (on suppose qu’un entier donné n’apparaît pas deux fois dans le tableau). Considérons un tableau T en entrée, pour chaque élément T [i] avec i ∈ {0, . . . , n − 1}, on calcule ei le nombre d’entier de T plus petit que T [i] puis on insère T [i] à la position ei dans le tableau de sortie. 5. Utiliser le tri par énumération pour trier le tableau. 6. Écrivez un algorithme pour le tri par énumération. 7. Donner la complexité du tri par énumération. 1 Exercice 2. Recherche dichotomique La recherche dichotomique est un algorithmique de type diviser pour régner qui cherche l’emplacement d’un entier dans un tableau de taille n trié par ordre croissant. Cette algorithme compare l’entier en position b n2 c du tableau à l’entier recherché et selon le résultat : – soit la recherche s’arrête ; – soit on procède récursivement sur le sous-tableau [1, . . . , b n2 c − 1] ; – soit on procède récursivement sur le sous-tableau [b n2 c + 1, . . . , n]. . Écrivez un algorithme mettant en oeuvre la recherche dichotomique et donner la complexité de cet algorithme dans le pire cas. Exercice 3. Deuxième plus grand élément Considérons une liste qui n’est pas trié. Nous cherchons le deuxième plus grand élément de la liste. 1. Proposer un algorithme naïf résolvant ce problème. Donnez la complexité exacte de cette algorithme. Maintenant, pour trouver le deuxième plus grand élément, nous allons utiliser un tournoi. On regroupe les entiers par paquets de deux et pour chaque paquet, le plus petit est éliminé. On recommence l’opération juste ce qu’il n’en reste plus qu’un. On suppose que la liste est de taille n = 2k . 2. Comment trouver le deuxième plus grand élément une fois le tournoi terminé ? 3. Donner la complexité exacte de cet algorithme. Exercice 4. Tri simple Considérons maintenant un tableau T de taille n dont les élément du tableau sont compris entre 1 et n (un même entier peut apparaître plusieurs fois). Le tri simple consiste à créer un tableau où la case d’indice i contient le nombre d’occurrences de i dans T . Ce tableau est ensuite utilisé pour créer le tableau de sorti. 1. Ecrire un algorithme mettant en oeuvre le tri simple. 2. Quelle est la complexité du tri simple. 2