【问题标题】:The running time complexity of BFS for unconnected and indirected graph连通图和无向图的 BFS 运行时间复杂度
【发布时间】:2018-11-28 05:25:30
【问题描述】:

我知道对于连接的间接图,BFS 的运行时间是 O(V+E)。但是如果图没有连接呢?然后我假设我们需要先运行一个循环来检查每个顶点的条件(访问与否)。

这是我想法的简单 qseudocode。假设每个顶点都有白色作为开始时未访问的标志。访问时为灰色,拍摄时为黑色。

//无连接间接图的BFS

BFS(G):   
for each v in G:
    if (v.color is white) do:
        v.color = gray;
        enqueue(Q, v);
        while Q is not empty do:
            u = dequeue(Q);
            while s is adjacent to u has color white
                  s.color = gray;
                  enqueue(Q,s);
            u.color = black;

这是我对未连接间接图的 qseudocode 的猜测。我很难弄清楚运行时间。我认为它仍然是 O(V + E),但我无法真正给出合理的解释。

请问如何澄清这个qseudocode的运行时间?或者如果我的qseudocode效率低,请告诉我一个有效的。

谢谢!

【问题讨论】:

    标签: algorithm graph-algorithm breadth-first-search


    【解决方案1】:

    是的,时间复杂度还是O(V + E)

    只需检查每个循环及其可能运行的最大次数。

    外部循环将有O(V) 步骤。

    循环检查队列也将有O(V) 步骤,因为图中的每个节点只被插入队列一次(当它被涂成白色时)。

    棘手的部分是检查u 的相邻节点的第三个循环。请注意,我们已经确定u 将仅代表图中的每个节点一次。如果您使用邻接表表示图形,此步骤将花费O(E) 时间。

    总时间复杂度:O(V + E)

    【讨论】:

      【解决方案2】:

      是的,你是对的。外部循环最多迭代所有顶点一次,所以在O(|V|) 中。内部是连接图的 BFS,即O(|V|+|E|)。然后,总体而言,它保持在O(|V|+|E|),因为您最多查看每个顶点和每条边O(1) 次。

      作为更一般的解释,在图中,您有线性数量的顶点,但可以有二次数量的边,请考虑complete graph。因此,如果图表断开连接,您只需遍历较少的边。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多