Files
2026_TD1_DEV51_Qualite_Algo/README.md
T
2026-10-07 12:14:44 +02:00

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.