Vous êtes sur la page 1sur 3

Structures de donnes et algorithmes e Projet 1: Algorithmes de tri

Julien Becker - Gilles Louppe 24 fvrier 2012 e

Enonc e
Lobjectif du projet est dimplmenter, de comparer et danalyser empiriquement trois algoe rithmes de tri : le QuickSort, le HeapSort et le InsertionSort. Le projet est ` raliser individuellement pour le 17 mars 2012 ` 05h00 (du matin) au plus a e a tard. Le projet est ` remettre via une interface web disponible sur la page des TPs. a Un projet non rendu ` temps recevra automatiquement une cote nulle. En cas de plagiat avr, a ee ltudiant se verra aecter une cote nulle ` lensemble du projet. Les mmes crit`res de correction e a e e que ceux utiliss dans le cadre du cours INFO0030 - Projet de programmation seront utiliss pour e e valuer limplmentation des algorithmes. e e

Fichiers fournis
Sort.h interface ` implmenter a e Event.h interface du gnrateur de donnes e e e Event.c implmentation du gnrateur de donnes e e e e BubbleSort.c implmentation du BubbleSort. Il respecte dinterface dcrite dans Sort.h e e LinkedList.h reprsentation dune liste lie minimaliste e e main.c contient la fonction principale du programme

Fichiers ` rendre a
Cinq chiers sont ` rendre dans une archive .tar.gz. Le nom de larchive na pas dimportance. a QuickSort.c implmente la fonction Sort avec le QuickSort e HeapSort.c implmente la fonction Sort avec le HeapSort e InsertionSort.c implmente la fonction Sort avec le InsertionSort e LinkedListSort.c implmente la fonction sortLinkedList e Rapport.pdf contient vos rponses aux questions e Note : Les noms de chiers font partie de lnonc. Tout chier ne correspondant pas ` ceux e e a demands dans lnonc ne sera pas pris en compte. e e e

Implmentation e

Les trois implmentations doivent respecter linterface de tri dcrite dans le chier Sort.h. e e Chaque tri doit tre implment dans un chier qui lui est propre : QuickSort.c, HeapSort.c et e e e InsertionSort.c. Vous disposerez dun gnrateur de donnes dans le chier Event.h. Ces donnes sont de type e e e e Event et comprennent trois champs : une date de dbut, une date de n et une valeur enti`re. Les e e expriences que vous devrez raliser sont ` faire sur ce type de donnes mais vos implmentations e e a e e de tri doivent tre compl`tement gnriques, cest-`-dire sans aucune rfrence vers les applications e e e e a ee qui les exploitent ou les donnes qui y sont exploites, en particulier, vers le type Event. e e

Exemple avec le BubbleSort


An de vous aider ` prendre rapidement en main le code mis en place, nous avons implment ` a e ea titre dexemple lalgorithme BubbleSort dans le chier BubbleSort.c ainsi quun petit programme dessai main.c. Pour compiler le programme, vous pouvez utiliser la commande suivante :
gcc main.c BubbleSort.c Event.c --std=c99 --pedantic -Wall -W -Wmissing-prototypes -o test

Ce programme ne prend aucun argument.

Robustesse
Nous compilerons votre code avec le compilateur GCC en spciant au minimum les options e de compilation --std=c99 --pedantic -Wall -W -Wmissing- prototypes. Si la compilation choue, le projet reoit une note de zro. e c e Le projet doit tre ralis dans le standard C99 (ag --std=c99) ; e e e Vos implmentations doivent fonctionner correctement, pas de segmentation fault, ou tout e autre crash ; Pour vous aider ` dboguer vos programmes, pensez ` utiliser une dbogueur tel que gdb ; a e a e En cas derreur (lors dune allocation, par exemple), le programme peut acher un message informatif sur stderr (le ux derreur standard). Cet erreur altrera certainement votre e algorithme mais elle ne doit en aucun cas provoquer un crash de lapplication ; De mme, vos implmentations ne doivent prsenter aucun probl`me de mmoire (mme non e e e e e e manifeste). En particulier, tout ce qui est allou doit tre libr ; e e ee Avec des pointeurs et lallocation de mmoire dynamique, il est tr`s facile dintroduire des e e erreurs de mmoire. Pour dtecter ce genre de probl`mes, il y a des outils extrmement utiles e e e e tels que valgrind ;

Analyse

Dans le cadre de ce travail, nous vous demandons galement danalyser exprimentalement e e les algorithmes que vous aurez implments en rpondant aux questions suivantes. Vos rponses e e e e doivent tre rdiges dans un bref rapport (au format PDF) ` joindre avec vos chiers sources. e e e a

2.1

Temps dexcution e

Soit n le nombre de donnes ` trier dans un tableau. Calculez empiriquement le temps dexcution e a e moyen et son cart-type des trois algorithmes pour direntes valeurs de n (10, 100, 1.000, 10.000, e e 100.000 et 1.000.000). La moyenne et l cart-type doivent tre obtenus sur un ensemble de 10 e e expriences. Commentez. e

n 10 100 1.000 10.000 100.000 1.000.000

QuickSort moyenne cart-type e

HeapSort moyenne cart-type e

InsertionSort moyenne cart-type e

Note : le temps dexcution est une valeur peu prcise qui dpend fortement des capacits de e e e e lordinateur mais galement de ltat dutilisation de celui- ci au moment des expriences. Pour e e e limiter cet eet, il vous est conseill de raliser toutes vos mesures de mani`re squentielle sur la e e e e mme machine. e

2.2

Nombre de comparaisons

Les algorithmes peuvent galement tre valus en fonction du nombre de comparaisons quils e e e e eectuent entre les lments du tableau. D`s lors, calculez empiriquement le nombre de comparaee e isons moyenne et son cart-type des trois algorithmes pour direntes valeurs de n (10, 100, 1.000, e e 10.000, 100.000 et 1.000.000). La moyenne et lcart-type doivent tre obtenus sur un ensemble de e e 10 expriences. Commentez. e n 10 100 1.000 10.000 100.000 1.000.000 QuickSort moyenne cart-type e HeapSort moyenne cart-type e InsertionSort moyenne cart-type e

Astuce : Il nest pas utile de modier tous vos algorithmes au risque dy introduire des erreurs. Vous devriez pouvoir facilement compter le nombre de comparaisons ` partir du comparateur. a

Liste lie e

Supposons ` prsent que la structure de donnes que nous dsirons trier soit une liste lie, a e e e e telle que dcrite dans le chier LinkedList.h, et non plus un tableau. Il vous est demand e e dimplmenter un algorithme (de votre choix) permettant de trier une liste lie en place, cest-`e e a dire modiant directement la structure de liste sans crer de structure supplmentaire en O(n). La e e fonction est ` implmenter dans le chier LinkedListSort.c dont le prototype sortLinkedList a e est dclar dans le chier Sort.h. e e Bonus : Toutes vos implmentations seront testes par nos soins sur les mmes jeux de donnes e e e e et des points supplmentaires seront attribus aux algorithmes les plus performants en terme de e e temps dexcution. e

Vous aimerez peut-être aussi