这就是我想出来计算长度为n,1,...,n的所有子集,其中长度为n的单个元素加倍。很难描述......
def subsets(seq, *args):
seqstart = [[seq[i] for i in args], ]
if len(args) == 0:
for i in range(len(seq)):
seqstart += subsets(seq, i)
elif len(args) < len(seq):
for i in range(args[-1], len(seq)):
seqstart += subsets(seq, *args + (i, ))
return seqstart
示例:
>>> subsets(['x', 'y'])
[[], ['x'], ['x', 'x'], ['x', 'y'], ['y'], ['y', 'y']]
>>> subsets(['x', 'y', 'z'])
[[], ['x'], ['x', 'x'], ['x', 'x', 'x'], ['x', 'x', 'y'], ['x', 'x', 'z'], ['x', 'y'], ['x', 'y', 'y'], ['x', 'y', 'z'], ['x', 'z'], ['x', 'z', 'z'], ['y'], ['y', 'y'], ['y', 'y', 'y'], ['y', 'y', 'z'], ['y', 'z'], ['y', 'z', 'z'], ['z'], ['z', 'z'], ['z', 'z', 'z']]
依赖于序列长度的子集(序列)的长度是多少? (我在50小时后用n = 14杀死了这个过程)
谢谢
迈克尔编辑:谢谢大家。所以它是2n的二项式系数。
要获取所有子集而不是多个集合(所以总长度为2 ^ n)我需要替换
for i in range(args[-1], len(seq)):
带
for i in range(args[-1] + 1, len(seq)):
答案 0 :(得分:9)
大小为n的多个集合的数量,大小为n,等于二项式系数
/ 2n \
| |
\ n /
接下来,将k的number of combinations with repetition从0总结为n。
对于n = 14,这会产生40116600多个集合。
答案 1 :(得分:1)
对于具有N个元素的给定集合A,子集的数量等于2 ^ N
答案 2 :(得分:0)
一组的许多(正常)子集是2 ^ N
长度为K且具有重复的多个子集是N ^ K.把你的元素想象成某个数字系统的数字。如果N是10,那么你的元素只是数字0..9。
如果你想重复子集的大小是从1到N的任何一个,那么将有N ^ 1 + N ^ 2 + N ^ 3 + ... + N ^ N集。