最大生成树,用于查找覆盖每个循环的最小边集

时间:2017-11-11 13:41:34

标签: algorithm graph minimum-spanning-forest

我得到了以下任务:给定图G:=(V,E),任意多个周期。什么是最小边集,以便对于图中的每个周期,集合中至少包含一个边 - 或者更准确地说,这些边的权重之和是多少。

我的方法很简单:我在图表上计算了一个最大生成森林,排除了每个边缘并宣布了剩余边缘作为结果。这个想法如下:由于每个生成树没有循环,我永远不会删除整个循环,因此不会有任何我没有覆盖的循环。此外,我也无法移除图G中的任何其他边缘,因为如果我这样做,我将删除一个周期,因此结果将不会涵盖所有周期。因此我总结出我的方法是正确的。

但似乎事实并非如此。任何人都可以在我错误的地方怂恿我吗?我无法想出一个反驳我的方法的例子。

1 个答案:

答案 0 :(得分:0)

这可以解决为set covering problem

索引弧线1 ... m。设j指的是任意弧。

索引周期1 ... n。我指的是任意循环。

如果第j个弧是第i个循环的一部分,则指示符变量a_ {ji} = 1。否则为0。

如果选择第j个弧作为解决方案的一部分,则让x_j = 1。

您希望最小化您选择的弧数。

因此,最小化\ sum_ {j = 1} ^ {m} x_j

约束条件是您选择的弧应覆盖所有周期。

特别是,对于任何周期i,您需要至少选择其中一个边。

所以,建模如下。

对于每个i,\ sum_ {j = 1} ^ {m} a_ {ji} x_ {j}> = 1.

将会有n个这样的约束,每个约束一个。

另一个约束是每个x_ {j}都是0或1。

如果您要解决加权版本,那么给定弧j具有权重c_j,需要将目标更改为

\ sum_ {j = 1} ^ {m} c_j x_j