【发布时间】:2011-12-21 08:59:55
【问题描述】:
我知道如何使用链表或矩阵来实现图形。但我想知道何时使用链表以及何时使用矩阵进行图形表示?
【问题讨论】:
-
链表与矩阵处于不同的抽象级别。矩阵是数字的 2D 索引集合,因此您应该将“可迭代的、非索引的边集合”与邻接矩阵或链表与 2D 边数组进行比较,并忽略所有其他可能表示。
标签: algorithm data-structures graph
我知道如何使用链表或矩阵来实现图形。但我想知道何时使用链表以及何时使用矩阵进行图形表示?
【问题讨论】:
标签: algorithm data-structures graph
V = 图中的顶点数
支持矩阵的点:
1.您可以在恒定时间内访问一条边(找出两个顶点之间是否存在一条边),而在使用邻接列表时,它需要 O(degree(vertex)) 时间。
2. 如果你的图很密集,矩阵是好的。否则会浪费空间,因为它使用 O(V*V) 空间。
有利于邻接表的点:
1. 迭代获取顶点的邻居需要 O(V) 时间,而如果使用邻接列表则需要 O(degree(Vertex))。
2. 邻接表不占空间。
【讨论】:
这两种实现在内存消耗和复杂性方面有两个根本区别。
【讨论】:
这取决于您的问题和需求。当你需要速度并且有大存储空间时使用矩阵(如果你的矩阵很大),如果你需要节省空间,则使用链表,权衡有点慢。
【讨论】:
O(|V|+|E|),其中使用矩阵是 O(|V|^2),这会使矩阵求解速度变慢。
你总是使用矩阵。
内存中的矩阵表示有多种技术,包括使用链表表示稀疏矩阵的各种方法。任何关于矩阵计算的好书都会有很多关于何时使用它们的表示和指导;根据您的图表,其中一种不太常见的表示可能是合适的。
【讨论】: