主题:关于快速转置矩阵的思想的这个程序不懂,请教!
矩阵快速转置思想:先确定矩阵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后面又是什么意思,能帮忙看看吗?谢谢了!!!
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后面又是什么意思,能帮忙看看吗?谢谢了!!!