对于课程,我必须为稀疏矩阵编写自己的线性方程求解器。对于稀疏矩阵,我可以自由使用任何类型的数据结构,并且我必须实现几个解决方案,包括共轭梯度。
我想知道是否有一种著名的方法来存储稀疏矩阵,使得与向量的乘法相对较快。
现在我的稀疏矩阵基本上实现了一个包装std::map< std::pair<int, int>, double>
来存储数据,如果有的话。这将矩阵的乘法从向量转换为 O(n²) 复杂度到 O(n²log(n)),因为我必须对每个矩阵元素执行查找。我研究了耶鲁稀疏矩阵格式,似乎元素的检索也在 O(log(n)) 中,所以我不确定它是否会更快。
作为参考,我有一个 800x800 矩阵,其中填充了 5000 个条目。用共轭梯度法求解这样一个系统大约需要 450 秒。
您认为使用另一种数据结构可以更快地做到这一点吗?
谢谢!