forked from menault/2026_TD1_DEV51_Qualite_Algo
Rendu
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# 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 %)**.
|
||||
Reference in New Issue
Block a user