使用链表和图表的图表表示矩阵

时间:2011-12-21 08:59:55

标签: algorithm data-structures graph

我知道如何使用链表或矩阵实现图表。但我想知道何时使用Linked List&何时使用矩阵进行图形表示?

5 个答案:

答案 0 :(得分:4)

通常,当您的图表为dense时。使用矩阵是一个好主意,因为'损失'未使用的内存和不需要的读取被忽略。
如果你想快速了解边是否存在,或者你想在图上预先形成矩阵运算,你通常也会使用矩阵[例如Page Rank](*)

如果要在阅读时使用每个顶点的所有边,通常会优先使用链表[例如:在BFS上]。

(*)请注意,幕后的页面排名通常使用链表,因为图表非常稀疏,但我们将其视为" sparsed矩阵" ...

答案 1 :(得分:4)

V =图中的顶点数

支持Matrix的要点:
1.您可以在恒定时间内获取边缘(找出两个顶点之间是否存在边缘),而在使用邻接列表时,它需要O(度(顶点))时间。
如果图表密集,矩阵就很好。否则会浪费空间,因为它使用O(V * V)空间。

赞成邻接名单的要点:
1.如果使用邻接列表,则需要O(V)时间来迭代获取顶点的邻居,而需要O(度(顶点))。 2.邻接列表不会占用太多空间。

答案 2 :(得分:1)

这两种实现在内存消耗和复杂性方面存在两个根本区别。

  1. 矩阵表示允许随机访问到元素常量 时间插入和删除元素,但(通常)消耗 更多的空间。
  2. 另一方面,链接列表更强烈内存友好 对元素和邻居的访问可以采用线性时间

答案 3 :(得分:0)

这取决于您的问题和需求。当你需要速度并且存储空间很大时使用矩阵(万一你的矩阵很大),如果需要节省空间,请使用链表来减少交易。

答案 4 :(得分:0)

你总是使用矩阵。

存在用于在存储器中表示矩阵的各种技术,包括使用链表来表示稀疏矩阵的各种方式。任何关于矩阵计算的好书都会有很多表述和指导,以便何时使用它们;根据您的图表,可能是较不常见的表示之一是合适的。