将整数数组划分为两个大小相等的子数组?

时间:2013-01-29 17:21:37

标签: algorithm data-structures

我遇到了这个问题,找不到合理的解决方案。 如何将未排序的整数数组划分为2个相等大小的子数组,以使子数组之和的差异最小。

例如:给定一个整数数组a [N](未排序),我们希望将数组拆分为a1和a2,其中a1.length == a2.length即N / 2和(所有数字的总和)在a1中 - a2中所有数字的总和应该是最小的。

为简单起见,我们假设所有数字都是正数,但可能会有重复。

1 个答案:

答案 0 :(得分:3)

虽然其他人已经提到这是一个修改分区问题的情况,但我想更具体地指出,它实际上是minimum makespan problem有两台机器的特例。也就是说,如果您解决了双机器完工时问题并获得了值m,那么您将获得最小差异2*m - sum(i : i in arr)

正如维基百科文章所述,问题是超过2台机器的NP完全问题。但是,在您的情况下,List scheduling algorithm,通常提供 对于双机和三机情况的近似答案,是最优和多项式时间,给出了按非递增顺序排序的列表。

For details, and some more theoretical results on this algorithm, see here

相关问题