如何生成所有可能的组合的n位字符串?
给定一个正整数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