Bonjour à tous,
je souhaiterais avoir des conseils sur un code que j'ai fait car il est pas très rapide, même si c'est pour traiter beaucoup de données (100 000 mots : le nombre de mots en français) Il met en gros 3 secondes à charger. Je voulais savoir si ce code pourrait être amélioré ?
Merci de vos conseils.
Voici les codes :
Dictionnaire.h
Dictionnaire.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <iostream> #include <string> #include <fstream> class Dictionnaire_fils; class Dictionnaire { public: /*constructeurs, destructeur, accesseurs*/ Dictionnaire(); Dictionnaire(const std::string &adresseFichierDictionnaire); ~Dictionnaire(); void setFils(Dictionnaire_fils *fils); Dictionnaire_fils* getFils(); /* methodes*/ void ajouterMot(const std::string &mot); protected: /* attributs */ bool m_estMot; Dictionnaire_fils *m_fils; };
Dictionnaire_fils.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 #include "Dictionnaire.h" #include "Dictionnaire_fils.h" /*constructeurs, destructeur, accesseurs*/ Dictionnaire::Dictionnaire() { m_estMot = false; m_fils = 0; } Dictionnaire::Dictionnaire(const std::string &adresseFichierDictionnaire) { m_estMot = false; m_fils = NULL; std::ifstream fichier(adresseFichierDictionnaire.c_str()); if(!fichier) { std::cerr << "Erreur lors de l'ouverture du dictionnaire " << adresseFichierDictionnaire << std::endl; exit(-1); } std::string str; while(getline(fichier,str)) { ajouterMot(str); /*afficherArbre();*/ } } Dictionnaire::~Dictionnaire() { } void Dictionnaire::setFils(Dictionnaire_fils *fils) { m_fils = fils; } Dictionnaire_fils* Dictionnaire::getFils() { return m_fils; } /*Méthodes*/ void Dictionnaire::ajouterMot(const std::string &mot) { if(mot.empty()) { m_estMot = true; } else { if(m_fils == NULL) { m_fils = new Dictionnaire_fils(mot[0],this); m_fils->ajouterMot(mot.substr(1)); } else { m_fils->ajouterMotFrere(mot); } } }
Dictionnaire_fils.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef DICTIONNAIRE_FILS #define DICTIONNAIRE_FILS #include "Dictionnaire.h" Dictionnaire dico ; class Dictionnaire_fils : public Dictionnaire{ public: Dictionnaire_fils(); Dictionnaire_fils(char caractere,Dictionnaire *pere = NULL,Dictionnaire_fils *frere = NULL); ~Dictionnaire_fils(); char getChar(); void setChar(const char nouveauChar); void setFrere(Dictionnaire_fils *frere); void ajouterMotFrere(const std::string &mot,Dictionnaire_fils *createur = NULL); protected: char m_char; Dictionnaire *m_pere; Dictionnaire_fils *m_frere; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #include "Dictionnaire_fils.h" Dictionnaire_fils::Dictionnaire_fils() : Dictionnaire() { m_char = ' '; m_pere = NULL; m_frere = NULL; } Dictionnaire_fils::Dictionnaire_fils(char caractere, Dictionnaire *pere, Dictionnaire_fils *frere) : Dictionnaire(){ m_char = caractere ; m_pere = NULL; m_frere = NULL; if(pere != NULL) { m_pere = pere; } if(frere != NULL) { m_frere = frere; } } Dictionnaire_fils::~Dictionnaire_fils() { delete m_fils; delete m_frere; delete m_pere; } char Dictionnaire_fils::getChar() { return m_char; } void Dictionnaire_fils::setChar(const char nouveauChar) { m_char = nouveauChar; } void Dictionnaire_fils::setFrere(Dictionnaire_fils *frere) { m_frere = frere; } void Dictionnaire_fils::ajouterMotFrere(const std::string &mot,Dictionnaire_fils *createur) { char lettre = mot[0]; if(lettre > m_char) { if(m_frere == NULL) { m_frere = new Dictionnaire_fils(lettre,m_pere); m_frere->ajouterMot(mot.substr(1)); } else { m_frere->ajouterMotFrere(mot,this); } } else if (lettre == m_char) { ajouterMot(mot.substr(1)); } else { if(createur == NULL) { // c'est son père qui l'a appelé Dictionnaire_fils *nouveau_fils = new Dictionnaire_fils(lettre,m_pere,this); m_pere->setFils(nouveau_fils); // on met le nouveau fils au père nouveau_fils->ajouterMot(mot.substr(1)); } else { //c'est son frère gauche qui l'a apellé Dictionnaire_fils *nouveau_frere = new Dictionnaire_fils(lettre,m_pere,this); createur->setFrere(nouveau_frere); nouveau_frere->ajouterMot(mot.substr(1)); } } }
Partager