forked from menault/2026_TD1_DEV51_Qualite_Algo
48 lines
1.4 KiB
Markdown
48 lines
1.4 KiB
Markdown
# 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 %)**. |