如何生成长度为n的所有二进制向量,其中k个元素是顺序的?

时间:2014-02-01 15:47:56

标签: matlab

如何生成长度为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

1 个答案:

答案 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'会转换为数字向量。