最坏的情况下运行时间BFS

时间:2015-04-15 12:19:28

标签: time-complexity breadth-first-search

我对BFS的复杂性感到困惑。 Wikipédia说:“时间复杂度可以表示为O(| V | + | E |),因为在最坏的情况下将探索每个顶点和每个边缘。”

set start vertex to visited

load it into queue

while queue not empty

    for each edge incident to vertex

         if its not visited

             load into queue

             mark vertex

对我来说最糟糕的情况是:每个顶点都连接到所有顶点 因此,while循环将完成V次,for循环将完成E次。最糟糕的情况是0(VE)。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

BFS的目的是访问所有节点一次。没有顶点第二次进入队列(这解释了| V |)。 | E |总和来自于假设检查事件边缘与访问相比没有任何成本。所以是的,对于一个完整的图形(所有顶点都连接到所有其他顶点),将检查VE边缘......但是检查它们不会花费访问。

答案 1 :(得分:0)

BFS的时间复杂度为O(| V | + | E |)。 V是总顶点数,E是总边数。您可能会误认为E. E不是顶点u的邻居边缘。

我们可以按照以下方式实现。

对于顶点中的每个u

对于邻居(u)中的每个e

do something.