我想我正在寻找一种可以在二分图中找到“最小”“选择”的算法。每个顶点都有一个相关的(整数)成本来选择它。我只能找到最小化所选集合中顶点的数量的算法,而不是成本。我之前认为我需要一个“匹配”,但实际上我只需要覆盖每个边缘的顶点子集......
我认为贪婪的解决方案不起作用。假设我们的集合是A,B:
顶点1,2,3在A中,成本为1。 顶点4在B中,成本为2.
解决方案是移除最昂贵的顶点,4。基于成本选择的贪婪解决方案将失败。同样,如果B的成本为10,我们就无法贪婪地选择连接最多的顶点。
我想到了一个不同的措辞:“给定一个二分图,其中每个顶点都有相关的成本,找到最小成本的顶点子集,这样每个边都会入射到所选子集中的至少一个顶点上。” p>
答案 0 :(得分:3)
Primal LP:
min sum_v c_v x_v
s.t.
forall e=vw. x_v + x_w >= 1
forall v. x_v >= 0
Dual LP:
max sum_e y_e
s.t.
forall v. sum_{e=vw} y_e <= c_v
forall e. y_e >= 0
找到一个最小切割,其中边是从A到B的弧,具有无限的容量,A中的顶点是源,B中的顶点是下沉,所有顶点的容量都等于它们的成本。 (等效地,将带有弧的超来源设为A,使用来自B的弧进行超连接。)
取切割“水槽”侧的As和“源”侧的Bs。每个边缘大众都被覆盖,因为如果v和w都不属于封面,则vw将是残留的。
帽子提示我想到JenőEgerváry。