Files
2026_TD1_DEV51_Qualite_Algo/COMPTE_RENDU.md
T
2026-10-07 12:59:32 +02:00

48 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 %)**.