Bonsoir à tous !
J'ai besoin d'aide, je suis en train de travailler sur un projet de matrices creuses de grandes tailles 200x200 notamment modifier une librairie existante pour l'optimisée. J'ai déjà effectué avec succès les opérations plus et inf pour des matrices représentées std::vector, mon problème est pour l'opération transpose, qui est très très lente par rapport à l'existant....
voici le début de la classe matrixvector
et le code de la fonction transpose:
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 struct Ttriplet { Ttriplet(int I, int J,serie S):i(I),j(J),s(S){} int i; int j; serie s; int geti(){return this->i;} int getj(){return this->j;} void seti(int k){i=k;} void setj(int k){this->j=k;} serie gets(){return this->s;} void sets(serie sa){this->s=sa;} } ; class matrixvector{ private : int col,row; unsigned int size,capacity; std::vector<Ttriplet *> Data; ...
test:
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 matrixvector transpose(matrixvector& a) { matrixvector result; //result.Data.reserve(a.size); Ttriplet *temp; int n=0,i=0,j=0; n=a.getsize(); result.row=a.getcol(); result.col=a.getrow(); result.size=0; if(n>0) { result.size=1; for(i=0;i<a.col;++i) { for(j=0;j<n;++j) { // std::cout<<a.Data[j]->j<<std::endl; if((a.Data.at(j)->j==i)) { temp=new Ttriplet(a.getj(j),a.geti(j),a.Data[j]->s); result.Data.push_back(temp); result.size++; } // } } return(result); } else { mem_limite l(28); throw(l); } }
Merci !![]()
Partager