forked from menault/2026_TD1_DEV51_Qualite_Algo
124 lines
4.0 KiB
Markdown
124 lines
4.0 KiB
Markdown
Groupe :
|
|
- FRAMERY Karl
|
|
- ABRAHAM Ozvann
|
|
|
|
|
|
|
|
1. Mesurer
|
|
|
|
|
|
[ozvann@archlinux 2026_TD1_DEV51_Qualite_Algo]$ time ./a.out
|
|
Lignes analysées : 21746
|
|
Mots au total : 250000
|
|
Mots distincts : 5866
|
|
Longueur moyenne : 6.712 (écart-type 1.873)
|
|
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
|
|
|
Top 10 :
|
|
1. rane 287
|
|
2. fasi 241
|
|
3. tata 219
|
|
4. mopo 214
|
|
5. cofi 180
|
|
6. vesi 179
|
|
7. laganomo 177
|
|
8. boto 172
|
|
9. nopebo 169
|
|
10. rotion 165
|
|
|
|
Empreinte du rapport : 1d53de903efd2b7c
|
|
|
|
real 0m5,077s
|
|
user 0m5,058s
|
|
sys 0m0,004s
|
|
|
|
|
|
Le programme a pris 5.077 seconde a s'exécuter.
|
|
|
|
|
|
|
|
2. Profiler
|
|
|
|
|
|
[ozvann@archlinux 2026_TD1_DEV51_Qualite_Algo]$ time ./analyseur
|
|
Lignes analysées : 21746
|
|
Mots au total : 250000
|
|
Mots distincts : 5866
|
|
Longueur moyenne : 6.712 (écart-type 1.873)
|
|
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
|
|
|
Top 10 :
|
|
1. rane 287
|
|
2. fasi 241
|
|
3. tata 219
|
|
4. mopo 214
|
|
5. cofi 180
|
|
6. vesi 179
|
|
7. laganomo 177
|
|
8. boto 172
|
|
9. nopebo 169
|
|
10. rotion 165
|
|
|
|
Empreinte du rapport : 1d53de903efd2b7c
|
|
|
|
real 0m9,359s
|
|
user 0m9,326s
|
|
sys 0m0,004s
|
|
|
|
|
|
Le programme passe 9.359 seconde sur le programme au totale, c'est plus de 4 secondes de plus que l'étape 1.
|
|
|
|
|
|
3. Analyser
|
|
|
|
|
|
Pour le profil plat :
|
|
|
|
La fonction "egales" prend le plus de calls (308701874), pour un temps de 34.51%. La fonction "longueur" prend 36009819 calls, pour un temps de 29.20%. La fonction "chercher_mot" prend 150182, pour un temps de 13.27%.
|
|
|
|
|
|
Pour le graph d'appel :
|
|
|
|
On voit que longeur est appelé majoritairement par longeur_moyenne ou l'on peut juste se limiter a un seul appel de longeur. Pour chercher_mot est aussi un moyen d'amélioration. La fonction égale ne permet pas d'être amélioré car il n'a que le nécéssaire.
|
|
|
|
|
|
|
|
4. Proposer
|
|
|
|
|
|
On peut réduire l'utilisation de longeur a des appel réduit. On peut aussi réduire le temps utiliser par chercher_mot en le modifiants.
|
|
|
|
La fonction longeur risque d'avoir le changement le plus drastique (passage de plusieurs million d'appel a un seul). La fonction chercher_mot peut être amélioré (nous ne savons pas encore la porté du résultat de l'amélioration).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5. Optimiser
|
|
|
|
Nous avons optimisé le code sur deux points principaux :
|
|
|
|
- réduction des appels répétés à la fonction `longueur` : la moyenne est calculée une seule fois puis réutilisée dans le calcul de l'écart-type ;
|
|
- remplacement de la recherche linéaire dans `chercher_mot` par un index de hachage, ce qui permet de retrouver rapidement un mot déjà présent dans la table sans parcourir toutes les entrées.
|
|
|
|
La logique métier du programme n'a pas été modifiée : le traitement des mots, le tri, la génération du rapport et l'empreinte finale restent cohérents avec la version initiale. Les modifications visent uniquement à réduire le coût de calcul et améliorer le temps d'exécution.
|
|
|
|
Les changements ont été appliqués dans le fichier `analyseur.c`, notamment dans les fonctions `longueur_moyenne`, `ecart_type_longueur`, `chercher_mot`, `compter_mot` et `compter_mots_ligne`.
|
|
|
|
|
|
6. Valider
|
|
|
|
Avant optimisation, le programme prenait environ 9 secondes à s'exécuter, avec une empreinte du rapport de `1d53de903efd2b7c`.
|
|
|
|
Après optimisation, le temps d'exécution a été réduit à environ 2,171 secondes, tout en conservant la même empreinte de rapport : `1d53de903efd2b7c`.
|
|
|
|
Cette amélioration représente une réduction de plus de 7 secondes, ce qui confirme que les changements ont bien permis d'optimiser le code sans modifier le résultat final.
|
|
|
|
Les fichiers `profil-1.txt`, `profil-2.txt` et `profil-3.txt` correspondent respectivement à la version initiale, à la version après optimisation de la fonction `longueur`, puis à la version finale avec les améliorations complètes.
|
|
|
|
|
|
|
|
|
|
|