如何计算对象的最佳分组?

时间:2013-05-17 20:02:05

标签: algorithm sorting grouping

我需要能够将一组已知大小的对象分配到3组中。例如,给定一个如下所示的有序列表,我想找到两个除法点或分离点来制作三个具有相似总和的组。

75, 67, 54, 40, 51, 48, 49, 47

每组的总和必须大致相等,第2组和第3组的总和不能超过第一组的总和超过规定的数量(比如10)。理想情况下,第一组略大于其他组。项目的顺序无法更改。每个组由原始列表的连续元素组成。每个元素都放在一个组中。

在这种情况下,预期的解决方案是:

Groups: [75, 67], [54, 40, 51], [48, 49, 47]

Sums: 142, 145, 144 

用例是根据前端布局中已知的高度,预先计算(服务器端)优先级故事的分配。我已经有了代码,可以让我对内容有足够的高度(按比例说),但是我正在努力寻找一种有效的分组方法。有充分的理由说明为什么不在前端进行,但可能也可以在那里使用一般解决方案。

1 个答案:

答案 0 :(得分:1)

鉴于您大致知道要分配给每个组的数量(总计/ 3),为什么不迭代列表并将对象分配到组1直到其总数达到(总数/ 3),然后执行相同操作第2组,然后其余部分转到第3组。最终结果可能不适合您的参数,例如第2组可能超过第1组超过epsilon,在这种情况下,如果需要,您可以将第3组中的一个或两个元素交换到第2组,然后如果需要将第2组中的一个或两个元素交换为第1组。应该在O(n)中运行,期望你最后需要交换少于十几个元素。