我正在学习用C ++实现图形,因此我阅读Wikipedia entry并发现有两种常用方法:邻接列表和邻接矩阵。我理解邻接列表和邻接矩阵之间的空间权衡。
我有三个问题
1)除了上面列出的两种方法之外还有其他方法来实现图形吗?
2)使用不同的数据结构有什么区别???链表VS矢量VS地图
3)以下段落在文章
中的含义是什么邻接列表和邻接之间的另一个显着差异 矩阵是他们执行的操作的效率。在一个 邻接列表,可列出每个顶点的邻居 有效地,在时间上与顶点的程度成比例。在一个 邻接矩阵,此操作需要与数字成比例的时间 图中的顶点,可能明显高于 学位。另一方面,邻接矩阵允许测试是否 两个顶点在恒定时间内彼此相邻;该 邻接列表支持此操作的速度较慢。
efficiency of the operations they perform
指的是什么?什么类型的操作???
two vertices are adjacent to each other in constant time
的意思是什么,知道两个顶点是否相邻是否有任何实际用法?
答案 0 :(得分:2)
listS
消耗更多内存而不是随机访问,但元素的句柄(迭代器)在插入和删除时保持有效; vectorS
是内存有效的随机访问,但无效的句柄(迭代器)在插入和删除时失效; mapS
通常消耗更多内存,不会慢速迭代,句柄(迭代器)通常在插入和删除时保持有效;查找子节点可以非常快。这实际上是这些容器之间的一般差异,而不是特定于图表。 two vertices are adjacent to each other
只意味着两个节点之间存在直接边缘。在恒定时间内执行此操作意味着操作独立于每个节点具有多少邻居。实际目的去:是的,吨数。您可能想知道某个城市是否通过直接街道与另一个城市相连。您可能想知道两个顶点在折叠之前是否有边缘等。
在您谈论C ++时,我强烈建议您查看一些优秀的图表库,例如Boost.Graph或Lemon。