每种数据结构用于存储最适合的图形边缘的应用程序是什么类型的?

时间:2013-12-14 01:41:09

标签: c++ data-structures graph

这是我正在进行的练习测试......不知道如何回答这个问题:

考虑用于在图中存储边(邻接矩阵,邻接列表,边列表)的三种数据结构。每种数据结构最适合哪种类型的应用程序?

如果我错了,请纠正我,但据我所知,邻接矩阵是表示图的效率最低的方法,因为二维数组中的元素代表不存在的边,其中只有另外两个数据结构包含表示存在边缘的元素,因此任何操作的遍历都较慢。如果这是真的那么为什么有人想要使用它?

对于邻接列表,它比邻接矩阵更有效,但仍包含冗余信息 - >如果边连接顶点i和j,则包含顶点i的顶点节点出现在顶点j的邻接列表中,同时包含顶点j的顶点节点出现在顶点i的邻接列表中。

并且...边缘列表是最有效的。

重申我的问题....如果边缘列表是最有效的表示,为什么你会想要使用其他两个中的一个呢?

任何帮助都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

你只谈空间效率。还有时间。如果您有顶点数,则矩阵只需要一条或几条指令来查找边值。你不能更快。它的实现和维护也非常简单。 (不管边缘数是多少,它都需要O(n ^ 2)进行初始化。但是有一个解决方法。)其他形式都涉及某种搜索。即使将邻接列表作为O(1)访问的哈希值进行处理,常量时间因子也远高于矩阵。边缘列表仅在处理边缘时才有意义,并且永远不需要根据其顶点查找边缘。