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