【发布时间】:2012-09-27 16:23:29
【问题描述】:
我有一个大型稀疏图,我将其表示为邻接矩阵(100k x 100k 或更大),存储为边数组。具有(非稀疏)4 x 4 矩阵的示例:
0 7
4 0
example_array = [ [7,1,2], [4,2,1] ]
例如[4,1,2] 表示从节点 1 到节点 2 有一条有向边,其值/权重为 4。在矩阵术语中,这本质上是 [ value, row, column ]。
此外,这个“边数组”将按第一个元素排序。在上面的例子中,经过排序,数组变成了,
example_array = [ [4,2,1], [7,1,2] ]
问题
对于某个值i,需要在这个排序的“边数组”中找到第二个值等于i的所有元素。即找到j,这样example_array[j][1] = i。
我对此的初步实现是简单地迭代数组中的所有元素,将每个元素的第二个值与i 进行比较。这在计算上很昂贵,因为可能仍有很多(例如 500k)元素需要循环。
问题
有没有更有效的方法来做到这一点?我不介意使用矩阵/图形的不同表示。我是用 C 写的。
其他信息
这实际上是查找节点i 的所有邻居及其边缘权重。即从边列表中查找从i 到另一个节点的所有有向边。
【问题讨论】:
-
这是一个无向图吗?每条边是否在 [4,2,1] 和 [4,1,2] 中表示两次?
-
@ajon - 定向和加权。
标签: c sparse-matrix