Что такое эффективный алгоритм для создания всех возможных комбинаций? - PullRequest
6 голосов
/ 22 августа 2009

Допустим, есть n количество записей, каждая из которых может принимать значение 0 или 1 . Это означает, что есть 2 ^ n возможных комбинаций этих записей. Количество записей может варьироваться от 1 до 6 .

Как можно создать каждую возможную комбинацию в виде последовательности чисел (, т.е. для n = 2: 00, 01, 10, 11), не прибегая к тысяче IF?

Ответы [ 5 ]

16 голосов
/ 22 августа 2009

Этого можно добиться, просто напечатав числа 0..2^n-1 в двоичном виде.

3 голосов
/ 22 августа 2009

Можно просто использовать целые:

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

Сумасшедшее десятичное преобразование в двоичное число поднято с этот ответ .

Выход:

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
1 голос
/ 22 августа 2009

Генерация m-го лексикографического элемента математического сочетания. LINK

И вы должны увидеть это по DON KNUTH . (Генерация всех возможных комбинаций. ПРИМЕЧАНИЕ : там также указан код C #.)

0 голосов
/ 02 мая 2016

Или используйте itertools:

import itertools

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

Обратите внимание, что в данном случае элемент является кортежем из 4 элементов.

0 голосов
/ 22 августа 2009

Если возможные значения для каждой записи могут быть только 0 или 1 , и вам нужна комбинация 0 и 1, почему бы вам не использовать натуральные целые числа (в двоичной форме ) до 2 ^ (n-1) ... как предложено выше Ником ... и отформатируйте их с отступом '0', если вы хотите строку ...

...