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

问题描述:

在示例问题中,给出加权图G =(V,E)的MST T.问题是,如果一个新的顶点v及其所有边被添加到图中,什么是o(| V | log | V |)算法来计算这个新的G *的新MST =(VU v, E *)。在给定旧MST和新顶点+边缘的情况下查找最小生成树

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

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 |)

我该怎么做?

+2

为什么要从一个循环的一条腿上移除所有边缘?只删除最大重量的一个边缘。 – phs

+0

提示:修改[Borůvka的算法](http://en.wikipedia.org/wiki/Boruvka%27s_algorithm)。 – Per

看到最终你知道你的MST将在已经在MST中的边缘和添加的新边缘之间。

因此,添加所有新的边缘,你会得到一个图形。对此做任何正常的MST算法(Boruvka,Kruskal,Prims),你将得到你的解决方案。由于其中的边是=(V-2)最初(V-1)加上= 2V-1,算法将实现你所需要的时间限制。

你也可以在线性时间内做到这点(如果新边的数量(比如k)比n小得多)。我们知道新的MST应该覆盖新的顶点。所以至少必须添加一个新的边缘。因此,必须将最小值的边添加到MST中(可以证明这一点);它可能发生不止一个新的边缘改变。 所以从升序排序新边缘 将第一个边添加到图中;现在我们有一个新的循环。执行图遍历查找循环并从该循环中删除具有最大值的边。 现在添加其他新边缘并重复该过程。

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