我有一个大型稀疏图,我将其表示为邻接矩阵(100k x 100k 或更大),存储为边数组。具有(非稀疏)4 x 4 矩阵的示例:
0 7
4 0
example_array = [ [7,1,2], [4,2,1] ]
例如 [4,1,2] 表示从节点 1 到节点 2 有一条有向边,其值/权重为 4。在矩阵术语中,这本质上是 [值、行、列]。
此外,这个“边数组”将按第一个元素排序。在上面的例子中,经过排序,数组变成了,
example_array = [ [4,2,1], [7,1,2] ]
问题
对于某个值i
,需要在这个排序的“边数组”中找到第二个值等于 的所有元素i
。即找到j
这样的example_array[j][1] = i
。
我对此的初步实现是简单地迭代数组中的所有元素,将每个元素的第二个值与i
. 这在计算上是昂贵的,因为可能仍然有很多(例如 500k)元素需要循环。
问题
有没有更有效的方法来做到这一点?我不介意使用矩阵/图形的不同表示。我正在用 C 写这个。
附加信息
这本质上是找到一个节点的所有邻居i
,以及它们的边权重。即从边列表中查找i
到另一个节点的所有有向边。