我对以下问题有可能的解决方案,但不确定是否正确:
假设我们已经为加权的无向图T
找到了最小生成树G = (V,E)
。我们希望能够有效地更新T
G
稍微改变一下。
将边添加到G
以生成新图表。提供一个使用T
的算法,在O(|V|)
时间内为新图表找到最小生成树。
我的算法:
for each vertex do
if smallest edge not in T then
replace this edge with existing edge in T
break
end if
end for
我在编写伪代码方面没有太多经验,因此我的算法可能过度简化或不正确。如果我错了,请纠正我。谢谢!
答案 0 :(得分:3)
不知道你的算法是否正确,但它至少看起来不是O(|V|)
,因为得到的最小边缘不在T"无法在O(1)
中完成顶点。
将边e=(u, v)
添加到MST T
的最常用方法是:
T
中从u
到v
运行BFS,以检测该路径中具有最大值的边缘。 (O(|V|)
)O(1)
)。此解决方案背后的基本原理是,只需将边添加到T
中就可以创建一个周期,并且要恢复MST属性,您必须从该周期中删除具有最大值的边。
答案 1 :(得分:0)
是的,您的算法似乎是正确的。我会修改你的伪代码以澄清"如果最小的事件边缘不在T中那么"所以你的新算法是这样的:
for each vertex do
if smallest incident edge not in T then
replace this edge with existing edge in T
break
end if
end for
矛盾证明:
存在两种情况:新边缘在MST中或者它不是。对于以下情况:假设算法不替换T中的边。这必须意味着T中的所有边都小于入射在同一顶点上的其他边。这是一个矛盾,因为这意味着新的边缘不在T的MST中。
另一个案例的证据是一个相互矛盾的类似证据。