forked from menault/2026_TD1_DEV51_Qualite_Algo
Optimisation de l'écart-type de longueur en réutilisant la moyenne calculée
This commit is contained in:
@@ -152,4 +152,70 @@ Empreinte du rapport : 1d53de903efd2b7c
|
||||
real 0m1.986s
|
||||
user 0m1.934s
|
||||
sys 0m0.011s
|
||||
```
|
||||
|
||||
## Optimisation des appels à `longueur_moyenne`
|
||||
|
||||
`longueur_moyenne` parcourt les mots une fois par appel. Le coût excessif
|
||||
venait de `ecart_type_longueur`, qui recalculait cette même moyenne à
|
||||
chaque itération, soit 5 866 fois. Avec l'appel de `main`, cela représentait
|
||||
5 867 calculs de moyenne et 34 415 822 appels à `longueur()`.
|
||||
|
||||
`main` calcule désormais la moyenne une seule fois et la transmet en
|
||||
paramètre à `ecart_type_longueur`. La boucle utilise directement cette
|
||||
valeur. Le calcul des statistiques passe ainsi de O(n²) à O(n), sans
|
||||
allocation supplémentaire ni modification de la formule de variance.
|
||||
|
||||
Profil enregistré dans [out/profil_apres_moyenne.txt](out/profil_apres_moyenne.txt).
|
||||
La colonne « Avant » correspond à la version déjà optimisée pour
|
||||
`chercher_mot`, dont le profil reste dans `out/profil_apres.txt`.
|
||||
|
||||
| Mesure | Avant | Après |
|
||||
| --- | ---: | ---: |
|
||||
| Appels à `longueur_moyenne` | 5 867 | 1 |
|
||||
| Appels à `longueur()` depuis `longueur_moyenne` | 34 415 822 | 5 866 |
|
||||
| Appels à `longueur()` dans tout le programme | 36 009 819 | 1 599 863 |
|
||||
| Temps réel sans profiling (`gcc -O0`) | 1,46 s | 0,88 s |
|
||||
|
||||
Cette mesure ponctuelle sur la même machine donne environ 40 % de temps
|
||||
en moins, soit une accélération d'environ 1,66 par rapport à l'étape précédente.
|
||||
|
||||
Validation : compilation avec `-Wall -Wextra -Wpedantic` sans avertissement,
|
||||
puis comparaison du rapport et de la sortie console avant/après, avec et
|
||||
sans `-pg`. Ils restent identiques octet par octet, y compris la moyenne
|
||||
(`6.712`) et l'écart-type (`1.873`). L'empreinte reste **`1d53de903efd2b7c`**.
|
||||
|
||||
Commandes pour reproduire ce profil :
|
||||
|
||||
```bash
|
||||
mkdir -p out/apres_moyenne
|
||||
gcc -O0 -pg analyseur.c -o out/apres_moyenne/analyseur
|
||||
(cd out/apres_moyenne && ./analyseur && gprof -b ./analyseur gmon.out > ../profil_apres_moyenne.txt)
|
||||
```
|
||||
|
||||
```bash
|
||||
[rabot@salle235-06 out]$ time ./analyseur
|
||||
Lignes analysées : 21746
|
||||
Mots au total : 250000
|
||||
Mots distincts : 5866
|
||||
Longueur moyenne : 6.712 (écart-type 1.873)
|
||||
Bigramme le + courant : "me" (17607 fois, souvent suivi de 'n')
|
||||
|
||||
Top 10 :
|
||||
1. rane 287
|
||||
2. fasi 241
|
||||
3. tata 219
|
||||
4. mopo 214
|
||||
5. cofi 180
|
||||
6. vesi 179
|
||||
7. laganomo 177
|
||||
8. boto 172
|
||||
9. nopebo 169
|
||||
10. rotion 165
|
||||
|
||||
Empreinte du rapport : 1d53de903efd2b7c
|
||||
|
||||
real 0m1.251s
|
||||
user 0m1.214s
|
||||
sys 0m0.004s
|
||||
```
|
||||
Reference in New Issue
Block a user