我在幂迭代算法中使用了稀疏矩阵的耶鲁表示,一切都进行得很快。
但是,现在我有了一个问题,我的教授会把稀疏矩阵发送到一个无序的数据文件中,因为这个矩阵是对称的,所以只有一对索引会出现。
问题是,在我的实现中,我需要按顺序插入元素。
我试着读了一些东西,然后插入到我的稀疏矩阵中:
1)使用稠密矩阵。
2)使用另一个稀疏矩阵实现,我尝试使用std::map。
3)优先级队列,我制作了一个priority_queues数组。我在priority_queuei中插入元素i,j,所以当我弹出priority_queuei时,我取了行i中最低的j-索引。
但是我需要一些非常快和内存效率很高的东西,因为我将使用的最大矩阵大约是100 kx100k,而我所做的尝试非常慢,几乎是幂迭代本身的200倍。
有什么建议吗?对不起,英语不好:
发布于 2013-10-26 08:09:53
许多稀疏加载程序的工作方式是使用中间纯三元组结构。也就是说,不管文件是什么样子的,都可以加载到类似于vector< tuple< row, column, value> >的东西中。
然后就可以构建稀疏的结构了。原因恰恰是你遇到了什么。稀疏矩阵结构可能有约束,比如您需要知道每一行/列中的元素数,或者输入需要排序等等。您可以将您的三元组数组按需要进行调整(即通过排序)。
这也使得解决你的对称困境变得微不足道。对于源文件中的每一个三元组,都要将(row, column, value)和(column, row, value)插入到中间结构中。
另一个选择是简单地编写一个脚本来对您的教授的文件进行排序。
在稀疏世界中,重要的是元素的数量(非零),而不是矩阵的维数。100k-by-100k是一个毫无意义的信息。例如,整个矩阵可能完全是空的。
https://stackoverflow.com/questions/19602402
复制相似问题