在给定旧MST和新顶点+边缘的情况下查找最小生成树

时间:2011-11-18 05:14:35

标签: algorithm graph-theory minimum-spanning-tree

在样本问题中,我给出了加权图G =(V,E)的MST T.问题是,如果要将新的顶点v及其所有边添加到图中,那么用什么o(| V | log | V |)算法来计算这个新G *的新MST =(VU v, E *)。

到目前为止我唯一的想法是:

add min( out(v) ) to T
for each edge e in out(v) do
  let u be the other vertex of e
  if there exists a lower weight path from v to u then
    remove all edges in that path from T
    add e to T

两个问题:

  1. 如何处理可能已断开连接的顶点
  2. 这绝对不是O(| V | log | V |)
  3. 我该怎么做?

2 个答案:

答案 0 :(得分:2)

您也可以在线性时间内完成(如果新边数(比如k)与n相比要少得多)。我们知道新的MST应该覆盖新的顶点。因此必须添加至少一个新边。因此必须将具有最小值的边添加到MST(您可以证明这一点);可能会发生多个新边缘的变化。 因此,按升序排序新边 将第一个添加到图表中;现在我们有了一个新的周期。执行图遍历查找循环并删除此循环中具有最大值的边。 现在添加其他新边缘并重复该过程。

复杂度是新添加边数(大致线性)的(n + m)倍。

答案 1 :(得分:0)

最后看到你知道你的MST将在MST的边缘之中并添加了新边

因此,添加所有新边将得到图形。做任何正常的MST算法(Boruvka,Kruskal,Prims)就可以得到你的解决方案。

由于这里的边是=(V-2)最初(V-1)加上= 2V-1,算法将达到你需要的时间限制。