为什么BFS O(V + E)的复杂性代替O(V * E)?

时间:2013-09-04 03:12:37

标签: algorithm complexity-theory breadth-first-search

这里有一些假代码(无视我的风格)

从v1开始(入队):

function BFS(queue Q)
  v2 = dequeue Q
  enqueue all unvisited connected nodes of v2 into Q
  BFS(Q)
end // maybe minor problems here

由于图中有V个顶点,并且这些V顶点连接到E边,并且访问连接节点(相当于访问连接边)是在内部循环中(外部循环是递归本身),它在我看来,复杂性应该是O(V * E)而不是O(V + E)。有谁可以帮我解释一下?

1 个答案:

答案 0 :(得分:11)

E不是每个顶点相邻的边数 - 实际上是图中边的总数。以这种方式定义它很有用,因为在每个顶点上不一定有相同数量的边。

由于在DFS结束时每个边缘都被访问过一次,因此从该部分获得O(E)复杂度。然后添加O(V)以访问每个顶点一次并获得总计O(V + E)。