稀疏矩阵相乘——三元组稀疏矩阵

本文介绍了一种稀疏矩阵相乘的方法,通过定义特定结构体表示稀疏矩阵,并实现了相应函数进行矩阵运算。同时提供了完整的代码示例及测试数据。

请编写并测试一个稀疏矩阵相乘的函数

matrix sparse_matrix_mul(const matrix&m1, constmatrix& m2)

其中matrix为一个描述稀疏矩阵的结构体:

struct matrix

{

float* _elements; //矩阵中所有元素的数组(按列优先的顺序)

int* _colheads; //每列的开始元素在_elements数组中的id

int* _colids; //_elements中每个元素在对应列中的行号

int _rows; //行数

int _cols; //列数

};

例如矩阵

0 1 0

2 4 5

3 0 0

对应结构中各数组为

_elements:{2,3,1,4,5}

_colheads:{0,2,4}

_colids:{1,2,0,1,1}.

请提交一个完整的可编译的程序和测试数据。

提示:请尽可能优化代码的时空间效率,并处理异常情况。

 

 

 

解决这道题:

我的思路是直接把上述结构体对应转换为矩阵相对应的位置(譬如,元素2对应矩阵[1][0]),然后直接运用矩阵公式计算,得到的结果保存为矩阵,然后再转换为该结构体,最后得出结果。其中应该可以实现的是:不需要把得到的结果保存为矩阵,而是可以直接计算然后转换到该结构体中,这样就不需要经过矩阵保存的步骤,节省了空间。

具体如何从结构体转换对应到矩阵的位置?这个就是该道题最核心的部分。

从第三个参数colids可以看到,每一个值对应一个元素,每个值代表的是行数。假如我要第一行的所有数组,那么就可以直接从colids数值看到,然后根据位置得到elements对应位置的值2,4,5是

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值