如何生成长度为n的所有二进制向量,其中k个元素是顺序的?
我知道如何制作一次这样的序列的所有组合。但我正在寻找一种算法来逐一构建它们。
此代码生成长度为a+b
并且a
为零的元素的所有二进制向量,并将它们存储在V
中:
function V = build_2(a,b)
C = nchoosek(1:a+b,b);
V = zeros(size(C,1),a+b);
for i=1:size(V,1)
V(i,C(i,:)) = 1;
end
答案 0 :(得分:1)
这个怎么样?
for n = 0:2^(a+b)-1
aux = dec2bin(n,a+b)-'0'; %// or use: aux = de2bi(n,a+b);
if sum(aux)~=b
continue
end
v = aux; %// desired result
disp(v) %// do stuff with this v
end
这将生成长度为a+b
的所有二进制向量,并跳过那些不具有b
个的二进制向量。 bin2dec
用于生成每个二进制向量。由于bin2dec
提供了一个字符串,因此减去'0'
会转换为数字向量。