【发布时间】:2009-12-19 00:07:20
【问题描述】:
好的,问题来了:
我需要从 50-100 个项目集中找到任意数量的中间组,它们的总和为 1000、2000、...、10000。
输入:整数列表
整数只能在一个列表中。
对算法有什么想法吗?
【问题讨论】:
-
作业题应该这么说吧。
标签: algorithm
好的,问题来了:
我需要从 50-100 个项目集中找到任意数量的中间组,它们的总和为 1000、2000、...、10000。
输入:整数列表
整数只能在一个列表中。
对算法有什么想法吗?
【问题讨论】:
标签: algorithm
在谷歌上搜索“背包问题”应该会得到很多点击(尽管它们不太可能非常令人鼓舞——这是一个众所周知的 NP 完全问题)。
编辑:如果你想获得技术,你所描述的似乎真的是子集和问题——这是背包问题的一个特例。当然,这是假设我正确理解了您的描述,我承认这可能会引发一些问题。
您可能会发现 The Handbook of Applied Cryptography 中的算法 3.94 很有帮助。
【讨论】:
我不是 100% 了解您的要求,但我以前使用过回溯搜索来搜索类似的内容。这是一种蛮力算法,可能是最慢的解决方案,但它会起作用。 Backtracking Search 上的 wiki 文章可能会对您有所帮助。基本上,您可以使用递归算法来检查每个可能的组合。
【讨论】:
这是背包问题。您可以选择的整数是否有任何限制?它们是可分的吗?它们都小于某个给定值吗?考虑到这些限制,可能有一些方法可以在多项式时间内解决问题 - Google 会为您提供答案。
【讨论】: