鉴于3个球,有3种方法将它们分成垃圾箱:
(1,2)
请注意(2,1)
已涵盖n
,因为我们并不关心垃圾箱的顺序。
我想编写一个能够获得球数from itertools import combinations
from functools import reduce
def all_partitions(n):
n_bits_on=set([tuple(reduce(lambda x,y:x[:y]+[1]+x[y+1:],c,[0]*(2*n-1))) for c in combinations(range(2*n-1),n)])
return set([tuple(sorted(filter(lambda i:i>0,reduce(lambda x,y: x+[y] if y==0 else x[:-1]+[x[-1]+1,],p,[0])))) for p in n_bits_on])
的函数并以有效的方式输出所有可能的分区。
这就是我提出的:
2n-1
代码的作用是:
n
和itertools.combinations
位的位数组(使用reduce
)set()
)_locales
代码正常运行,但速度非常慢。
任何想法如何改进?