Files
TD1_DEV51_Qualite_Algo/rendu.txt

25 lines
1.5 KiB
Plaintext
Raw Normal View History

2025-09-10 17:24:24 +02:00
En compilant ./student_rank avec 1000 élèves et 1000 notes, on a remarqué que le temps d'exécution était environ 3s.
En utilisant gprof ./student_rank, on a pu voir que la fonction bubblesort prenait 77.50% du temps d'exécution soit 2.29s avec 1 001 000 appel de la fonction contre 1 000 000 pour la fonction find_rank_student qui prend 20.98% du temps total.
gprof affiche le Flat Profile qui permet de mesurer le temps et le nombre d'exécution par fonction.
Il affiche aussi le Call Graph qui permet de visualiser les appels de fonctions (qui appel qui) et son nombre d'exécution par fonctions.
Ici, bubblesort est trop lente et a nombre important d'appel dans la fonction find_rank_student.
L'idée est donc d'optimiser le nombre d'appel dans la fonction find_rank_student.
En observant le code, l'appel de bubblesort dans la fonction find_rank_student était inutile. En le retirant, le programme ne prend plus que 0.079s. Le problème maintenant, c'est que le codeest bug.
Le problème était dans la fonction bubblesort qui déterminait une liste trié quand le nombre de swap (de changement dans le tri à bulle) n'était pas égal à 1. En modifiant par > 0, cela fonctionne.
En utilisant gprof, on se rend compte que le programme prend autant de temps mais utilise moins d'appel. (1000 contre 1 000 000)
Pour optimiser le code, on peut utiliser un autre algo de tri comme heapsort.
Dans le fichier heapsort.c, des fonctions d'un algo de tri plus rapide sont disponibles : quicksort.