我读到here对于无向图,当表示为邻接列表时,空间复杂度为O(V + E)
,其中V
和E
分别是顶点和边的数量。< / p>
我的分析是,对于完全连接的图表,列表中的每个条目都包含|V|-1
个节点,那么我们总共有|V|
个顶点,因此空间复杂度似乎为O(|V|*|V-1|)
这似乎O(|V|^2)
我在这里缺少什么?
答案 0 :(得分:4)
对于完全连接的图,您的分析是正确的。但请注意,对于完全连接的图形,边缘E
的数量本身为O(V^2)
,因此空间复杂度的符号O(V+E)
也是正确的。
然而,邻接列表的真正优势在于它们可以为没有密集连接的图形节省空间。如果边数远小于V^2
,则邻接列表将采用O(V+E)
,不 O(V^2)
空格。
请注意,当您谈到O
- 符号时,通常会有三种类型的变量(或者,通常是输入数据)。首先是你正在研究的变量依赖;第二个是那些被认为是不变的变量;第三种是免费的#34;变量,您通常假设采用最坏情况值。例如,如果您谈论对N
整数数组进行排序,通常需要研究排序时间对N
的依赖性,因此N
属于第一类。您通常认为整数的大小是常量(也就是说,您假设比较是在O(1)
等中完成的),并且您通常认为特定的数组元素是&#34; free&#34;,也就是说,您研究特定数组元素的最差可能组合的运行时。但是,您可能希望从不同的角度研究相同的算法,这将导致复杂性的不同表达。
对于图算法,您当然可以考虑第一类顶点数V
和第三类顶点数,并研究给定{{1}的空间复杂度并且对于最坏情况的边数。那你确实得到了V
。但将O(V^2)
和V
视为第一种类型的变量通常也很有用,因此将复杂性表达式设为E
。
答案 1 :(得分:0)
数组的大小是| V |。 (| V |是节点数)。这些| V |列表中的每一个具有由deg(v)表示的度数。我们将所有这些加起来,然后应用握手引理。 ∑deg(v)= 2 | E |
因此,您有| V |。引用(对| V |列表)加上列表中的节点数(不得超过2 | E |) 。因此,邻接表的最坏情况空间(存储)复杂度为O(| V | +2 | E |)= O(| V | + | E |)。
希望这会有所帮助