稀疏矩阵的快速转化

来源:互联网 发布:重庆企业seo服务 编辑:程序博客网 时间:2024/04/28 02:49
若有下面这样一个矩阵
0013056700

如果按照上篇所用的数据结构存储如下 a:

 rowcolvalues[0]021s[1]033s[2]105s[3]116s[4]127

转换后的 b:

 rowcolvalues[0]015s[1]116s[2]201s[3]217s[4]303

设一个变rowsize[ ](转化后的)

rowsize[0]=0,rowsize[1]=1,rowsize[2]=2,rowsize[3]=1,rowsize[4]=1

rowstart[i]=rowstart[i-1]+rowsize[i-1];

rowstart[0]=0;rowstart[1]=1,rowstart[2]=2,rowstart[3]=4,rowstart[4]=5;

由上面两个表我们观察可以看出。a.s[0]放在b中为b.s[2].此时2正是a.s[0]所在列转化成行的开始位置rowstart[2]=2;

此时b.s[2].row=a.s[0].col;b.s[2].col=a.s[0].row;

开始位置便是在B中的位置,然后把开始位置后移一位。

具体代码如下:

 

spareMatrix fastTranspose(){    spareMatrix b(row ,col,terms);if(terms>0){int * rowsize=new int[col];int * start=new int[col];fill(rowsize,rowsize+col,0);for(int i=0;i<term;i++)rowsize[a.sarray[i].col]++;rowstart=0;for(int i=0;i<col;i++)rowsize[i]=rowsize[i-1]+rowstart[i-1];for(int i=0;i<terms;i++){int j=rowstart[a.sarray[i].col];b.sarray[j].row=a.sarray[i].col;b.sarray[j].col=a.sarray[i].row;b.sarray[j].value=a.sarray[i].value;          rowstart[a.sarray[i].col]++;}}}


 

原创粉丝点击