
Via copilot avec chatGPT-6 Luna




comment je pourrais utiliser longueur une seul fois dans longueur_moyenne ?

11:41 AM
Je regarde la fonction longueur_moyenne et son contexte dans analyseur.c pour voir comment réutiliser le résultat de longueur sans recalcul.

Dans longueur_moyenne, longueur est déjà appelée une seule fois par mot :


for (int i = 0; i < n; i++)
    total += longueur(table[i].mot);

Le recalcul coûteux se trouve plutôt dans ecart_type_longueur : la moyenne est recalculée à chaque tour de boucle. Calcule-la une seule fois avant la boucle :

double ecart_type_longueur(const Entree *table, int n)
{
    double moyenne = longueur_moyenne(table, n);
    double somme = 0.0;

    for (int i = 0; i < n; i++) {
        double ecart = longueur(table[i].mot) - moyenne;
        somme += ecart * ecart;
    }
    return somme / n;
}

Ainsi, longueur_moyenne n’est exécutée qu’une fois pour calculer l’écart-type, au lieu de n fois.



écrit le dans le ficheir

11:42 AM
Je vais modifier ecart_type_longueur dans analyseur.c pour calculer la moyenne avant la boucle, puis compiler le fichier pour vérifier la correction.


comment on pourrait réduire les utilisation de chercher_mot ?

11:52 AM
Dans ton code, chercher_mot est appelée une fois pour chaque mot non vide par compter_mot. On ne peut pas vraiment éviter cette recherche à chaque occurrence : il faut savoir si le mot est déjà dans la table pour incrémenter son compteur ou l’ajouter.

Le vrai gain serait de remplacer la recherche linéaire dans chercher_mot par une table de hachage. Aujourd’hui, la fonction peut comparer le mot à beaucoup d’entrées (O(nb_entrees) par recherche). Avec une table de hachage, on calcule une position à partir du mot et on retrouve généralement l’entrée en temps quasi constant. Le nombre d’appels peut rester identique, mais chaque appel coûte beaucoup moins cher.

On peut conserver table pour le tri et le rapport, et ajouter une table de hachage qui associe chaque mot à son indice dans table. Pour une première étape plus simple, tu peux aussi garder la recherche linéaire : elle est plus facile à comprendre, mais le gain sera surtout visible quand le nombre de mots distincts devient grand.

11:53 AM
11s
•
GPT-6 Luna • 0.4 credits
fait le

11:53 AM
Je vais remplacer la recherche linéaire par un index de hachage tout en gardant table intacte pour le tri et le rapport. Je vérifie d’abord le code réellement présent, puis je compilerai et comparerai l’empreinte produite.

Le point coûteux est confirmé : chercher_mot parcourt toutes les entrées déjà comptées à chaque mot. J’ajoute un tableau de hachage à adressage ouvert (case vide = 0, sinon indice + 1), ce qui conserve le tableau de mots utilisé ensuite par le tri, tout en accélérant les recherches.

L’index est maintenant intégré : les collisions sont gérées par sondage, et les indices restent cohérents avec le tableau avant le tri. La compilation en terminal a été annulée ; je vérifie donc les diagnostics disponibles dans l’éditeur sans relancer cette commande.

J’ai remplacé la recherche linéaire de chercher_mot par un index de hachage dans analyseur.c. Le tableau des entrées reste inchangé pour le tri et le rapport ; la recherche gère les collisions par sondage.

L’éditeur ne signale aucune erreur. La compilation en terminal ayant été annulée, je n’ai pas vérifié l’exécution ni l’empreinte du rapport.




Via copilot avec chatGPT-6 Luna