Calculer la moyenne une seule fois dans ecart_type_longueur

longueur_moyenne était rappelée à chaque tour de boucle : n appels qui
parcourent chacun toute la table, soit 34,4 millions d'appels à longueur
pour 5 866 mots (O(n²) → O(n)).

Temps : 7,6 s → 5,6 s. Empreinte inchangée (1d53de903efd2b7c).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 13:58:49 +02:00
parent 00612ff797
commit 330254a918
+2 -1
View File
@@ -318,9 +318,10 @@ double longueur_moyenne(const Entree *table, int n)
double ecart_type_longueur(const Entree *table, int n)
{
double moyenne = longueur_moyenne(table, n); /* calculée une seule fois */
double somme = 0.0;
for (int i = 0; i < n; i++) {
double ecart = longueur(table[i].mot) - longueur_moyenne(table, n);
double ecart = longueur(table[i].mot) - moyenne;
somme += ecart * ecart;
}
return somme / n; /* variance ; la racine est prise dans main */