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