2012-03-19 31 views
5

Cho một số nguyên dương n, tôi muốn tạo tất cả các kết hợp bit n có thể có trong MATLAB.
Đối với ví dụ: Nếu n = 3, sau đó trả lời nên đượcLàm thế nào để tạo ra tất cả các chuỗi kết hợp có thể có n-bit?

000 
001 
010 
011 
100 
101 
110 
111 

Làm thế nào để làm điều đó? Tôi muốn lưu trữ chúng trong ma trận. Tôi cố gắng

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

nhưng điều đó đã lỗi "Trong một bài tập A (:) = B, số phần tử trong A và B phải giống nhau.

+0

bạn có thể sử dụng bit truy cập –

Trả lời

9

Chỉ cần lặp qua tất cả các số nguyên trong [0,2^n), và in số như nhị phân Nếu bạn luôn muốn có n chữ số (ví dụ chèn zeros hàng đầu), điều này sẽ trông giống như:.

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

Edit: có một số cách để đưa các kết quả trong một ma trận . Dễ nhất là sử dụng

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

mà sẽ tạo ra một ma trận n -by- 2^n loại char. Mỗi hàng là một trong các chuỗi bit.

Nếu bạn thực sự muốn để lưu trữ các chuỗi trong mỗi hàng, bạn có thể làm điều này:

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

Tuy nhiên, nếu bạn đang tìm kiếm xử lý hiệu quả, bạn nên nhớ rằng số nguyên đã được lưu trong bộ nhớ trong hệ nhị phân ! Vì vậy, vectơ:

x = 0 : 2^n-1; 

Chứa các mẫu nhị phân hiệu quả nhất và hiệu quả của CPU có thể. Sự cân bằng duy nhất là bạn sẽ không thể đại diện cho các mẫu có hơn 32 64 bit bằng cách sử dụng biểu diễn nhỏ gọn này.

+0

Tôi muốn thực sự lưu trữ chúng trong ma trận. Tôi đã thử cho n = 1: 2^4 r (n) = dec2bin (n, 5); kết thúc; nhưng lỗi đó "Trong bài tập A (:) = B, số phần tử trong A và B phải giống nhau." –

+0

hoặc phiên bản hiệu quả hơn: s = dec2bin (0: 2^n-1) –

+0

@HappyMittal: Ý tưởng chính là "mẫu" chỉ là số nguyên từ 0 đến 2^n-1. Bạn có muốn một ma trận 'n'-by-'2^n' boolean, hay một mảng ô của' 2^n' chuỗi có độ dài 'n'? –

0

Có rất nhiều cách để thực hiện hoán vị này. Nếu bạn đang muốn thực hiện với một bộ đếm mảng: thiết lập một mảng các bộ đếm đi từ 0 đến 1 cho mỗi vị trí trong số ba vị trí (2^0,2^1,2^2). Hãy để số bắt đầu là 000 (được lưu trữ trong một mảng). Sử dụng bộ đếm và tăng vị trí thứ nhất (2^0). Số sẽ là 001. Đặt lại bộ đếm tại vị trí (2^0) và tăng số đếm ở 2^1 và tiếp tục cho đến khi bạn hoàn thành tất cả các bộ đếm.

0

Đây là một câu trả lời một dòng cho câu hỏi mang đến cho bạn một mảng đôi của tất cả các tổ hợp 2^n bit:

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

Các vấn đề liên quan