1 Compréhension de l`algorithme 2 Fusion de deux portions

publicité
Informatique
TD/ TP 4.3
Tri fusion
1 Compréhension de l'algorithme
1) Soit t = [15; 2; 4; 8; 17; 23] = t[0 : 6].
Dérouler étape par étape l’algorithme de tri de t en complétant les actions attendues et l'évolution
du fractionnement de t.
Compléter ensuite la remontée avec la fusion des partitions.
Action
Suivi de t
tmp respectifs
(appels récursifs)
(remontée : fusion)
[15; 2; 4; 8; 17; 23]
[2; 4; 8; 15; 17; 23]
Appel tri t[0:3] et t[3:6]
[15,2,4][8,17,23]
[2,4,15] [8,17,23]
Appel tri t[0:1] t[1:3] t[3:4] t[4:6]
[15][2,4] [8][17,23]
[15][2,4] [8][17,23]
Appel tri t[1:2] t[2:3] t[4:5] t[5:6]
[15] [2][4] [8] [17][23]
2) Détailler l'algorithme de la dernière fusion en complétant le tableau suivant avec m=3 et
t =[2,4,15,8,17,23]
k i j tmp
0 3 [0, 0, 0, 0, 0, 0]
0 1 3 [2, 0, 0, 0, 0, 0]
1 2 3 [2, 4, 0, 0, 0, 0]
2 2 4 [2, 4, 8, 0, 0, 0]
3 3 4 [2, 4, 8, 15, 0, 0]
4 3 5 [2, 4, 8, 15, 17, 0]
5 3 6 [2, 4, 8, 15, 17, 23]
6
2 Fusion de deux portions adjacentes triées
3) Ecrire une fonction fusion qui prend en argument un tableau t, et deux entiers g et d, et qui
fusionne les portions t[g : m] et t[m : d] (supposées triées), en utilisant tmp pour copier
provisoirement les éléments, puis les replacer dans t[g : d].
3 Tri fusion récursif
4) Dérouler étape par étape l’algorithme de tri fusion du tableau t = [69; 35; 95; 53; 54; 40; 3; 36; 74]:
5) Ecrire une fonction récursive tri_fusion_rec qui prend en argument un tableau t, un tableau tmp
(de même taille que t), deux entiers g , d, et qui réalise un tri fusion de la portion t[g : d], en
utilisant toujours le même tableau tmp comme tampon lors de chaque fusion (on utilisera en boîte
noire la fonction fusion précédemment écrite).
6) Ecrire enfin une procédure tri_fusion qui prend en argument un tableau t et réalise un tri fusion du
tableau complet.
4 Optimisation du tri fusion
Une façon d’optimiser la fonction tri_fusion consiste à éviter la fusion lorsque, à l’issue des deux appels
récursifs, les éléments de la moitié gauche se trouvent être tous plus petits que les éléments de la moitié
droite. On le teste facilement en comparant l’élément le plus à droite de la moitié gauche et l’élément le
plus à gauche de la moitié droite.
7) Modifier la fonction tri_fusion en suivant cette idée.
Lycée Jules Ferry Cannes
Page 1 sur 2
TSI2
Informatique
TD/ TP 4.3
Tri fusion
On pourra remarquer à partir de la fonction moyenne (du fichier ressources à copier ou à importer) qui
renvoie la durée moyenne d'une exécution que les bénéfices temporels annoncés sont pour le moins
modérés avec 1000 termes à trier.
5 Optimisation 2
On peut terminer le tri fusion par un tri par insertion lorsque le nombre d’éléments à trier devient petit,
c’est-à-dire inférieur à une constante C fixée à l’avance.
8) Modifier encore la fonction tri_fusion pour qu’elle procède ainsi (on utilisera en boîte noire la
fonction tri_insertion implémentée au TP 4.1 ).
Ressources : Damien BROIZAT (TSI2 Cannes)
Lycée Jules Ferry Cannes
Page 2 sur 2
TSI2
Téléchargement