給定一個正整數n,我想在matlab中生成所有可能的n位組合。
對於例如:如果n = 3,那麼答案應該是如何生成所有可能的組合的n位字符串?
000
001
010
011
100
101
110
111
我該怎麼辦呢? 我想實際將它們存儲在矩陣中。我試圖
for n=1:2^4
r(n)=dec2bin(n,5);
end;
,但給了錯誤「在分配A(:) = B,A和B元素的數量必須相同。
給定一個正整數n,我想在matlab中生成所有可能的n位組合。
對於例如:如果n = 3,那麼答案應該是如何生成所有可能的組合的n位字符串?
000
001
010
011
100
101
110
111
我該怎麼辦呢? 我想實際將它們存儲在矩陣中。我試圖
for n=1:2^4
r(n)=dec2bin(n,5);
end;
,但給了錯誤「在分配A(:) = B,A和B元素的數量必須相同。
只是循環遍歷[0,2^n)
所有整數,打印數量爲二進制如果你總是希望有n
數字(如插入前導零),這看起來像:
for ii=0:2^n-1,
fprintf('%0*s\n', n, dec2bin(ii));
end
編輯:有許多的辦法把結果放在一個矩陣。 最簡單的是使用
x = dec2bin(0:2^n-1);
這將產生char
類型的n
-by- 2^n
矩陣。每行是位串之一。
如果你真的想存儲字符串每行中,你可以這樣做:
x = cell(1, 2^n);
for ii=0:2^n-1,
x{ii} = dec2bin(ii);
end
不過,如果你正在尋找有效的處理,你應該記住,整數已經存儲在內存中的二進制!所以,向量:
x = 0 : 2^n-1;
包含儘可能以最高效的內存和CPU高效的方式二進制模式。唯一的折衷是,使用這種緊湊的表示方式,您將無法使用64位以上的32位表示模式。
我想實際上它們存儲在矩陣。我試過 n = 1:2^4 r(n)= dec2bin(n,5); 結束; 但這給了錯誤「在賦值A(:) = B中,A和B中的元素數量必須相同。」 – 2012-03-19 09:08:09
或更高效的版本:s = dec2bin(0:2^n-1) – 2012-03-19 09:15:02
@HappyMittal:關鍵的思想是「模式」只是從0到2^n-1的整數。你想要一個'n'-by-'2^n'布爾矩陣,或者一個長度爲'n'的2^n'字符串的單元陣列嗎? – 2012-03-19 09:28:46
很多方式來做這個排列。如果你想用一個數組計數器來實現:爲三個位置(2^0,2^1,2^2)中的每一個設置一個從0到1的計數器數組。讓起始號碼爲000(存儲在數組中)。使用計數器並增加其第一位(2^0)。編號將爲001.在位置(2^0)重置計數器並在2^1增加計數器並循環直到完成所有計數器。
這是一個單行的答案,讓你所有2^n
位組合的雙陣列的問題:
bitCombs = dec2bin(0:2^n-1) - '0'
可以使用位計數器 – 2012-03-19 09:01:03