1 Tri à bulles 2 Tri par sélection

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