【发布时间】:2018-02-11 05:51:04
【问题描述】:
我想为计算机找到一种有效的方法来处理执行以下操作的大量变量(例如 50:x1、...、x50): 找到所有组合 [x1,x2,x3] 满意:
0
x1 + x2 + x3 = 100
这是一个查找 sum = 100 但 [1,99] 和 [99,1] 的所有组合的示例:
x=[]
for i, j in itertools.product(range(0,101), range(0,101)):
if i+j==100:
x.append([i,j])
我想找到一种方法来减少循环次数并且只给出如下内容:
[0,100], [1,99], [2,98], ...., [50,50]
[51,49] 中没有任何内容。
主要目标是使用 50 个变量 (x_1,...x_50),总和为 100。
普通循环不太可能做到这一点
【问题讨论】:
-
“大数”有多少?
-
您能想出一种更快的方法来为给定的
i找到j,例如i + j == 100? -
@avigil:这个问题没有那个问题那么难。 (这与 {1, ..., 100} 的子集无关。)
-
你可以试试
list(itertools.chain(*[((i,100-i),(100-i,i)) if i!=100-i else ((i,i),) for i in range(51)]))
标签: python loops optimization combinations integer-partition