Algorithm 具有两条边的最小生成树
我想解决一个更难的最小生成树问题 有Algorithm 具有两条边的最小生成树,algorithm,graph,minimum-spanning-tree,Algorithm,Graph,Minimum Spanning Tree,我想解决一个更难的最小生成树问题 有N个顶点。还有2M边,编号为1、2、…,2M。图是连通的、无向的和加权的。我想选择一些边,使图仍然连接,使总成本尽可能小。有一个限制:编号为2k的边和编号为2k-1的边是并列的,因此应选择两者或不选择两者。所以,如果我想选择边3,我也必须选择边4 那么,使图连接起来的最小总成本是多少 我的想法: 让我们将两条边2k和2k+1称为边集 如果一条边合并了两个不同的组件,我们就称它为有效边 如果两条边都有效,我们就称边集为good 首先准确地添加m边集,这些边集按
N个
顶点。还有2M
边,编号为1、2、…,2M
。图是连通的、无向的和加权的。我想选择一些边,使图仍然连接,使总成本尽可能小。有一个限制:编号为2k
的边和编号为2k-1
的边是并列的,因此应选择两者或不选择两者。所以,如果我想选择边3,我也必须选择边4
那么,使图连接起来的最小总成本是多少
我的想法:
- 让我们将两条边
和2k
称为边集2k+1
- 如果一条边合并了两个不同的组件,我们就称它为有效边
- 如果两条边都有效,我们就称边集为good
- 首先准确地添加
边集,这些边集按成本的递增顺序排列。然后按成本递增的顺序迭代所有边集,如果至少有一条边有效,则添加该集m
应该从0迭代到m
m
- 运行一个kruskal算法,但要有一些变化:边
的成本是不同的e
- 如果包含
的边集是好的,则代价为:(边集的代价)/2e
- 否则,成本为:(边集的成本)
- 即使成本发生变化,我也无法证明kruskal算法是否正确
- 如果包含
对不起,英语不好,但我想解决这个问题。是NP难还是什么,或者有好的解决方案D提前感谢你 我不确定这是否是最好的解决方案,但我的第一种方法是使用回溯搜索:
最后,要贪婪。使用常规的贪婪算法不会给你一个最优的解决方案,但它会迅速提高任何解决方案的门槛,使修剪更加有效。因此,尝试按重量减少的顺序删除边缘对。我不确定这是否是最佳解决方案,但我的第一种方法是使用回溯搜索:
最后,要贪婪。使用常规的贪婪算法不会给你一个最优的解决方案,但它会迅速提高任何解决方案的门槛,使修剪更加有效。因此,尝试按重量损失的顺序移除边缘对。正如我之前推测的,这个问题是NP难的。我不确定是否不合适;有一个非常简单的2-近似(将每一对分成两半,保留两半的全部成本,并运行您最喜欢的香草MST算法) 给出这个问题的一个算法,我们可以如下解决NP难的Hamilton圈问题 设G=(V,E)为Hamilton循环的实例。克隆所有其他顶点,表示通过vi'克隆vi。我们复制每条边e={vi,vj}(生成一个多重图;我们可以用简单的
minimize sum_i w_i x_i (drop the w_i if the problem is unweighted)
subject to
<connectivity>
for all i, x_i in {0, 1}.
sum_{i such that x_i connects S with its complement} x_i >= 1