Bonjour, je travailles actuellement sur un petit programme qui a pour but de compter le nombre d'occurence de chaque mot dans un fichier texte. Cependant je souhaites optimiser mon programme a l'aide d'unordored_map de sorte a ne pas rechercher betement. Je recupere donc un mot aléatoire dans mon fichier texte puis je verifie si je l'ai deja stocker. Si oui alors j'ajoute 1 au int de ma map sinon je rajoute une case dans ma map avec ce nouveau mot et avec un indice de 1.Une fois fais j'ai donc décidé de recupérer les temps d'execution d'une recherche/insertion a une intervalle. Je vais donc tous les 20 mot inserer (par exemple) calculer le temps que je mets pour inserer/rechercher le mot. Je devrais m'attendre a trouver des temps qui ne cesse de monter car la recherche va se faire sur un tableau de plus en plus rempli mais aussi des temps très bas qui correspond a des mots deja present dans ma map. Cependant j'ai des temps qui ne cesse de grandir. Je n'ai jamais des temps qui sont inferieur a leurs precedant.
Voici mon code: sachant que nous avons deux parametres lors de l'execution qui corresponds au nombre de mot a tester et a l'intervalle entre chaque temps recuperé d'une insertion
j'espere que vous pourriez m'aider
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 int main (int argc,char** argv) { string const fichier="text.txt"; vector<float> vectortemp; lecturefichier(fichier); unordered_map<string, int> maMap; unordered_map<string,int>::iterator it; int compteur = strtol(argv[1], NULL, 10); int veriftaille = strtol(argv[2], NULL, 10); auto start = std::chrono::steady_clock::now(); auto end = std::chrono::steady_clock::now(); std::random_device r; std::default_random_engine nombrerand(r()); for(unsigned i=0;0<compteur;i++) { std::uniform_int_distribution<int> distribution(0,vecteur.size()-1); int nbr = distribution(nombrerand); cout<<nbr<<endl; if(i%veriftaille==0) { auto start = std::chrono::steady_clock::now(); } it = maMap.find(vecteur[nbr]); if(it!= maMap.end()) { maMap.at(vecteur[nbr]) += 1; } else { maMap.insert(make_pair(vecteur[nbr],1)); } vecteur.erase(vecteur.begin()+nbr); compteur--; if(i%veriftaille==0) { auto end = std::chrono::steady_clock::now(); vectortemp.push_back(i); auto diff= std::chrono::duration_cast<std::chrono::nanoseconds>(end - start); vectortemp.push_back(diff.count()); } }
Partager