什么是创建所有可能组合的有效算法?

时间:2009-08-22 19:09:04

标签: algorithm boolean combinations

假设有 n 条目数量,每个条目都可以取 0 1 的值。这意味着这些条目的 2 ^ n 可能组合。参赛作品的数量可以从 1 6

如何创建每个可能的组合作为一系列数字(,对于n = 2:00,01,10,11),而不是诉诸于一千个IF?

5 个答案:

答案 0 :(得分:16)

只需以二进制形式打印数字0..2^n-1即可实现这一目标。

答案 1 :(得分:3)

也可以使用ints:

n = 5
for x in range(2**n):
  print ''.join(str((x>>i)&1) for i in xrange(n-1,-1,-1))

疯狂的十进制到二进制转换从this answer解除。

输出:

00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111

答案 2 :(得分:1)

生成数学组合的第m个词典元素。 LINK

你必须通过DON KNUTH看到这一点。(生成所有可能的组合。注意:C#代码也在那里提供。)

答案 3 :(得分:0)

如果每个条目的可能值只能是 0 1 ,并且您只想要0和1组合,为什么不使用自然整数(in二进制形式)最多2 ^(n-1)......如上所述,尼克。如果你想要字符串,请格式化'0'填充...

答案 4 :(得分:0)

或使用itertools

import itertools

for item in itertools.product((1, 0), repeat=4):
    print item

请注意,在这种情况下,该项是4个元素的元组。