- IN220, TP n°3 -
> Temps d'exécution - Fonction de tri |
|
Dans la suite, vous utiliserez le fichier Chronometre.java afin de mesurer le temps d'exécution de certains programmes. Pour mesurer le temps d'exécution d'un programme, créez une variable de type Chronometre, appelez la fonction start sur cette variable, exécutez la fonction dont vous souhaitez mesurer le temps, puis appelez la fonction stop du chronomètre : cette fonction renvoie le temps qui s'est écoulé depuis l'appel de la fonction start en ms :
|
|
1) Voici la classe Main
: dans la fonction main, un tableau est créé (dont
vous devez fixer le nombre de cases) et rempli avec des entiers tirés
au hasard... La fonction verificateur
permet de vérifier si un tableau est trié.
Complétez
ce code pour construire un tableau de 30 cases et l'afficher à l'écran.
Le tableau est-il trié ? Et que dit la fonction verificateur ? |
|
2) Ecrivez une fonction qui prend un tableau en paramètre et le trie. Cette fonction devra rechercher dans le tableau le plus grand élément, et le placer à la fin, puis recommencer avec le second plus grand élément, etc. Testez
cette fonction sur le tableau créé précédemment : le tableau doit être
trié à la fin de votre fonction (vérifiez que c'est le cas). |
|
3) Utilisez le
chronomètre pour mesurer le temps d'exécution de votre fonction sur des
tableaux de taille 20, 40, 60, 80, 100, 120 et 140 milles cases.
Utilisez un tableur (excel, openoffice, ...) ou ce site
web pour tracer la courbe représentant le temps d'exécution de
votre fonction en fonction du nombre de cases du tableau. A quoi
ressemble la courbe obtenue ? N'oubliez pas d'utilisez verificateur afin de vous assurer
que votre fonction a bien trié les tableaux. |
|
4) Nous allons maintenant coder le tri fusion, afin de voir s'il est plus rapide. Voici le pseudo code du tri fusion :
Testez
cette fonction sur un petit tableau (30 cases) et vérifiez qu'elle
fonctionne (pour lancer le tri, appelez la fonction trifusion sur le tableau, entre les
cases 0 et (taille du tableau -1)). Répétez les mesures effectuées à la
question 3. |
> Temps d'exécution - Fonction de recherche |
|
Dans la suite, nous allons tester les fonctions de recherche d'éléments dans le tableau. Comme ces fonctions sont beaucoup plus rapides qu'un tri, il faudra utiliser ChronometreMicro.java, qui permet d'obtenir une mesure en microseconde du temps d'exécution d'un algorithme. 1) Le code réalisé dans la partie précédente permet de générer
un tableau au hasard, et de le trier. Vous allez devoir le réutiliser
pour la suite. Ecrivez
une fonction prenant en paramètre un tableau et un entier, et qui
recherche si l'entier est dans le tableau en parcourant tout le tableau
du début à la fin. Si l'entier est trouvé, la fonction renvoie la
position de l'entier dans le tableau. Sinon, elle renvoie -1. Testez
cette fonction sur un petit tableau, en recherchant un élément qui soit
dans le tableau et un élément qui ne soit pas dans le tableau (affichez
à chaque fois le tableau à l'écran pour vérifier que ça a fonctionné). Mesurez
les temps d'exécution de votre fonction sur des tableaux de taille 100,
200, 300, 400 et 500 milles cases (en demandant à rechercher, dans le
tableau, le nombre 2183). Tracez la courbe représentant le temps
d'exécution en fonction du nombre de cases. A quoi ressemble la courbe
obtenue ? Attention, excluez la fonction de tri du tableau du temps de
calcul... |
|
2) Faites de même en utilisant la fonction de recherche dichotomique vue en TD. Que constatez-vous ? |