TP 10 - DTU Compute

publicité
Vincent Neiger et Henri Lastakowski
2010–2011
Matlab – TP no 10
Le problème du tri
1
Problème du pâtissier
Il s’agit dans cet exercice de simuler avec les outils que vous connaissez (tableaux, boucles. . . )
la situation suivante :
Un pâtissier est face à une pile de crêpes de différentes tailles.
Il dispose d’une spatule avec laquelle il peut retourner les p premières crêpes du haut de la
pile, avec p quelconque. Son objectif est d’avoir une pile de crêpes empilées par ordre croissant
de taille.
Q 1.a) Écrivez d’abord une fonction retourner qui prend comme argument un
tableau et un nombre entier p, et qui retourne les p premières crêpes du haut de la pile.
Q 1.b)
Réfléchissez à un algorithme permettant de trier la pile de crêpes.
Q 1.c) Écrivez une fonction (ou plusieurs fonctions) permettant de trier la pile de
crêpe à partir de cet algorithme.
2
Tri par sélection
Le but est d’écrire une fonction matlab tri_selection qui réalise le tri d’un tableau
d’entiers. Autrement dit, elle prend en entrée un tableau d’entiers relatifs et renvoie en sortie
le tableau trié correspondant. On va utiliser une méthode spécifique appelée tri par sélection.
Par exemple, l’appel tri_selection([1 3 -4 -2 7 9 10 3]) devra renvoyer le tableau
suivant : [-4 -2 1 3 3 7 9 10].
Q 2.a)
Écrivez un algorithme echange qui, étant donné un tableau v de n entiers et
deux entiers i et j compris entre 1 et n, permute les deux éléments d’indices i et j du tableau v.
Implantez cet algorithme en matlab.
Q 2.b)
Écrivez un algorithme minimum_partiel qui, étant donné un tableau v de
n entiers et deux entiers i, j tels que 1 6 i 6 j 6 n, recherche l’indice k du minimum des
éléments de v tel que k vérifie i 6 k 6 j. Si le minimum est atteint plusieurs fois, on fera le
choix de renvoyer le plus petit des indices k qui conviennent.
Implantez cet algorithme en matlab.
Question subsidiaire : quel changement mineur est suffisant pour que l’algorithme, au lieu
de renvoyer le plus petit, renvoie le plus grand des indices k qui conviennent ?
Q 2.c)
Écrivez, à l’aide des deux algorithmes echange et minimum_partiel, un
algorithme de tri que vous appellez tri_selection.
Implantez cet algorithme en matlab et testez-le sur plusieurs exemples bien choisis.
Matlab – TP no 10
3
Le problème du tri
2/2
Tri par insertion
Le but est d’écrire une fonction matlab tri_insertion qui réalise le tri d’un tableau
d’entiers. Autrement dit, elle prend en entrée un tableau d’entiers relatifs et renvoie en sortie
le tableau trié correspondant. On va utiliser une méthode spécifique appelée tri par insertion.
Par exemple, l’appel tri_insertion([1 3 -4 -2 7 9 10 3]) devra renvoyer le tableau
suivant : [-4 -2 1 3 3 7 9 10].
Q 3.a)
Écrivez un algorithme insere qui, étant donné un tableau v de n entiers,
un entier i tel que 1 6 i 6 n et un entier quelconque a, insère a dans le tableau v « entre les
éléments d’indices i − 1 et i ».
Plus précisément, si v 0 est le résultat de l’opération,

si 1 6 k 6 i − 1
 v(k)
0
a
si k = i
v (k) =

v(k − 1) si i + 1 6 k 6 n + 1
Implantez cet algorithme en matlab.
Q 3.b)
Écrivez un algorithme recherche_dichotomique qui, étant donné un
tableau v trié en ordre croissant et un entier a, renvoie l’indice (unique) i tel que 2 6 i 6 n
et v(i − 1) < a 6 v(i) (autrement dit, le plus petit indice i tel que v(i − 1) 6 a 6 v(i)).
Implantez cet algorithme en matlab.
Q 3.c) Écrivez, à l’aide des deux algorithmes insere et recherche_dichotomique,
un algorithme de tri que vous appellez tri_insertion.
Implantez cet algorithme en matlab et testez-le sur plusieurs exemples bien choisis.
Si vous avez fini et ne savez pas quoi faire, nous avons de quoi vous occuper, il suffit de
demander !
Téléchargement