Matlab 如何生成所有可能的n位字符串组合?
给定一个正整数n,我想在matlab中生成所有可能的n位组合。Matlab 如何生成所有可能的n位字符串组合?,matlab,bit-manipulation,Matlab,Bit Manipulation,给定一个正整数n,我想在matlab中生成所有可能的n位组合。 例如:如果n=3,则答案应为 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, fp
例如:如果n=3,则答案应为
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的方式包含二进制模式。唯一的折衷是,使用这种紧凑的表示法,您将无法用超过32位的64位来表示模式。执行此排列的方法有很多。如果您希望使用数组计数器实现,请设置counte数组三个位置(2^0,2^1,2^2)中的每个位置的rs从0变为1。让起始数字为000(存储在数组中)。使用计数器并递增其第一位(2^0)。数字将为001。在位置(2^0)重置计数器然后在2^1处增加计数器,循环直到完成所有计数器。这是对问题的一行回答,给出了所有
2^n
位组合的双数组:
bitCombs=dec2bin(0:2^n-1)-'0'
我想把它们实际存储在矩阵中。我尝试了n=1:2^4 r(n)=dec2bin(n,5);end;但这给出了一个错误:“在赋值A(:)=B中,A和B中的元素数量必须相同。”或者更有效的版本:s=dec2bin(0:2^n-1)@HappyMittal:关键思想是只是0到2^n-1之间的整数。您想要一个布尔值为n
-by-2^n
的矩阵,还是长度为n
的2^n
字符串的单元格数组?