我可以在很多书中看到图表的最坏情况内存需求是O(V)。但是,如果我没有弄错,图表通常表示为邻接矩阵,而不是节点的创建(如链表/树)。因此,对于包含5个顶点的图形,我需要5x5矩阵,即O(V ^ 2)。他们为什么说它是O(V)?
我错过了什么地方吗?对不起,如果问题太天真了。
答案 0 :(得分:6)
表示图表的三种主要方式是:
由于我们说的是最坏的情况,所有这些都减少到Θ(| V |²),因为这是图中最大边数。
我猜你误读了这本书。他们可能并不是在讨论存储图结构本身所需的空间,而是讨论某些图算法所需的额外空间的数量。
答案 1 :(得分:2)
如果你说的是真的,他们可能会指代其他方式来表示图形,而不是使用邻接矩阵,并且可能会进行边缘密度假设。一种方法是,对于每个顶点,只存储指向其邻居的指针/引用列表(称为邻接列表)。这将是O(|V| + |E|)
。 如果我们假设|E| ~ |V|
,这是我们有时会看到的假设,那么我们就有O(|V|)
个空格。但请注意,在最坏的情况下|E| ~ |V|^2
,所以即使这种表示图表的方法在最坏情况中也是O(|V|^2)
。
看,这很简单;在最坏的情况下|E| ~ |V|^2
没有逃避这一事实。通常情况下,E
的表示可能不会在最坏的情况下不 O(|V|^2)
。
但是,有一个确切的引用可以很好。这是重要的。我们不想发现自己撕裂了对正确陈述的误解。