用于优化分区版本的近似算法?

时间:2015-01-03 07:22:56

标签: algorithm approximation

在优化版本的分区问题中,我们希望将集合X分区为不相交的子集AB,使max(sum(A),sum(B))最小化。建议使用近似算法wikipedia,但我无法理解为什么这个近似值是4/3。

1 个答案:

答案 0 :(得分:2)

OPT >= sum(all)/2

考虑到贪婪算法给你一些答案,如S 1 和S 2 ,其中:

  

max(sum(S 1 ),sum(S 2 ))> 4/3 OPT

(不失一般性假设sum(S 1 )> sum(S 2 ))所以我们有:

  

总和(S 1 )> 4/3 OPT> = 2 sum(all)/ 3

所以:

  

总和(S 1 )> 4/3 OPT> = 2 sum(all)/ 3 so sum(S 1 )> 2 sum(all)/ 3

所以:

  

总和(S 1 )> 2总和(S 2

因此,当sum(S 1 )小于sum(S 2 )时,在算法的一个步骤中,你必须添加一个像A这样的元素到S 1 然后你没有添加任何元素到S 1

所以A必须大于和的最终状态(S 2 )(因为A + sum(S 1 )> 2 sum(S <子> 2 ))

所以A大于当前状态和(S 1 )(因为sum的当前状态(S 1 )&lt; sum的当前状态( S 2 )&lt;总和的最终状态(S 1 )&lt; A)

您的列表按降序排序,因此A必须是排序列表中的第一个元素(最大元素)。所以你的 1 必须包含A而且你有。

你也知道总和(OPT)&gt; = A因为它包含A或其他部分包含A但是sum(OPT)大于其他部分元素的总和所以

sum(OPT) > A

但你有:

  

A = sum(S 1 )&gt; 4/3和(OPT)&gt;总和(OPT)&gt;甲

这是一个矛盾:)