【发布时间】:2014-12-21 03:13:31
【问题描述】:
假设您正在尝试将一些固定资源(例如n=10)分配到一些地区(例如t=5)。我试图有效地找出如何获得总和为n 或以下的所有组合。
例如10,0,0,0,0 很好,0,0,5,5,0 等也一样,而3,3,3,3,3,3 显然是错误的。
我已经走到这一步了:
import itertools
t = 5
n = 10
r = [range(n+1)] * t
for x in itertools.product(*r):
if sum(x) <= n:
print x
不过,这种蛮力方法非常缓慢;一定有更好的办法吗?
时间(1000 次迭代):
Default (itertools.product) --- time: 40.90 s
falsetru recursion --- time: 3.63 s
Aaron Williams Algorithm (impl, Tony) --- time: 0.37 s
【问题讨论】:
-
你想找出一个数字的所有总和组合吗?
-
@qqvc 听起来对吗?
-
this one 可能重复?这里的任务是找到所有的partitions of an integer。
-
@Tony 虽然有些想法可能适用,但问题是找到一个等于的值,而这个问题是查找所有内容。此外,它是用另一种语言给出的答案。我觉得必须有一些标准模块提供这个?