我有一组整数 M 和一个目标总和 k。我想找到 M 的子集,当它加在一起时最接近 k 而不会超过。
例如:
M = {1, 3, 5, 5, 14}
k = 12
answer = {1, 5, 5}
because 1 + 5 + 5 = 11 and there is no way to make 12.
我有一个额外的约束,即子集最多可以包含 4 个元素。
在我的应用程序中,|M| 的大小 可以很大(大约有数千个元素)。如果无法在合理的时间内找到最佳答案,我会对至少给出“好”答案的解决方案感兴趣。
现在我正在通过生成 10,000 个随机子集并选择最接近的子集来解决这个问题,这比人们预期的要好,但速度很慢。我不确定这实际上离最优还有多远,但任何对此的见解对我来说也会很有趣。