一种简单的方法来判断MST是否会降低特定边缘成本是否会改善?

问题描述

fo:region-after是一个无向连通图,所有边上的成本均为正。给定的是边缘G的成本严格超过10。我们需要回答如果e的成本减少10,MST成本是否会提高。

我知道一个解决方案,其中涉及生成仅带有e边的新图。这个简单得多的解决方案出了什么问题: 取cost<cost(e)-10的一个顶点e之一。找到与v相关的最小成本边沿。现在,降低v的成本,并再次找到发生在e上的最小成本优势。如果进行了更改,则意味着v可以找到更好的MST,并且可以降低成本。如果没有,则意味着prim将找到相同的MST,并且成本保持不变。

这种逻辑怎么了?

Update minimum spanning tree with modification of edge

有关

解决方法

我认为您的解决方案不正确。

考虑下图G =(V,E),V = {a,b,c,d,e},E = {ab,bc,cd,de,ae,bd},并且各个权重为{ 5,10,10,5,17}。

通过运行Kruskal或Prim,我们发现我们的MST为{ab,bc,cd,de},他的体重为30。

现在,让我们将边缘bd的权重从17减少到7,然后再次检查边缘。

运行带有G'的Prim或Kruskal将输出一个重27的MST(实际上,我们有2个这样的MST {ab,bd,de,cd}和{ab,bd,de,bc})。

但是如果我们使用您的算法,则会得到相同的精确树,因为当我们检查节点b或d时,边缘bd并不是与这些节点之一相邻的最轻的边缘。

,

G = (V,E)为图表。
定义
1
其中w(<u,v>)<u,v>的权重。

引理1
假设G是图,v的顶点是Ge的边缘是G,入射到v。如果 w(e) = C(v),然后e属于G的某个MST。

的确,如果将C(v)的成本降低e10的值发生了变化,那么如果e的成本降低了{{1} 10来自引理1。

上半场没事。让我们看第二部分。

如果没有,则意味着prim将找到相同的MST,而成本保持不变。

一般说明
上述引述错误地暗示引理1的逆是正确的(e属于G然后w(e) = C(v)的某个MST),因为它声称如果我们减少e10w(e) != C(v)的成本,则保留MST成本,这意味着e不属于G的任何MST。

简短说明:一个反例
让我们G = ({1,2,3,4},{<1,2>,<1,3>,<2,4>,<3,4>})使用权重函数w(<1,2>) = 1,w(<1,3>) = 3,w(<2,4>) = 3,w(<3,4>) = 1,4>) = 12e = <1,4>

降低e的成本后,我们知道C(1) = C(4) = 1 != w(e)。提议的算法指出:“ prim将找到相同的MST,而成本保持不变”。

让我们检查一下,当e的费用减少了10时,G的MST费用是否减少了:
在将e的费用减少10之前的MST费用:5
e的费用减少10后,MST费用为:4

由于MST成本降低了,所以这种说法(引用一)是错误的,所提出的算法不起作用。

注意:无论使用哪种MST算法,该算法都是错误的,因为反证明仅取决于MST属性。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...