【发布时间】:2017-10-25 21:56:10
【问题描述】:
让P=[P1, P2, ..., Pk] 为k 正整数,让T 为正整数。我想生成最多为T 的所有组合。也就是说,sum(x[i] * P[i] for i in 1:k) <= T 其中x[i] = 1 iff i 在组合中被选中。
示例。
让P=[1, 2, 3] 和T=4。组合应该是:
1
2
3
1, 2
1, 3
2, 3
所以只有1, 2, 3 的组合不能存在,因为1 + 1 + 3 = 5 > 4。
我想先生成所有组合,然后开始验证约束sum(x[i] * P[i] for i in 1:k) <= T。但这种方法可能比其他聪明的方法更耗时。我们如何生成这样的组合?
注意。如果您知道 Python 或 Matlab 中任何可用于生成此类组合的函数,您可以提供。
谢谢。
【问题讨论】:
-
2,3... 2+3 = 5 > 4 也
-
@scharette
2, 3的组合表示P[2] + P[3] <= 4就是这样。 -
@Ribz 对不起,如果
P = [1,2,3]你怎么能访问P[3]。我疯了吗? -
你不是。我刚刚在
1而不是0开始阵列。
标签: python algorithm matlab combinations