图的邻接表表示的空间复杂度

时间:2015-11-03 12:33:15

标签: algorithm graph

我读到here对于无向图,当表示为邻接列表时,空间复杂度为O(V + E),其中VE分别是顶点和边的数量。< / p>

我的分析是,对于完全连接的图表,列表中的每个条目都包含|V|-1个节点,那么我们总共有|V|个顶点,因此空间复杂度似乎为O(|V|*|V-1|)这似乎O(|V|^2)我在这里缺少什么?

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 |)。

希望这会有所帮助