我知道如何使用链表或矩阵实现图表。但我想知道何时使用Linked List&何时使用矩阵进行图形表示?
答案 0 :(得分:4)
通常,当您的图表为dense时。使用矩阵是一个好主意,因为'损失'未使用的内存和不需要的读取被忽略。
如果你想快速了解边是否存在,或者你想在图上预先形成矩阵运算,你通常也会使用矩阵[例如Page Rank](*)
如果要在阅读时使用每个顶点的所有边,通常会优先使用链表[例如:在BFS上]。
(*)请注意,幕后的页面排名通常使用链表,因为图表非常稀疏,但我们将其视为" sparsed矩阵" ...
答案 1 :(得分:4)
V =图中的顶点数
支持Matrix的要点:
1.您可以在恒定时间内获取边缘(找出两个顶点之间是否存在边缘),而在使用邻接列表时,它需要O(度(顶点))时间。
如果图表密集,矩阵就很好。否则会浪费空间,因为它使用O(V * V)空间。
赞成邻接名单的要点:
1.如果使用邻接列表,则需要O(V)时间来迭代获取顶点的邻居,而需要O(度(顶点))。
2.邻接列表不会占用太多空间。
答案 2 :(得分:1)
这两种实现在内存消耗和复杂性方面存在两个根本区别。
答案 3 :(得分:0)
这取决于您的问题和需求。当你需要速度并且存储空间很大时使用矩阵(万一你的矩阵很大),如果需要节省空间,请使用链表来减少交易。
答案 4 :(得分:0)
你总是使用矩阵。
存在用于在存储器中表示矩阵的各种技术,包括使用链表来表示稀疏矩阵的各种方式。任何关于矩阵计算的好书都会有很多表述和指导,以便何时使用它们;根据您的图表,可能是较不常见的表示之一是合适的。