给定正整数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 :(得分:9)
只需遍历[0,2^n)
中的所有整数,并将数字打印为二进制。如果您始终希望拥有n
位数(例如插入前导零),则可能如下所示:
for ii=0:2^n-1,
fprintf('%0*s\n', n, dec2bin(ii));
end
编辑:有多种方法可以将结果放入矩阵中。最简单的是使用
x = dec2bin(0:2^n-1);
将生成类型为n
的{{1}} - 2^n
矩阵。每行都是一个位串。
如果你真的想在每一行存储字符串,你可以这样做:
char
但是,如果您正在寻找有效的处理,您应该记住整数已经以二进制形式存储在内存中!所以,矢量:
x = cell(1, 2^n);
for ii=0:2^n-1,
x{ii} = dec2bin(ii);
end
以最高内存效率和CPU效率的方式包含二进制模式。唯一的权衡是,使用这种紧凑的表示法,你将无法用超过32位的64位表示模式。
答案 1 :(得分:1)
这是对该问题的单行答案,该问题为您提供了所有bitCombs = dec2bin(0:2^n-1) - '0'
位组合的双数组:
{{1}}
答案 2 :(得分:0)
这么多方法可以做到这种排列。如果您希望使用数组计数器实现:为三个位置(2 ^ 0,2 ^ 1,2 ^ 2)中的每一个设置一个从0到1的计数器数组。让起始编号为000(存储在数组中)。使用计数器并增加其第一位(2 ^ 0)。数字将为001.将计数器重置在位置(2 ^ 0)并将计数器增加到2 ^ 1并继续循环,直到您完成所有计数器。