From 7ab243f1d6dc45cd0ec494f56e675d72725d4ecf Mon Sep 17 00:00:00 2001 From: Nathan Couchot Date: Wed, 7 Oct 2026 12:05:12 +0200 Subject: [PATCH] opti 2 --- analyseur.c | 28 ++++++-- profil.txt | 171 ---------------------------------------------- profil_après.txt | 173 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+), 175 deletions(-) delete mode 100644 profil.txt create mode 100644 profil_après.txt diff --git a/analyseur.c b/analyseur.c index f43c040..6e5f30f 100644 --- a/analyseur.c +++ b/analyseur.c @@ -228,10 +228,30 @@ typedef struct { int longueur_mot; } Entree; -int est_mot_vide(const char *mot) +/* Groupes par longueur et première lettre ; indices + 1, zéro = fin. */ +int est_mot_vide(const char *mot, int taille) { - for (int i = 0; i < NB_MOTS_VIDES; i++) { - if (egales(mot, MOTS_VIDES[i])) + static int groupes[TAILLE_MOT][26]; + static int suivants[NB_MOTS_VIDES]; + static int initialise = 0; + + if (!initialise) { + for (int i = 0; i < NB_MOTS_VIDES; i++) { + int n = longueur(MOTS_VIDES[i]); + int lettre = MOTS_VIDES[i][0] - 'a'; + if (n > 0 && n < TAILLE_MOT && lettre >= 0 && lettre < 26) { + suivants[i] = groupes[n][lettre]; + groupes[n][lettre] = i + 1; + } + } + initialise = 1; + } + + if (taille <= 0 || taille >= TAILLE_MOT || mot[0] < 'a' || mot[0] > 'z') + return 0; + for (int indice = groupes[taille][mot[0] - 'a']; indice != 0; + indice = suivants[indice - 1]) { + if (egales(mot, MOTS_VIDES[indice - 1])) return 1; } return 0; @@ -303,7 +323,7 @@ void compter_mots_ligne(Entree *table, int *nb_entrees, const char *ligne, mot[k] = '\0'; if (k > 0) { (*nb_mots_total)++; - if (!est_mot_vide(mot)) + if (!est_mot_vide(mot, k)) compter_mot(table, nb_entrees, mot, k); } } diff --git a/profil.txt b/profil.txt deleted file mode 100644 index f4fb37b..0000000 --- a/profil.txt +++ /dev/null @@ -1,171 +0,0 @@ -Flat profile: - -Each sample counts as 0.01 seconds. - % cumulative self self total - time seconds seconds calls ms/call ms/call name - 28.85 0.23 0.23 121889737 0.00 0.00 egales - 15.38 0.34 0.12 2500000 0.00 0.00 est_mot_vide - 10.26 0.42 0.08 52929320 0.00 0.00 est_lettre - 8.97 0.49 0.07 217318 0.00 0.00 compter_mots_ligne - 7.69 0.56 0.06 1 60.00 69.97 generer_texte - 5.13 0.59 0.04 1499989 0.00 0.00 hacher_mot - 5.13 0.64 0.04 1 40.00 96.75 analyser_bigrammes - 5.13 0.68 0.04 1 40.00 40.00 decouper_lignes - 2.56 0.69 0.02 1499989 0.00 0.00 compter_mot - 2.56 0.71 0.02 217318 0.00 0.00 normaliser_ligne - 2.56 0.73 0.02 _init - 1.92 0.75 0.01 15787 0.00 0.00 comparer - 1.28 0.76 0.01 12656214 0.00 0.00 en_minuscule - 1.28 0.77 0.01 9027924 0.00 0.00 alea - 1.28 0.78 0.01 1499989 0.00 0.00 chercher_mot - 0.00 0.78 0.00 68597 0.00 0.00 doit_echanger - 0.00 0.78 0.00 27010 0.00 0.00 copier - 0.00 0.78 0.00 20934 0.00 0.00 ajouter - 0.00 0.78 0.00 20934 0.00 0.00 longueur - 0.00 0.78 0.00 1 0.00 0.00 construire_rapport - 0.00 0.78 0.00 1 0.00 0.00 ecart_type_longueur - 0.00 0.78 0.00 1 0.00 0.00 empreinte - 0.00 0.78 0.00 1 0.00 15.00 fusionner_entrees - 0.00 0.78 0.00 1 0.00 0.03 generer_vocabulaire - 0.00 0.78 0.00 1 0.00 0.00 longueur_moyenne - 0.00 0.78 0.00 1 0.00 0.00 racine - 0.00 0.78 0.00 1 0.00 15.00 trier_entrees - - Call graph - - -granularity: each sample hit covers 4 byte(s) for 1.28% of 0.78 seconds - -index % time self children called name - -[1] 97.4 0.00 0.76 main [1] - 0.07 0.41 217318/217318 compter_mots_ligne [2] - 0.04 0.06 1/1 analyser_bigrammes [5] - 0.06 0.01 1/1 generer_texte [8] - 0.02 0.03 217318/217318 normaliser_ligne [9] - 0.04 0.00 1/1 decouper_lignes [12] - 0.00 0.01 1/1 trier_entrees [17] - 0.00 0.00 1/1 generer_vocabulaire [20] - 0.00 0.00 1/1 longueur_moyenne [27] - 0.00 0.00 1/1 ecart_type_longueur [25] - 0.00 0.00 1/1 racine [28] - 0.00 0.00 1/1 construire_rapport [24] - 0.00 0.00 1/1 empreinte [26] ------------------------------------------------ - 0.07 0.41 217318/217318 main [1] -[2] 62.2 0.07 0.41 217318 compter_mots_ligne [2] - 0.12 0.22 2500000/2500000 est_mot_vide [3] - 0.02 0.05 1499989/1499989 compter_mot [7] ------------------------------------------------ - 0.12 0.22 2500000/2500000 compter_mots_ligne [2] -[3] 43.9 0.12 0.22 2500000 est_mot_vide [3] - 0.22 0.00 120340526/121889737 egales [4] ------------------------------------------------ - 0.00 0.00 1549211/121889737 chercher_mot [10] - 0.22 0.00 120340526/121889737 est_mot_vide [3] -[4] 28.8 0.23 0.00 121889737 egales [4] ------------------------------------------------ - 0.04 0.06 1/1 main [1] -[5] 12.4 0.04 0.06 1 analyser_bigrammes [5] - 0.06 0.00 37544897/52929320 est_lettre [6] ------------------------------------------------ - 0.02 0.00 15384423/52929320 normaliser_ligne [9] - 0.06 0.00 37544897/52929320 analyser_bigrammes [5] -[6] 10.3 0.08 0.00 52929320 est_lettre [6] ------------------------------------------------ - 0.02 0.05 1499989/1499989 compter_mots_ligne [2] -[7] 9.3 0.02 0.05 1499989 compter_mot [7] - 0.01 0.04 1499989/1499989 chercher_mot [10] - 0.00 0.00 6076/27010 copier [21] ------------------------------------------------ - 0.06 0.01 1/1 main [1] -[8] 9.0 0.06 0.01 1 generer_texte [8] - 0.01 0.00 8999990/9027924 alea [19] ------------------------------------------------ - 0.02 0.03 217318/217318 main [1] -[9] 6.8 0.02 0.03 217318 normaliser_ligne [9] - 0.02 0.00 15384423/52929320 est_lettre [6] - 0.01 0.00 12656214/12656214 en_minuscule [18] ------------------------------------------------ - 0.01 0.04 1499989/1499989 compter_mot [7] -[10] 6.8 0.01 0.04 1499989 chercher_mot [10] - 0.04 0.00 1499989/1499989 hacher_mot [11] - 0.00 0.00 1549211/121889737 egales [4] ------------------------------------------------ - 0.04 0.00 1499989/1499989 chercher_mot [10] -[11] 5.1 0.04 0.00 1499989 hacher_mot [11] ------------------------------------------------ - 0.04 0.00 1/1 main [1] -[12] 5.1 0.04 0.00 1 decouper_lignes [12] ------------------------------------------------ - -[13] 2.6 0.02 0.00 _init [13] ------------------------------------------------ - 0.00 0.01 68597/68597 fusionner_entrees [16] -[14] 1.9 0.00 0.01 68597 doit_echanger [14] - 0.01 0.00 15787/15787 comparer [15] ------------------------------------------------ - 0.01 0.00 15787/15787 doit_echanger [14] -[15] 1.9 0.01 0.00 15787 comparer [15] ------------------------------------------------ - 12150 fusionner_entrees [16] - 0.00 0.01 1/1 trier_entrees [17] -[16] 1.9 0.00 0.01 1+12150 fusionner_entrees [16] - 0.00 0.01 68597/68597 doit_echanger [14] - 12150 fusionner_entrees [16] ------------------------------------------------ - 0.00 0.01 1/1 main [1] -[17] 1.9 0.00 0.01 1 trier_entrees [17] - 0.00 0.01 1/1 fusionner_entrees [16] ------------------------------------------------ - 0.01 0.00 12656214/12656214 normaliser_ligne [9] -[18] 1.3 0.01 0.00 12656214 en_minuscule [18] ------------------------------------------------ - 0.00 0.00 27934/9027924 generer_vocabulaire [20] - 0.01 0.00 8999990/9027924 generer_texte [8] -[19] 1.3 0.01 0.00 9027924 alea [19] ------------------------------------------------ - 0.00 0.00 1/1 main [1] -[20] 0.0 0.00 0.00 1 generer_vocabulaire [20] - 0.00 0.00 27934/9027924 alea [19] - 0.00 0.00 20934/20934 ajouter [22] ------------------------------------------------ - 0.00 0.00 6076/27010 compter_mot [7] - 0.00 0.00 20934/27010 ajouter [22] -[21] 0.0 0.00 0.00 27010 copier [21] ------------------------------------------------ - 0.00 0.00 20934/20934 generer_vocabulaire [20] -[22] 0.0 0.00 0.00 20934 ajouter [22] - 0.00 0.00 20934/20934 longueur [23] - 0.00 0.00 20934/27010 copier [21] ------------------------------------------------ - 0.00 0.00 20934/20934 ajouter [22] -[23] 0.0 0.00 0.00 20934 longueur [23] ------------------------------------------------ - 0.00 0.00 1/1 main [1] -[24] 0.0 0.00 0.00 1 construire_rapport [24] ------------------------------------------------ - 0.00 0.00 1/1 main [1] -[25] 0.0 0.00 0.00 1 ecart_type_longueur [25] ------------------------------------------------ - 0.00 0.00 1/1 main [1] -[26] 0.0 0.00 0.00 1 empreinte [26] ------------------------------------------------ - 0.00 0.00 1/1 main [1] -[27] 0.0 0.00 0.00 1 longueur_moyenne [27] ------------------------------------------------ - 0.00 0.00 1/1 main [1] -[28] 0.0 0.00 0.00 1 racine [28] ------------------------------------------------ - -Index by function name - - [13] _init [21] copier [16] fusionner_entrees - [22] ajouter [12] decouper_lignes [8] generer_texte - [19] alea [14] doit_echanger [20] generer_vocabulaire - [5] analyser_bigrammes [25] ecart_type_longueur [11] hacher_mot - [10] chercher_mot [4] egales [23] longueur - [15] comparer [26] empreinte [27] longueur_moyenne - [7] compter_mot [18] en_minuscule [9] normaliser_ligne - [2] compter_mots_ligne [6] est_lettre [28] racine - [24] construire_rapport [3] est_mot_vide [17] trier_entrees diff --git a/profil_après.txt b/profil_après.txt new file mode 100644 index 0000000..b4f257c --- /dev/null +++ b/profil_après.txt @@ -0,0 +1,173 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls ms/call ms/call name + 17.78 0.08 0.08 1 80.00 108.37 analyser_bigrammes + 13.33 0.14 0.06 217318 0.00 0.00 compter_mots_ligne + 13.33 0.20 0.06 1 60.00 60.00 decouper_lignes + 8.89 0.24 0.04 52929320 0.00 0.00 est_lettre + 8.89 0.28 0.04 1 40.00 49.97 generer_texte + 8.89 0.32 0.04 _init + 6.67 0.35 0.03 217318 0.00 0.00 normaliser_ligne + 4.44 0.37 0.02 12656214 0.00 0.00 en_minuscule + 4.44 0.39 0.02 3413876 0.00 0.00 egales + 4.44 0.41 0.02 2500000 0.00 0.00 est_mot_vide + 2.22 0.42 0.01 9027924 0.00 0.00 alea + 2.22 0.43 0.01 1499989 0.00 0.00 compter_mot + 2.22 0.44 0.01 1499989 0.00 0.00 hacher_mot + 2.22 0.45 0.01 1 10.00 10.00 fusionner_entrees + 0.00 0.45 0.00 1499989 0.00 0.00 chercher_mot + 0.00 0.45 0.00 68597 0.00 0.00 doit_echanger + 0.00 0.45 0.00 27010 0.00 0.00 copier + 0.00 0.45 0.00 20994 0.00 0.00 longueur + 0.00 0.45 0.00 20934 0.00 0.00 ajouter + 0.00 0.45 0.00 15787 0.00 0.00 comparer + 0.00 0.45 0.00 1 0.00 0.00 construire_rapport + 0.00 0.45 0.00 1 0.00 0.00 ecart_type_longueur + 0.00 0.45 0.00 1 0.00 0.00 empreinte + 0.00 0.45 0.00 1 0.00 0.03 generer_vocabulaire + 0.00 0.45 0.00 1 0.00 0.00 longueur_moyenne + 0.00 0.45 0.00 1 0.00 0.00 racine + 0.00 0.45 0.00 1 0.00 10.00 trier_entrees + + Call graph + + +granularity: each sample hit covers 4 byte(s) for 2.22% of 0.45 seconds + +index % time self children called name + +[1] 91.1 0.00 0.41 main [1] + 0.06 0.06 217318/217318 compter_mots_ligne [2] + 0.08 0.03 1/1 analyser_bigrammes [3] + 0.03 0.03 217318/217318 normaliser_ligne [4] + 0.06 0.00 1/1 decouper_lignes [5] + 0.04 0.01 1/1 generer_texte [6] + 0.00 0.01 1/1 trier_entrees [17] + 0.00 0.00 1/1 generer_vocabulaire [18] + 0.00 0.00 1/1 longueur_moyenne [27] + 0.00 0.00 1/1 ecart_type_longueur [25] + 0.00 0.00 1/1 racine [28] + 0.00 0.00 1/1 construire_rapport [24] + 0.00 0.00 1/1 empreinte [26] +----------------------------------------------- + 0.06 0.06 217318/217318 main [1] +[2] 26.7 0.06 0.06 217318 compter_mots_ligne [2] + 0.02 0.01 2500000/2500000 est_mot_vide [9] + 0.01 0.02 1499989/1499989 compter_mot [10] +----------------------------------------------- + 0.08 0.03 1/1 main [1] +[3] 24.1 0.08 0.03 1 analyser_bigrammes [3] + 0.03 0.00 37544897/52929320 est_lettre [7] +----------------------------------------------- + 0.03 0.03 217318/217318 main [1] +[4] 13.7 0.03 0.03 217318 normaliser_ligne [4] + 0.02 0.00 12656214/12656214 en_minuscule [11] + 0.01 0.00 15384423/52929320 est_lettre [7] +----------------------------------------------- + 0.06 0.00 1/1 main [1] +[5] 13.3 0.06 0.00 1 decouper_lignes [5] +----------------------------------------------- + 0.04 0.01 1/1 main [1] +[6] 11.1 0.04 0.01 1 generer_texte [6] + 0.01 0.00 8999990/9027924 alea [14] +----------------------------------------------- + 0.01 0.00 15384423/52929320 normaliser_ligne [4] + 0.03 0.00 37544897/52929320 analyser_bigrammes [3] +[7] 8.9 0.04 0.00 52929320 est_lettre [7] +----------------------------------------------- + +[8] 8.9 0.04 0.00 _init [8] +----------------------------------------------- + 0.02 0.01 2500000/2500000 compter_mots_ligne [2] +[9] 6.9 0.02 0.01 2500000 est_mot_vide [9] + 0.01 0.00 1864665/3413876 egales [12] + 0.00 0.00 60/20994 longueur [21] +----------------------------------------------- + 0.01 0.02 1499989/1499989 compter_mots_ligne [2] +[10] 6.5 0.01 0.02 1499989 compter_mot [10] + 0.00 0.02 1499989/1499989 chercher_mot [13] + 0.00 0.00 6076/27010 copier [20] +----------------------------------------------- + 0.02 0.00 12656214/12656214 normaliser_ligne [4] +[11] 4.4 0.02 0.00 12656214 en_minuscule [11] +----------------------------------------------- + 0.01 0.00 1549211/3413876 chercher_mot [13] + 0.01 0.00 1864665/3413876 est_mot_vide [9] +[12] 4.4 0.02 0.00 3413876 egales [12] +----------------------------------------------- + 0.00 0.02 1499989/1499989 compter_mot [10] +[13] 4.2 0.00 0.02 1499989 chercher_mot [13] + 0.01 0.00 1499989/1499989 hacher_mot [15] + 0.01 0.00 1549211/3413876 egales [12] +----------------------------------------------- + 0.00 0.00 27934/9027924 generer_vocabulaire [18] + 0.01 0.00 8999990/9027924 generer_texte [6] +[14] 2.2 0.01 0.00 9027924 alea [14] +----------------------------------------------- + 0.01 0.00 1499989/1499989 chercher_mot [13] +[15] 2.2 0.01 0.00 1499989 hacher_mot [15] +----------------------------------------------- + 12150 fusionner_entrees [16] + 0.01 0.00 1/1 trier_entrees [17] +[16] 2.2 0.01 0.00 1+12150 fusionner_entrees [16] + 0.00 0.00 68597/68597 doit_echanger [19] + 12150 fusionner_entrees [16] +----------------------------------------------- + 0.00 0.01 1/1 main [1] +[17] 2.2 0.00 0.01 1 trier_entrees [17] + 0.01 0.00 1/1 fusionner_entrees [16] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[18] 0.0 0.00 0.00 1 generer_vocabulaire [18] + 0.00 0.00 27934/9027924 alea [14] + 0.00 0.00 20934/20934 ajouter [22] +----------------------------------------------- + 0.00 0.00 68597/68597 fusionner_entrees [16] +[19] 0.0 0.00 0.00 68597 doit_echanger [19] + 0.00 0.00 15787/15787 comparer [23] +----------------------------------------------- + 0.00 0.00 6076/27010 compter_mot [10] + 0.00 0.00 20934/27010 ajouter [22] +[20] 0.0 0.00 0.00 27010 copier [20] +----------------------------------------------- + 0.00 0.00 60/20994 est_mot_vide [9] + 0.00 0.00 20934/20994 ajouter [22] +[21] 0.0 0.00 0.00 20994 longueur [21] +----------------------------------------------- + 0.00 0.00 20934/20934 generer_vocabulaire [18] +[22] 0.0 0.00 0.00 20934 ajouter [22] + 0.00 0.00 20934/20994 longueur [21] + 0.00 0.00 20934/27010 copier [20] +----------------------------------------------- + 0.00 0.00 15787/15787 doit_echanger [19] +[23] 0.0 0.00 0.00 15787 comparer [23] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[24] 0.0 0.00 0.00 1 construire_rapport [24] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[25] 0.0 0.00 0.00 1 ecart_type_longueur [25] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[26] 0.0 0.00 0.00 1 empreinte [26] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[27] 0.0 0.00 0.00 1 longueur_moyenne [27] +----------------------------------------------- + 0.00 0.00 1/1 main [1] +[28] 0.0 0.00 0.00 1 racine [28] +----------------------------------------------- + +Index by function name + + [8] _init [20] copier [16] fusionner_entrees + [22] ajouter [5] decouper_lignes [6] generer_texte + [14] alea [19] doit_echanger [18] generer_vocabulaire + [3] analyser_bigrammes [25] ecart_type_longueur [15] hacher_mot + [13] chercher_mot [12] egales [21] longueur + [23] comparer [26] empreinte [27] longueur_moyenne + [10] compter_mot [11] en_minuscule [4] normaliser_ligne + [2] compter_mots_ligne [7] est_lettre [28] racine + [24] construire_rapport [9] est_mot_vide [17] trier_entrees