TD3 - Tri

publicité
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
Téléchargement