Arrays JAVA—将整型数组划分为n个差异最小的集合

Arrays JAVA—将整型数组划分为n个差异最小的集合,arrays,recursion,integer,partitioning,minimum,Arrays,Recursion,Integer,Partitioning,Minimum,因此,我试图为一个程序找到一个算法,它将使用递归来获取一个由x个数组成的整数数组,并将其划分为n个集合。这些数字可以是正的,也可以是负的。集合之间需要有尽可能小的差异 例如,如果给程序一个int数组[1,2,3,4],并告诉它分成3组,那么它会将它分成[1,3][2]和[4],其中两组之间的差值为2。 另一个例子是,如果你给数组[6,6,6,10,10],让它分成两组,那么它会把它分成[10,10]和[6,6,6],其中两组之间的差值是2 我们可以假设数组按升序排序,最小的在左边,最大的在右边,

因此,我试图为一个程序找到一个算法,它将使用递归来获取一个由x个数组成的整数数组,并将其划分为n个集合。这些数字可以是正的,也可以是负的。集合之间需要有尽可能小的差异

例如,如果给程序一个int数组[1,2,3,4],并告诉它分成3组,那么它会将它分成[1,3][2]和[4],其中两组之间的差值为2。 另一个例子是,如果你给数组[6,6,6,10,10],让它分成两组,那么它会把它分成[10,10]和[6,6,6],其中两组之间的差值是2

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


编辑:我知道我正在处理一个分区问题,我尝试过贪婪算法,从最大数到最小数,然后把它们放在最小和的组中,但是对于我上面给出的第二个例子,它不起作用,所以我正在寻找一个更可靠的算法

在更一般的情况下,k集的划分问题称为。当k>2时,该问题是NP完全问题。一个精确的算法是k=2和k=3。对于较大的规模,如果不实现NP完全解决方案,则存在一个问题