JAVA - 将int数组分成n组,差异最小

时间:2013-03-22 04:26:03

标签: arrays recursion integer partitioning minimum

所以我试图找出一个程序的算法,该算法将使用递归来获取x数的int数组并将其分成n组。这些数字可以是正面的也可以是负面的。这些集合需要在它们之间具有最小的差异。

例如,如果你给程序提供了int数组[1,2,3,4]并告诉它分为3组,那么它将它分为[1,3] [2]和[4]集合之间的差异是2。 另一个例子是如果你给出数组[6,6,6,10,10]并告诉它分成2组,那么它会将它分成[10,10]和[6,6,6],其中差别两组之间是2.

我们可以假设数组按升序排序(左边是最小的,右边是最大的),因为排序它将是一个简单的排序语句。有什么想法吗?

编辑:我知道我正在处理分区问题,我已经尝试了贪婪算法,你从最大到最小的数字,并把它们放在总和最低的组中,但它不适用于第二个例子我上面给出了所以我正在寻找一种更可靠的算法。

1 个答案:

答案 0 :(得分:0)

更一般情况下的分区问题(k集)称为minimum makespan problem。对于k > 2,此问题是NP完全的。 k = 2k = 3已知一种精确的算法Graham list scheduling algorithm。对于较大的尺寸,如果您没有实施NP完全解决方案,则有number of polynomial-time approximation algorithms