连接无向图的组件

时间:2015-02-21 11:08:36

标签: algorithm graph-algorithm

假设我有一个带有顶点v1 ... vn和边的无向图G.现在它是邻接列表表示。

对于每个时刻,a具有此时“活动”的一些顶点子集作为输入。我需要在这个时间点找到这个顶点子集中的所有连通分量。

现在我已经使用union-find数据结构实现了这个:

initialize sets for every active vertex so that every vertex has itself as "representative" (also called "parent")

for every active vertex v
   for all neighbours of v in G v_neighbour
      if v_neighbour is active
          union set of v and set of v_neighbour

它应该可行,但我想知道是否有更优化的方法呢? 那算法的运行时间是多少? O(N * M)?

2 个答案:

答案 0 :(得分:3)

在连接的组件耗尽后重新启动的BFSDFS可以轻松找到O(V+E)

中无向图中的所有已连接组件
connectedComponentNumber= 0
While there is a node that was not discovered yet:
    connectedComponentNumber= connectedComponentNumber+ 1
    v = some vertex that was not discovered yet
    vertices = BFS(v) //all vertices connected to v
    set all nodes in vertices as belong to connected component connectedComponentNumber

答案 1 :(得分:0)

我想在上面的回复中添加一件事,如果你在邻接列表表示中找到活动顶点,它将增加V个步骤,因此运行时间将增加到O(V ^ 3)。这可能需要恒定的时间如果我们为此维护另一个数据结构。