【发布时间】:2019-09-28 16:00:13
【问题描述】:
我正在寻找一种算法,它允许我快速访问(不一定打印)300 个项目集的每个 X 项目子集,当子集中项目的值是加起来等于 Y。允许重复,顺序很重要。 300 个项目集的所有值都是正数。
例如,
300 个项目集:[1.5, 1.34, 3, .25, 2.333, 1.75, .125, .675, 2, 4, .75, ....]
X = 5
Y = 6
算法生成:
[2, 2, 1.5, .25, .25]
[2、2、.25、1.5、.25]
[2, 1.5, 2, .25, .25]
[1.5、2、2、.25、.25]
[2, 1.75, .5, .5, 1.25]
[2, 1.75, .5, 1.25, .5]
[2, 1.75, 1.25, .5, .5]
[2, 1.25, .5, .5, 1.75]
[1.25、2、.5、.5、1.75]
[.5, 2, .5, 1.25, 1.75]
[3、1、1、.5、.5]
[1、3、1、.5、.5]
[1、1、3、.5、.5]
[1, 1, .5, 3, .5]
[1, 1, .5, .5, 3]
等等……
[2, 2, 1.5, .25, .25] 是允许的并且
[2, 1.75, .5, .5, 1.25] 与 [1.25, .5, .5, 1.75, 2] 不同。
我意识到这是 Subset Sum 问题的一种变体,但我似乎无法在网上任何地方找到这种变体的任何有用示例。现在我当前的解决方案实现了嵌套循环(嵌套循环的数量由 X 的值决定)当 X 很小时工作正常,但当 X 开始上升时很快变得非常慢。任何意见将不胜感激!
【问题讨论】:
-
@NinaScholz 这是我目前拥有的代码笔:codepen.io/Wcomp/pen/rNBgyjq?editors=0012
标签: javascript algorithm subset-sum