Optimise la fonction d'analyse des bigrammes en réduisant les vérifications et en normalisant les lignes

This commit is contained in:
rabot
2026-10-07 13:49:42 +02:00
parent 2878461ebd
commit e3076e46aa
3 changed files with 83 additions and 5 deletions
+14 -4
View File
@@ -373,7 +373,8 @@ double ecart_type_longueur(const Entree *table, int n, double moyenne)
}
/* Recherche du bigramme de lettres le plus fréquent, avec en bonus la
* troisième lettre qui le suit le plus souvent. */
* troisième lettre qui le suit le plus souvent.
* Les lignes doivent être normalisées : lettres 'a' à 'z' ou espaces. */
void analyser_bigrammes(char **lignes, int nb_lignes,
char *meilleur, int *occ_meilleur)
{
@@ -381,9 +382,18 @@ void analyser_bigrammes(char **lignes, int nb_lignes,
for (int l = 0; l < nb_lignes; l++) {
const char *s = lignes[l];
for (int i = 0; s[i] != '\0' && s[i + 1] != '\0' && s[i + 2] != '\0'; i++) {
if (est_lettre(s[i]) && est_lettre(s[i + 1]) && est_lettre(s[i + 2]))
trigrammes[s[i] - 'a'][s[i + 1] - 'a'][s[i + 2] - 'a']++;
int avant_dernier = -1;
int dernier = -1;
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] == ' ') {
avant_dernier = dernier = -1;
continue;
}
int lettre = s[i] - 'a';
if (avant_dernier >= 0)
trigrammes[avant_dernier][dernier][lettre]++;
avant_dernier = dernier;
dernier = lettre;
}
}