2012-03-19 12 views
5

Biorąc pod uwagę dodatnią liczbę całkowitą n, chcę wygenerować wszystkie możliwe kombinacje n bitów w programie Matlab.
Dla ex: Jeśli n = 3, to odpowiedź powinna byćJak wygenerować wszystkie możliwe kombinacje ciągów n-bitowych?

000 
001 
010 
011 
100 
101 
110 
111 

jaki sposób mogę to zrobić? Chcę faktycznie przechowywać je w macierzy. Próbowałem

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

ale dał błąd „W przypisania A (:) = B, liczbę elementów A i B muszą być takie same.

+0

można użyć bitowy licznik –

Odpowiedz

9

Tylko pętla nad wszystkimi liczb całkowitych [0,2^n), i wydrukować numer jako binarne Jeśli zawsze chcesz mieć n cyfry (np dodaj zera), to będzie wyglądać.

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

Edit: istnieje wiele sposobów, aby umieścić wyniki w matrycy . Najłatwiejszym jest użycie

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

które wytwarzają n -by- 2^n macierz typu char. Każdy wiersz jest jednym z ciągów bitowych.

Jeśli naprawdę chcesz przechowywać sznurki w każdym rzędzie, można to zrobić:

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

Jednakże, jeśli szukasz wydajnego przetwarzania danych, należy pamiętać, że liczby całkowite są już przechowywane w pamięci w formacie binarnym ! Więc wektor:

x = 0 : 2^n-1; 

Zawiera układy binarne w najbardziej wydajnej pamięci i wydajnej procesorze. Jedynym kompromisem jest to, że nie będziesz w stanie reprezentować wzorów zawierających więcej niż 32 z 64 bitów przy użyciu tej zwartej reprezentacji.

+0

Chcę właściwie przechowywać je w matrycy. Próbowałem dla n = 1: 2^4 r (n) = dec2bin (n, 5); koniec; ale to dało błąd "W zadaniu A (:) = B, liczba elementów w A i B musi być taka sama." –

+0

lub bardziej wydajna wersja: s = dec2bin (0: 2^n-1) –

+0

@HappyMittal: Kluczową ideą jest, że "wzorce" są po prostu liczbami całkowitymi od 0 do 2^n-1. Czy chcesz mieć macierz 'n'-by-' 2^n' booleans lub tablicę komórek o łańcuchach '2^n' o długości' n'? –

0

Tak wiele sposobów na wykonanie tej permutacji. Jeśli szukasz do wdrożenia z licznikiem tablicowym: ustaw tablicę liczników od 0 do 1 dla każdej z trzech pozycji (2^0,2^1,2^2). Niech numer początkowy będzie 000 (przechowywany w tablicy). Użyj licznika i zwiększ jego pierwsze miejsce (2^0). Numer będzie wynosił 001. Zresetuj licznik w pozycji (2^0) i zwiększ licznik o 2^1 i przejdź do pętli, aż ukończysz wszystkie liczniki.

0

Jest to odpowiedź jedna linia na pytanie, co daje podwójną tablicę wszystkich kombinacjach 2^n bitowych:

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

Powiązane problemy