【问题标题】:graphs representation : adjacency list vs matrix图表示:邻接表与矩阵
【发布时间】:2011-10-01 07:44:20
【问题描述】:

我正在准备一次编程面试,并在图表上刷新了我的想法。我想知道以下几点:在我见过的所有地方,假设邻接列表比大型稀疏图的邻接矩阵更节省内存,因此在这种情况下应该是首选。此外,计算一个节点的出边数需要矩阵中的 O(N) 而列表中的 O(1) 以及列表中 O(num 个相邻节点) 中的相邻节点,而不是矩阵的 O(N)。
这些地方包括 Cormen 等人的书,或 StackOverFlow:Size of a graph using adjacency list versus adjacency matrix? 或 Wikipedia。

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

谢谢!

【问题讨论】:

    标签: graph adjacency-list adjacency-matrix


    【解决方案1】:

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

    例如,要获得两跳的邻近矩阵,您只需 square the matrix。我已经成功地用 Wikipedia link structure 的稀疏矩阵表示在适度的 CPU 时间内完成了这项工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多