Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何生成所有可能的n位字符串组合?_Matlab_Bit Manipulation - Fatal编程技术网

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,我想在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,
    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
字符串的单元格数组?