0

我在幂迭代算法中使用了稀疏矩阵的耶鲁表示,一切顺利且快速。

但是,现在我遇到了一个问题,我的教授将在数据文件中无序发送稀疏矩阵,并且由于矩阵是对称的,因此只有一对索引存在。

问题是,在我的实现中,我需要按顺序插入元素。

我尝试阅读一些东西,然后插入我的稀疏矩阵:

1)使用密集矩阵。

2) 使用另一个稀疏矩阵实现,我尝试使用 std::map。

3)优先队列,我做了一个priority_queues数组。我在priority_queue[i]中插入元素i,j,所以当我弹出priority_queue[i]时,我取第i行的最低j-index。

但我需要一些真正快速且内存效率高的东西,因为我将使用的最大矩阵将是 100k x 100k,而且我所做的尝试非常慢,几乎比幂迭代本身慢 200 倍。

有什么建议么?对不起英语不好:(

4

1 回答 1

1

许多稀疏加载器的工作方式是使用中间纯三元组结构。即无论文件是什么样的,您都可以将其加载到vector< tuple< row, column, value> >.

然后,您从中构建稀疏结构。原因正是您遇到的问题。您的稀疏矩阵结构可能具有约束条件,例如您需要知道每行/列中的元素数量,或者需要对输入进行排序等。您可以将三元组数组调整为您需要的任何内容(即通过对其进行排序)。

这也使得解决对称困境变得微不足道。对于源文件中的每个三元组,您都将两者都插入(row, column, value)(column, row, value)中间结构中。

另一种选择是简单地编写一个脚本来对教授的文件进行排序。

仅供参考,在稀疏世界中,重要的是元素的数量(非零),而不是矩阵的维度。100k-by-100k是一条毫无意义的信息。例如,整个矩阵可能完全是空的。

于 2013-10-26T08:09:53.440 回答