回 帖 发 新 帖 刷新版面

主题:关于快速转置矩阵的思想的这个程序不懂,请教!

矩阵快速转置思想:先确定矩阵A的每一列(B的每一行)的第一个非零元素在T.data中的位置,然后对M.data中的三元组依次做转置,并放到T.data中的恰当位置.为了确定矩阵A的每一列的第一个元素在T.data中的位置,需要先求得矩阵A的每一列的非零元素的个数.为此,需要设置两个一维数组num和cpot.  num[col]的值是A中第col列的非零元素的个数,cpot[col]的值是第col列的第一个非零元素在T.data中的位置.
cpot[0]=0
cpot[col]=cpot[col-1]+num[col-1] (1<=col<=M.colnum-1)

算法如下:
trans2(table *M,table *T)
{
  int i,q,col,num[7],cpot[7];
  T->rownum=M->colnum;
  T->colnum=M->rownum;
  T->nznum=M->nznum;
  for(i=0;i<M->colnum;i++) num[i]=0;
  for(i=0;i<M->nznum;i++) num[M->data[i].j]++;
  cpot[0]=0;
  for(i=1;i<M->colnum;i++) cpot[i]=cpot[i-1]+num[i-1];
  for(i=0;i<M->nznum;i++)
  { col=M->data[i].j;
    q=cpot[col];
    T->data[q].i=M->data[i].j;
    T->data[q].j=M->data[j].i;
    T->data[q].e=M->data[i].e;
    cpot[col]++;
  }
}

这里的  for(i=0;i<M->colnum;i++) num[i]=0;
      for(i=0;i<M->nznum;i++) num[M->data[i].j]++;
是什么意思啊?为什么第一个for把num[i]全赋值为0了,第二个for后面又是什么意思,能帮忙看看吗?谢谢了!!!

回复列表 (共1个回复)

沙发

for(i=0;i<M->colnum;i++) num[i]=0;这句没有什么特别的意思,只是把数组清零(初始化)。
第二个for就是计算出A中每列的非零个数放到NUM数组里的相应单元里。

我来回复

您尚未登录,请登录后再回复。点此登录或注册