【发布时间】:2012-06-13 16:48:58
【问题描述】:
我确信这个问题有一个正式的名称,知道这个名称可能会帮助我找到解决方案,但我不知道,并且为 Google 提出问题的措辞一直将我指向Knapsack Problem,它是不是一回事。
我想取一些值 X 并找到将该值拆分为 N 个整数堆栈的所有可能组合。
如果我的措辞令人困惑,这里是 X = 4,N = 3 的示例
Stack -> 1 | 2 | 3 |
----------------------
#1-----> 4 | 0 | 0 |
----------------------
#2-----> 3 | 1 | 0 |
----------------------
#3-----> 2 | 1 | 1 |
----------------------
#4-----> 2 | 2 | 0 |
重复是可以接受的,因为它很容易删除,但理想情况下它不会被计算。解决问题的算法将是完美的,但即使找出问题的名称也会使研究更容易。谢谢。
【问题讨论】:
-
那么,您希望
n的数字加起来正好是x的总和?您不希望包含少于n部分的组合/排列吗?零是有效部分。零件的顺序重要吗?不同顺序的相同部分会重复吗? -
您只需要组合的数量,还是要打印所有组合?
-
我认为这可能与您正在寻找的相似。 stackoverflow.com/questions/2593781/…
-
如果你再想一想,这实际上是 NP 背包问题。我认为,只是您的 sack 中包含小于
x且大于0的所有整数,并且您只需要n长度的组合。 -
@Jodrell 是的,
n的数字正好加到x。
标签: c# algorithm math combinatorics