Bonjour, je remercie par avance tous ceux qui s'intéresseront à mon problème.
Je fais un programme de clustering dans lequel je dois à un moment stocker des millions d'objets. Le classe de l'objet est Edge, voici la classe :
Voici le coeur du problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Edge { public: bool operator==(const Edge &other) const; Edge(std::string vertex1, std::string vertex2, int cost); size_t hash() const; std::string vertex1; std::string vertex2; unsigned int cost; };
Mon problème est le suivant : il y a énormément d'objets à rajouter et la structure que j'ai choisie jusqu'ici : unordered_set est trop lente. Un ami à moi fait tourner le programme en moins de 1 min en python, moi ça m'en prends 30.
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 for(auto& vertex : vertices){ l++; for(size_t i(0); i < 24; i++){ // for(size_t j(i); j < 24; j++){ std::string v(vertex.first); if(i != j){ flip_bit(v[i]); // permet de modifier le ième bit flip_bit(v[j]); } else flip_bit(v[i]); if(vertices.find(v)!= vertices.end()) { Edge e(vertex.first, v, compute_distance(vertex.first, v)); std::cout << "coucou " << l << std::endl; graph.insert(e); } } } }
Si quelqu'un a une idée, merci de la partager.
Partager