1、转置
1.1第一种想法
1.1.1思想:每次从原矩阵中复制一列到新的矩阵中。1)设矩阵列数为cols,对矩阵三元组扫描cols次;2)第k次扫描寻找所有列号为k的项:将其行号变列号、列号变行号,顺次存于转置矩阵三元组中。
1.1.2代码
void SparseMatrix::Transpose(SparseMatrix &b) {
b.Rows=Rows;b.Cols=Cols;b.Terms=Terms;
if(Terms==0)
return ;
int CurrentB=0;
int i,k;
for(k=0;k<Cols;k++){
for(i=0;i<Terms;i++){
if(smArray[i].col==k){
b.smArray[CurrentB].row=k;
b.smArray[CurrentB].col=smArray[i].row;
b.smArray[CurrentB].value=smArray[i].value;
CurrentB++;
}
}
}
}
1.1.3评价:算法的时间代价为O(cols*terms)。如果非零元素变多时,算法的时间代价也会变大。