假设我有一个数字列表:
2,2,3,4,4
将数字拆分为N组(此处以3组为例):
A:2,3 sum:5
B:4 sum:4
C:2,4 sum:6
我想要的是最小化具有最高总和的组(这里是6) - 具有最小总和的组(这里是4)。
有人想到一种算法来实现这个目标吗?
另一个例子:
7,7,8,8,8,9,9,10
结果应如下:
A:7,8,8 sum:23
B:7,8,9 sum:24
C:9,10 sum:19
答案 0 :(得分:5)
不幸的是,这个问题很难实现。请参阅multiprocessor scheduling或bin packing的参考资料。如果您对该方法感兴趣,您也可以找到一些有用的近似算法。
答案 1 :(得分:1)
考虑到即使N是2,问题是NP完成,我可以给你一个非常糟糕的算法。
答案 2 :(得分:0)
Zweiterlinde关于结帐bin packing的建议是要走的路。
我继续发布这个,在我输入它之后意识到这是错误的。
你想要一种贪婪的方法,首先使用最大的数字。
这应该让你: 来自2,2,3,4,4 ...
group 1 (4): 4
group 2 (6): 4, 2
group 3 (5): 3, 2
和7,7,8,8,8,9,9,10 ......
group 1 (18): 10, 8
group 2 (24): 9, 8, 7
group 3 (24): 9, 8, 7
虽然我猜第二个例子可能是19,24,23,这使得这个错了。哼。