请编写并测试一个稀疏矩阵相乘的函数
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是

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

被折叠的 条评论
为什么被折叠?



