将该组分为两组

时间:2013-03-05 07:23:09

标签: arrays algorithm data-structures set

给定是一组元素。你必须将它们分成两组,这样一个组的元素总和之间的差异是最小的。

示例:

5
4 6 7 2 1

两组是:{4,6}{7,2,1}

我的方法:我只遇到了这个问题的强力解决方案,即使用位移技术生成集合的所有子集(2^n)

我正在寻找更好的解决方案。

1 个答案:

答案 0 :(得分:2)

我会给你两个提示,而不是给你解决方案:

  1. 计算所有元素的总和,而不是解决原始问题。表示S。解决如下所述的问题 - 找到给定数字的子集,其总和不超过S/2。其余的数字将构成另一个子集。

  2. 我上面描述的问题非常简化knapsack problem,所有元素的成本相同。同样可以使用dynamic programming来解决(但在这种情况下,它将比用于经典背包问题的方法更简单)