邻接列表表示所需的内存如何是O(V + E)?

时间:2013-10-17 10:28:35

标签: memory-management time-complexity graph-algorithm

该声明如何有效?

“对于有向图和无向图,邻接列表表示具有理想的属性,它需要的内存量是O(V + E)。”

来源:算法介绍,cormen。

2 个答案:

答案 0 :(得分:15)

假设您将邻接列表存储在数组中,即

edges[v] represents a list of edges outgoing from v

为了测量空间复杂度,首先要注意数组中有完整的V条记录,每个顶点有一条记录。所以你使用O(V)内存来存储空列表。

接下来,请注意,如果指向图形,则每个边缘在这些列表的数组中只出现一次。

如果图表是无向的,则每个边缘在这些列表的数组中恰好出现两次。

在这两种情况下,整个数组中的条目数最多为2 * E = O(E)

将它们放在一起,我们发现内存总数受O(V + E)限制,与O(max(V, E))相同。

当且仅当图表是一组称为forrest的不相交树时,术语V才超过E

答案 1 :(得分:0)

我认为你可以这样想,如果你有10个顶点和30个边,那么让v和E代表存储每个顶点和边缘所需的存储空间。

  

10(V + E)< =(10V + 30E)LT; = 30(V + E)

基于上面的等式,您可以得出结论它需要Ѳ(V + E)空间。