为什么BFS/DFS的时间复杂度不仅仅是O(E)而不是O(E + V)?

San*_*ndy 11 graph breadth-first-search time-complexity depth-first-search

我知道堆栈溢出中存在类似的问题,其中一个人问过,为什么BFS/DFS的时间复杂度不仅仅是O(V).

给出的适当答案是在完整图的情况下E可以与V ^ 2一样大,因此在时间复杂度中包括E是有效的.

但是,如果V不能大于E + 1.那么,在那种情况下,时间复杂度中没有V,应该有效吗?

axi*_*iom 10

如果它被赋予的是E = kV + c,对于一些真正的常量kc以后,
O(E + V) = O(kV + c + V) = O(V) = O(E)和你的说法是正确的.

树木就是一个例子.

然而,总的来说,E = O(V^2)我们不能做得更好O(V^2).

为什么不总是只写O(E)?
请注意,可能存在图中根本没有边缘的情况(即O(E) ~ O(1)).即使对于这种情况,我们也要去每个顶点(O(V)),我们无法及时完成O(1).

因此,O(E)一般而言,只写作不会.

  • 当你无法通过边找到它们时,你将如何“到达每个顶点”?这个答案是不正确的。 (3认同)
  • @Sandy 仅当满足上述条件时。在一般情况下,可能没有边,但你仍然必须去每个顶点,因此我们写成`O(V + E)`。 (2认同)