设为首页 加入收藏

TOP

漫谈算法(一)如何证明贪心算法是最优 using exchange argument(二)
2014-11-23 21:54:07 来源: 作者: 【 】 浏览:109
Tags:漫谈 算法 如何 证明 贪心 using exchange argument
Kruskal生成的树是T2,这样,因为T2!=T1(如果相等我们的Kruskal就最优了,就不用证了),所以至少有一条边e,e在T1中,同时e不在T2中。这个与众不同的e就是我们的切入点。可以想象,如果我们把e在T1中去掉,T1就变成了两部分,即Ta和Tb,我们知道 {Ta中的点}V{Tb中的点} = V(就是Ta中的点并上Tb中的点就是我们G中的点集V),所以在T2中,一定有一条边f(f!=e),f的一个点在{Ta中的点},f的另一个点在{Tb中的点}。根据我们的Greedy算法Kruskal,我们没有选e,是因为e在我们的图中造成了回路。在进一步想,有回路是因为我们先选了f,这就说明cost(f) <= cost(e)。 (恩,这就是我们的重点啊,笑一个O(∩_∩)O~)

下面的也就很显然了,我们考虑构造一棵新的树,T3,对于T3 = E(T1) - e + f,也就是T3中的边是T1中的所有边除了e,同时加上边f。

1)很显然,我们知道T3是一棵spanning tree,f连通了由去掉e而分隔的两部分。

2)很显然,T3的cost是<= T1的cost的。 因为cost(f) <= cost(e),且其他不变。即T3是MST。

所以同个上面的构造,我们就构造出了一棵树,这个树是MST,同时它比T1更接近于T2。(多了一条common的边)

我们知道T1和T2对多有n条边是不同的,通过上面的步骤,我们可以经过n次变换,得到T2,同时cost <=T1,所以,T2是MST。证毕。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇来 写颗简单的树...... 下一篇漫谈算法(零)序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: