PartitionProblem变体 - 固定的子集大小

时间:2013-06-16 14:56:07

标签: dynamic-programming np-complete subset-sum partition-problem

我遇到的问题是NP-complete的分区问题的变化。这是一个优化问题,而不是决策问题。

问题:将数字列表划分为两个子集,使得它们的和的差异最小,并找到两个子集。如果n均为,则尺寸应为n/2,如果为奇数,则为floor[n/2]ceil[n/2]

假设伪多项式时间DP算法最适合精确解决方案,如何修改它来解决这个问题?什么是最好的近似算法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

由于您没有指定使用哪种算法,因此我假设您使用此处定义的算法: http://www.cs.cornell.edu/~wdtseng/icpc/notes/dp3.pdf

然后使用此算法添加变量以跟踪最佳结果,将其初始化为N(列表中所有数字的总和,因为您始终可以将一个子集作为空集)并且每次都是你更新T(例如:T [i] = true)你会做bestRes = abs(i-n/2)<bestRes : abs(i-n/2) : bestRes之类的事情。然后你返回bestRes。这当然不会改变算法的复杂性。

我对你的第二个问题一无所知。