# 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` ```c 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` ```c 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 %)**.