问题描述
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)
为图表。
定义
其中w(<u,v>)
是<u,v>
的权重。
引理1
假设G
是图,v
的顶点是G
,e
的边缘是G
,入射到v
。如果
w(e) = C(v)
,然后e
属于G
的某个MST。
的确,如果将C(v)
的成本降低e
时10
的值发生了变化,那么如果e
的成本降低了{{1} 10
来自引理1。
上半场没事。让我们看第二部分。
如果没有,则意味着prim将找到相同的MST,而成本保持不变。
一般说明
上述引述错误地暗示引理1的逆是正确的(e
属于G
然后w(e) = C(v)
的某个MST),因为它声称如果我们减少e
的10
和w(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>) = 12
和e = <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属性。