★稀疏矩阵的快速转置算法:
template
<class T>
SpreMatrix
<T>::FastTranspos( )
{
  
int *rowSize=new int[Cols];//建立辅助数组,记录原数组每列(即新数组每行)的元素个数
  int *rowStart=new int[Cols];// 建立辅助数组,记录新数组非零元素在三元组表中的位置
  SpreMatrix<T>  b(Cols,Rows);
  b.Rows
= Cols;  b. Cols = Rows; b.Terms= Terms;
  
if(Terms>0)
  
{
     
for(int i=0;i<Cols; i++)  rowSize[i]=0;
       
for(int i=0;i<Terms; i++)  rowSize[smArray[i].col]++;// smArray[i]为原数组三元组表数组
rowStart[0]=0;//求出非零元素(每行第一个)在新数组三元组表中的位置
for(int i=1; i <Cols; i++)
  rowStart[i]
= rowStart[i-1]+ rowSize[i-1];
for(int i=0;i<Terms; i++)//填写三元组表

  
int j=rowStart[smArray[i].col];
  b.smArrary[j].row
= smArrary[i].col;
  b. smArrary[j].col
= smArrary[i].row;
  b. smArrary[j].value
= smArrary[i].value;
  rowStart[smArrary[i].col]
++;//同行(新数组中)的下一个元素位置
}

     }

delete[] rowSize; delete[] rowStart;
return b;
}

posted on 2005-08-26 21:56  powerlc  阅读(419)  评论(0编辑  收藏  举报