Memory management 邻接列表表示法所需的内存如何为O(V+;E)?

Memory management 邻接列表表示法所需的内存如何为O(V+;E)?,memory-management,time-complexity,graph-algorithm,Memory Management,Time Complexity,Graph Algorithm,这句话怎么有效 对于有向图和无向图,邻接列表表示法都有一个可取的特性,即它所需的内存量为O(V+E) 来源:算法简介,cormen.假设您正在数组中存储邻接列表,即 edges[v] represents a list of edges outgoing from v 为了测量空间复杂度,首先请注意数组中正好有V记录,每个顶点一个记录。因此,您正在使用O(V)内存来存储空列表 接下来,请注意,如果图形是定向的,则每个边在这些列表的数组中只显示一次 如果图形是无向的,则每个边在这些列表的数组中正

这句话怎么有效

对于有向图和无向图,邻接列表表示法都有一个可取的特性,即它所需的内存量为O(V+E)


来源:算法简介,cormen.

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

edges[v] represents a list of edges outgoing from v
为了测量空间复杂度,首先请注意数组中正好有
V
记录,每个顶点一个记录。因此,您正在使用
O(V)
内存来存储空列表

接下来,请注意,如果图形是定向的,则每个边在这些列表的数组中只显示一次

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

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

把它放在一起,我们看到内存的总数由
O(V+E)
限定,这与
O(max(V,E))
相同


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

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

10(V+E)O(V+E)=O(max(V,E)),因为如果E>V,因为O是一个上界,我们可以“四舍五入”V并这样说:O(V+E)=O(E+E)。这产生O(2E),从而产生O(E)。如果V>E,交换变量,那么O(V+E)=O(max(V,E))的原因应该很明显。我发现前者的语法更容易解析,后者的语义更容易理解。