2009-08-22 5 views
6

Предположим, что есть n количество записей, каждое из которых может принимать значение или . Это означает, что есть 2^n возможных комбинаций этих записей. Количество записей может варьироваться от до .Что такое эффективный алгоритм для создания всех возможных комбинаций?

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

+2

Вы видели ответы на: http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – Shog9

ответ

15

Вы можете достичь этого, просто напечатав цифры 0..2^n-1 в двоичной форме.

+0

Спасибо, не подумал об этом , Иногда ответ прямо перед вашим носом, но вы его не видите. – Hans

1

Создание m-го лексикографического элемента математической комбинации. . LINK

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

0

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

3

Мощь также просто использовать Интс:

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 
+0

К сожалению, я не понимаю немного Python, я в основном использую Java. Но я постараюсь сделать это. Благодарю. – Hans

0

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

import itertools 

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

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

Смежные вопросы