【发布时间】:2014-01-15 22:44:06
【问题描述】:
我想要一种算法(没有特定语言)从一组整数中找到一个子集,使它们的总和在一定范围内。
例如,如果我有一群人,他们的权重如下。
var people:{
jane:126,
julia:112,
charles:98,
john:182,
bob:213,
edgar: 237,
jay: 223,
dan: 191,
alex: 210,
david: 196
}
现在,我想从这些人那里找到一个总重量在 818-822 磅之间的子集(如果你想算一算……别打扰,这些数字超出了我的范围)头,我什至不知道这个数据集是否有解决方案)。组中的人数无关紧要,只是较大集合中的一组。真的,任何组都可以(尽管在我的情况下随机更好)。
请注意,这只是一个简单的示例...实际上会有数百人,并且可能没有任何组合符合此标准。因为实际数字会比这个大得多,所以我担心一个 n^n 问题并运行数千次迭代,即使我需要它运行得非常快。
也许我那天在计算机科学课上睡着了,但除了蛮力方法之外,我什么都想不出来。
我将它标记为 javascript,只是因为它最接近我的实际实现(而且它更容易阅读)。对其他解决方案持开放态度,只要它们不是基于某处的某些 Cthulhu 函数即可。
我知道这是一个关于 SO 的奇怪问题,但我们将不胜感激。
好吧,我被难住了。 23 小时内为我可以通过代码理解的东西发布赏金——我的背景肯定不在这个领域,我什至很难辨别用于描述问题的符号,更不用说解决方案了。
有人想帮助我,给我一些示例 javascript 代码,我可以修改到最终项目中吗?我会尽可能增加 250pt 的赏金......但如果有一个体面的解决方案,我会在时机成熟时分发它。
【问题讨论】:
-
这让我想起了一维装箱问题。你有没有考虑过这样的事情?
标签: javascript algorithm