Files
2026-10-07 12:14:44 +02:00

4.0 KiB

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.

  1. 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.

  1. 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.

  1. 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).

  1. 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.

  1. 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.