我想知道哪里有一个算法可以把一些数据分成最小组。
看起来应该是,
前提条件:某个数的和expect:这些数据分成最小计数组。
有算法还是好主意?
谢谢。
这是一个例子。

List<Integer> rawList = Arrays.asList(1, 1, 1, 2, 10, 5, 8, 3);

你可以把它们分成8组,每组包含一个数字,
这不是我想要的。
Integer maxSum = 12; //Assume that one group can holds max sum of 12.

我需要最少的小组,所以答案看起来像
List<Integer> group1 = Arrays.asList(10, 2);
List<Integer> group2 = Arrays.asList(8, 3, 1);
List<Integer> group3 = Arrays.asList(5, 1, 1);

上面的例子只花了3个组来分割原始数据。
这三个组将是一个答案(还有其他使用最小组的方法)。
这似乎类似于@dillon davis提到的垃圾箱包装问题。我想只有这一个更容易。
答案需要最小的组,时间和空间的复杂性不是主要的问题。

最佳答案

看来你的问题和装箱问题很相似目的是将各种尺寸的元件装入尽可能少的箱子中,每个箱子都有一定的固定容量。一般的方法是使用贪心算法反复尝试将最大的元素打包到它将要装入的第一个bin(first fit)中,或者尝试将最大的元素装入剩余空间最小的bin(best fit)这两种方法都不能保证得到最优解,但通常会产生接近最优的结果,这可能是足够的。

关于algorithm - 如何将数据分成最小的组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55080489/

10-11 22:53
查看更多