这里有一些假代码(无视我的风格)
从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)。有谁可以帮我解释一下?
答案 0 :(得分:11)
E不是每个顶点相邻的边数 - 实际上是图中边的总数。以这种方式定义它很有用,因为在每个顶点上不一定有相同数量的边。
由于在DFS结束时每个边缘都被访问过一次,因此从该部分获得O(E)复杂度。然后添加O(V)以访问每个顶点一次并获得总计O(V + E)。