稀疏矩阵的快速转化

若有下面这样一个矩阵
00130
56700

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

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

转换后的 b:

 rowcolvalue
s[0]015
s[1]116
s[2]201
s[3]217
s[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]++;

		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值