保证边缘不是最小生成树的一部分

时间:2013-10-23 16:42:29

标签: algorithm graph minimum-spanning-tree

我正在解决Kleinberg和Tardos的算法设计书中的练习,并且遇到了这个不太容易(对我而来)的问题,即找到一个边缘永远不属于图形的MST的保证。问题是这样的:

在每个边e上给出一个图G =(V,E),成本为c_e。给定错误参数epsilon和k(均> 0),您希望确定以下属性(*)是否适用于多项式时间内的特定边e'=(u,v)。

(*)即使每个边缘的成本最多改变epsilon(增加或减少),并且除了e'之外的k个边缘的成本进一步改变为某些任意不同的值,边缘e '仍然不属于G的任何MST。

我知道MST的cut属性但是看不出如何应用于这个问题。提前感谢您的想法!

1 个答案:

答案 0 :(得分:0)

感谢j_random_hacker的评论,最终得到了答案。

答案主要使用MST的循环属性 - 如果边是G中循环中最昂贵的边,则它不能属于G的任何MST。

将k边缘的成本改为任意值的规定意味着我们必须证明e'是至少k + 1个周期中最昂贵的边缘,所有这些边缘都是边缘不相交的,除了e'本身。这样,即使k个边沿的任意变化导致e'在k个周期中不是最昂贵的,它仍然是最后一个周期中最昂贵的。

给定图G,边e'和参数k和epsilon(均> 0):

  1. 暂时删除G中比e'更贵的所有边缘(这可确保在我们找到的任何周期中e'最贵)

  2. 现在,将e'的一端设置为源,将另一端设置为sink(t)。将所有边缘的容量设置为1.流量完整性确保由于所有容量都是整数,我们将获得积分流量。

  3. 查看您是否获得至少k + 1的值流。如果是,流分解将为您提供从s到t的尽可能多的边缘不相交路径作为流的值。通过向它们添加e'将所有这些路径转换为循环 - 这样你就有了k + 1(或更多)循环,其中e'是最昂贵的边缘,除了e'之外都是边缘不相交的。您现在可以安全地说e'属性(*)成立。

  4. 如果它是一个整数,我有办法处理epsilon。在步骤1中,删除比成本(e)+ 2 * epsilon更昂贵的所有边。