2009-08-22 33 views
6

Digamos que hay n cantidad de entradas, cada una de las cuales puede tomar el valor de o . Eso significa que hay 2^n posibles combinaciones de esas entradas. El número de entradas puede variar de a .¿Qué es un algoritmo eficiente para crear todas las combinaciones posibles?

¿Cómo se puede crear cada combinación posible como una secuencia de números (es decir para n = 2: 00, 01, 10, 11), sin recurrir a mil IF?

+2

¿Has visto las respuestas a: http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – Shog9

Respuesta

15

Puede lograr eso simplemente imprimiendo los números 0..2^n-1 en forma binaria.

+0

Gracias, no pensé en eso . A veces la respuesta está justo en frente de tu nariz, pero no la ves. – Hans

1

Generando el mth elemento lexicográfico de una combinación matemática. . LINK

Y tienes que ver esto DON KNUTH (. Generación de todas las combinaciones posibles NOTA: C# código también se ofrecen allí.)

0

Si los valores posibles para cada entradas pueden ser solamente o , y solo quiere 0 y 1 combinación, ¿por qué no usa los enteros naturales (en forma binaria) hasta 2^(n-1) ... como lo sugiere Nick ... y formatee aquellos con ' 0 'relleno si quieres cadena ...

3

bien sólo tiene que utilizar enteros:

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

loco decimal a binario conversión levantado de this answer.

Salida:

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

Lamentablemente, no entiendo un poco de Python, principalmente uso Java. Pero intentaré darle una oportunidad. Gracias. – Hans

0

O utilice itertools:

import itertools 

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

Tenga en cuenta que el artículo es una tupla de 4 elementos en este caso.

Cuestiones relacionadas