图形数据结构的最坏情况记忆

时间:2013-06-22 04:20:56

标签: algorithm data-structures graph

我可以在很多书中看到图表的最坏情况内存需求是O(V)。但是,如果我没有弄错,图表通常表示为邻接矩阵,而不是节点的创建(如链表/树)。因此,对于包含5个顶点的图形,我需要5x5矩阵,即O(V ^ 2)。他们为什么说它是O(V)?

我错过了什么地方吗?对不起,如果问题太天真了。

2 个答案:

答案 0 :(得分:6)

表示图表的三种主要方式是:

  • 邻接矩阵 - Θ(| V |²)空间。
  • 邻接列表 - Θ(| V | + | E |)空格。
  • 具有指向彼此的节点对象/结构的集合 - 这基本上只是表示邻接列表的另一种方式。 Θ(| V | + | E |)。 (请记住,指针也需要内存。)

由于我们说的是最坏的情况,所有这些都减少到Θ(| V |²),因为这是图中最大边数。

我猜你误读了这本书。他们可能并不是在讨论存储图结构本身所需的空间,而是讨论某些图算法所需的额外空间的数量。

答案 1 :(得分:2)

如果你说的是真的,他们可能会指代其他方式来表示图形,而不是使用邻接矩阵,并且可能会进行边缘密度假设。一种方法是,对于每个顶点,只存储指向其邻居的指针/引用列表(称为邻接列表)。这将是O(|V| + |E|)如果我们假设|E| ~ |V|,这是我们有时会看到的假设,那么我们就有O(|V|)个空格。但请注意,在最坏的情况下|E| ~ |V|^2,所以即使这种表示图表的方法在最坏情况中也是O(|V|^2)

看,这很简单;在最坏的情况下|E| ~ |V|^2没有逃避这一事实。通常情况下,E的表示可能不会在最坏的情况下 O(|V|^2)

但是,有一个确切的引用可以很好。这是重要的。我们不想发现自己撕裂了对正确陈述的误解。