【发布时间】:2013-03-28 10:45:18
【问题描述】:
假设我有一个数字“n”和一个数字表。我想在表中选择最多四个数字,这四个数字的总和将是与 n 最接近的匹配项。给定表格的长度“L”,它必须经过的组合数是 (6*L + 11*L^2 + 6*L^3 + L^4)/24。
例如。说我有变量
n = 100
还有一组数字
t = {86, 23, 19, 8, 42, 12, 49}
根据这个列表,最接近 n 的 4 组合是 49 + 23 + 19 + 8 = 99。
以尽可能少的计算次数来执行此操作的最佳方法是什么?
【问题讨论】:
-
在正常的背包问题中,您选择的最大物品数量没有限制,而在您的问题中似乎限制为四个。我仍然会使用与 0/1 背包(动态编程)相同的方法。使用这种方法,您可以在
O(4nL)中解决它,只要您在 t 中获得多个项目,就会快很多。 -
如果穷举搜索算法太慢,请尝试branch and bound,这样您无需尝试就可以忽略大量子集。阅读第 13 章statslab.cam.ac.uk/~rrw1/mor/s2010a4.pdf
-
问题最多显示四个数字。 49 + 42 + 8 = 99。
标签: algorithm math lua knapsack-problem