2012-03-19 79 views
5

Dado un número entero positivo n, quiero generar todas las combinaciones n bits posibles en matlab.
Por ejemplo: Si n = 3, entonces la respuesta debe serCómo generar todas las combinaciones posibles cadenas de n bits?

000 
001 
010 
011 
100 
101 
110 
111 

¿Cómo lo hago? Quiero almacenarlos en la matriz. Probé

for n=1:2^4 
r(n)=dec2bin(n,5); 
end; 

pero que dieron error "En una asignación A (:) = B, el número de elementos en A y B debe ser el mismo.

+0

puede utilizar contador de bits –

Respuesta

9

Sólo bucle sobre todos los números enteros en [0,2^n), y imprimir el número en formato binario Si siempre quiere tener n dígitos (por ejemplo, insertar ceros a la izquierda), este sería el resultado:.

for ii=0:2^n-1, 
    fprintf('%0*s\n', n, dec2bin(ii)); 
end 

Editar: hay un número de maneras de poner los resultados en una matriz . Lo más fácil es utilizar

x = dec2bin(0:2^n-1); 

que producirá una matriz n -by- 2^n de tipo char. Cada fila es una de las cadenas de bits.

Si realmente desea almacenar cadenas en cada fila, se puede hacer esto:

x = cell(1, 2^n); 
for ii=0:2^n-1, 
    x{ii} = dec2bin(ii); 
end 

Sin embargo, si usted está buscando un procesamiento eficiente, se debe recordar que los números enteros ya están almacenados en la memoria en el sistema binario ! Por lo tanto, el vector:

x = 0 : 2^n-1; 

Contiene los patrones binarios de la forma más eficiente en cuanto a eficiencia de memoria y CPU posible. El único inconveniente es que no podrá representar patrones con más de 32 de 64 bits utilizando esta representación compacta.

+0

Quiero guardar realidad en la matriz. Intenté para n = 1: 2^4 r (n) = dec2bin (n, 5); final; pero dio el error "En una tarea A (:) = B, el número de elementos en A y B debe ser el mismo". –

+0

o una versión más eficiente: s = dec2bin (0: 2^n-1) –

+0

@HappyMittal: La idea clave es que los "patrones" son solo los enteros de 0 a 2^n-1. ¿Desea una matriz de booleanos 'n'-by-'2^n', o una matriz de celdas de' 2^n' cadenas de longitud 'n'? –

0

Tantas formas de hacer esta permutación. Si está buscando implementar con un contador de matriz: establezca una matriz de contadores que vaya de 0 a 1 para cada una de las tres posiciones (2^0,2^1,2^2). Deje que el número inicial sea 000 (almacenado en una matriz). Usa el contador e incrementa su 1er lugar (2^0). El número será 001. Restablezca el contador en la posición (2^0) y aumente el contador en 2^1 y siga un ciclo hasta completar todos los contadores.

0

Esta es una respuesta de una línea a la pregunta que le da un doble conjunto de todas las combinaciones de bits 2^n:

bitCombs = dec2bin(0:2^n-1) - '0'

Cuestiones relacionadas