forked from menault/TD1_DEV51_Qualite_Algo
TD1
This commit is contained in:
31
Rapport TD1.txt
Normal file
31
Rapport TD1.txt
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
Rapport TD1 :
|
||||||
|
|
||||||
|
J'ai compilé la commande : "gcc -g -pg -o student_rank student_rank.c heapsort.c bubblesort.c" ce qui a créé gmon.out en plus de compiler grâce
|
||||||
|
à -pg.
|
||||||
|
|
||||||
|
Puis est lancer le code avec "./student_rank <Nombre etudiants> <Nombre notes par etudiants> <mode debug (0 ou 1)>" les informations
|
||||||
|
qui seront utilisés tout le reste du TD sont 1000 étudiants, 1000 notes et mode 0.
|
||||||
|
|
||||||
|
En ajoutant "time" devant la commande pour lancer le code l'on obtient le temps de l'exécution qui est de 3 secondes environ pour 1000 étudiants
|
||||||
|
et de plus de 1 minute pour 5000 étudiants.
|
||||||
|
|
||||||
|
L'on utilise l'outil GPROF avec fait la commande "gprof student_rank".
|
||||||
|
|
||||||
|
Gprof :
|
||||||
|
Flat profile = temps et nombre d'exécution par fonction
|
||||||
|
Call graph = arbre appel fonctions + temps et nombre d'exécution par fonction
|
||||||
|
|
||||||
|
Fonction la plus lente = bubblesort
|
||||||
|
|
||||||
|
Le problème vient du nombre d'appels de bubblesort donc il faudrait réduire son nombre d'appels.
|
||||||
|
|
||||||
|
Dans student_rank un des appels de la fonction bubblesort est inutile, j'ai mis en commentaire l'appel de bubblesort ligne 58 de la fonction
|
||||||
|
find_rank_student dans student_rank.c. Le temps gagner est colossal. Mais un problème dans le classement car il n'est pas à 100% correct.
|
||||||
|
|
||||||
|
L'on modifie dans bubblesort.c la ligne 20 à la place du "swapped==1" on met "swapped>0", mais du coup le code remet beaucoup de temps.
|
||||||
|
|
||||||
|
Si l'on modifie à la ligne 80 du student_rank on change "bubblesort" par "heapsort" l'exécution est 10 fois plus rapide.
|
||||||
|
Dernière vérification avec GPROF pour voir s'il y a moyen d'optimiser plus (possiblement sift)
|
||||||
|
|
||||||
|
|
||||||
|
Recherche sur Wikipédia sur le Tri rapide.
|
@@ -17,5 +17,5 @@ void bubblesort(int* array, int length)
|
|||||||
swapped++;
|
swapped++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while(swapped==1);
|
} while(swapped>0);
|
||||||
}
|
}
|
||||||
|
BIN
student_rank
Executable file
BIN
student_rank
Executable file
Binary file not shown.
@@ -55,7 +55,7 @@ int find_rank_student(int student_grade, int* grades_array, int students_number)
|
|||||||
{
|
{
|
||||||
int position = -1;
|
int position = -1;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
bubblesort(grades_array,students_number);
|
//bubblesort(grades_array,students_number);
|
||||||
for(i = students_number-1; i >= 0; i--)
|
for(i = students_number-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if(grades_array[i] == student_grade)
|
if(grades_array[i] == student_grade)
|
||||||
@@ -77,7 +77,7 @@ void sort_students(int** students_rank, int** students_array, int students_numbe
|
|||||||
{
|
{
|
||||||
grades[j] = students_array[j][i];
|
grades[j] = students_array[j][i];
|
||||||
}
|
}
|
||||||
bubblesort(grades,students_number);
|
heapsort(grades,students_number);
|
||||||
for(j = 0; j < students_number; j++)
|
for(j = 0; j < students_number; j++)
|
||||||
{
|
{
|
||||||
students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number);
|
students_rank[j][i] = find_rank_student(students_array[j][i],grades,students_number);
|
||||||
|
Reference in New Issue
Block a user