在Matlab中查找唯一二进制排列的快速方法

时间:2017-09-10 15:41:56

标签: algorithm matlab unique permutation

我正在寻找一种非常快速的方法来在Matlab中创建二进制数的唯一排列。

例如 - 在:[0 0 1]

成为 - 出:[1 0 0; 0 1 0; 0 0 1]

这就是我现在使用的:

M = [zeros(1,L),ones(1,up)];
n = numel(M);
k = sum(M);
c = nchoosek(1:n,k);
m = size(c,1);

binary = zeros(m,n);
binary(sub2ind([m,n],(1:m)'*ones(1,up),c)) = 1;

此代码工作正常并提供我期望的输出,但对于L=16和更大的up值,它的工作速度非常慢。

是否有任何提示我可以尝试改善较大值 L 的性能?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

我用来列出所有可能无序且无重复排列的最快和最通用的函数是Jan Simon的vchoosek mex函数,可以在matlab文件交换中找到。

我希望这有帮助!