Files
2026_TD1_DEV51_Qualite_Algo/COMPTE_RENDU.md
T

48 lines
1.4 KiB
Markdown
Raw Normal View History

2026-10-07 12:59:32 +02:00
# 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 %)**.