图表表示:邻接列表与矩阵

时间:2011-07-08 14:06:44

标签: graph adjacency-list adjacency-matrix

我正准备进行编码面试,并在图表上让我耳目一新。我想知道以下内容:在我看过的所有地方,假设邻接列表比大型稀疏图的邻接矩阵更有内存效率,因此在这种情况下应该是首选。此外,计算来自节点的输出边缘的数量需要矩阵中的O(N),而列表中的O(1),以及列表中的O(num相邻节点)中的相邻节点而不是O(N)表示矩阵 这些地方包括Cormen等人的书,或StackOverFlow:Size of a graph using adjacency list versus adjacency matrix?或维基百科。

但是,使用与压缩行存储表示类似的稀疏矩阵表示,内存要求仅为O(非零数)= O(边数),这与使用列表相同。节点的输出边数为O(1)(直接存储在CRS中),相邻节点可以列在O(num相邻节点)中。 为什么不讨论它?我是否应该假设CSR 矩阵表示的图形的邻接列表表示?或者说矩阵是内存密集型的缺点,因为它们不考虑稀疏矩阵表示?

谢谢!

1 个答案:

答案 0 :(得分:6)

并非每个人每天都使用稀疏矩阵表示(我恰好这样做:),所以我猜没有人想到它们。它们是邻接列表和邻接矩阵之间的中介,如果你选择正确的表示,其性能与第一个类似,并且对于某些图算法非常方便。

例如,要获得两跳的邻近矩阵,您只需square the matrix。我用适当的CPU时间用Wikipedia link structure的稀疏矩阵表示成功完成了这个。

相关问题