让T =(V,E)是|V|
顶点树和|E| = |V-1|
边,具有已知成本。我们要构建一个最小权重完整图G =(V,E')跨越牛逼其独特的最小生成树。查找跨越给定的最小生成树的最小权重完整图形
示例:考虑以下树T。 红色的边缘有给定的成本。虚线边将被添加以构造来自该树的完整图。
最小重量完全图摹跨越牛逼其独特的MST如下:
我试图找到一个(多项式时间)算法来生成该图。我期待的主要是小费,而不是完整的解决方案。到目前为止,我已经设计了以下算法:
1)查找包含重量为w_max
的最重MST边缘并且没有其他MST边缘的图的切口。所有其他边缘必须是w_max + 1
。下面的图片说明了我的想法:
边缘(1--2)(1--4),(4-5),(2-3)和(2--5 )包含在此切割C中。包含在MST中的唯一边缘是边缘(2--3),它是MST中最重的边缘,其中w=56
。因此,所有其他边缘应该有w=57
。证明:假设相反;我们可以用另一条边代替(2-3),并保持树连接。现在树的重量更轻,因此(2-3)不属于MST。矛盾。
2)对重量递减顺序的重量为w_i
的MST的所有其他边缘e_i
重复。采取只包括e_i
,并没有其他MST边缘的剪辑。此切割的任何未知非MST边缘应具有w_i + 1
的权重。
问题:
1)是上述算法是否正确?根据Cut属性,它应该是。
2)我能更有效地做到这一点?我没有一个算法来寻找我的头顶上的切割,但我不觉得这种方法可能是有效的。
编辑:另一种方法,我曾在我的脑海里是一个基于Kruskal算法的方法:
1)使用联盟查找,我遍历所有MST边缘,按升序成本,统一相同组件下的相应顶点。
2)在每个步骤中,通过成本边缘w
来统一两个不同的组件。在相同(新)组件中形成循环的任何其他边缘的成本应为w+1
。
我不能正式证明它,但它似乎克鲁斯卡尔方法和你的切割方法是间接相同的,不知道如果你的削减算法有一个不好的复杂性 – sashas
你是正确的关于克鲁斯卡尔,它是正确和有效的 – sashas