Files
2026-10-07 12:59:32 +02:00

1.4 KiB
Raw Permalink Blame History

Compte rendu — TD Profiling

Temps

Temps Empreinte
Avant 2,905 s 1d53de903efd2b7c
Après optimisation 1 2,048 s 1d53de903efd2b7c
Après optimisation 2 1.976 s 1d53de903efd2b7c

Analyse du profil

  • chercher_mot prend 54 % du temps. Elle fait une recherche linéaire et appelle egales 296 millions de fois.
  • ecart_type_longueur prend 29 % du temps. Elle recalcule la moyenne à chaque tour de boucle.

Pistes (par gain attendu)

  1. chercher_mot : vérifier la première lettre avant d'appeler egales.
  2. ecart_type_longueur : calculer la moyenne une seule fois.

Optimisation 1 : chercher_mot

if (table[i].mot[0] == mot[0] && egales(table[i].mot, mot))

On compare d'abord la première lettre. Si elle diffère, && n'appelle pas egales.

  • Appels à egales depuis chercher_mot : 296 M → 23 M (÷ 13)
  • Temps total du profil : 2,22 s → 1,87 s (−16 %)

La boucle parcourt toujours toute la table : la complexité ne change pas, seul le nombre d'appels baisse.

Optimisation 2 : ecart_type_longueur

double moyenne = longueur_moyenne(table, n);   // avant la boucle
for (int i = 0; i < n; i++) {
    double ecart = longueur(table[i].mot) - moyenne;
  • Appels à longueur_moyenne : 5 867 → 2
  • Appels à longueur : 36 M → 1,6 M
  • Temps total du profil : 1,87 s → 1,50 s (−20 %)

Bilan

Temps total du profil : 2,22 s → 1,50 s (−32 %).