我使用以下代码生成长 n_t 的所有二进制组合 M 。
来源:https://www.mathworks.com/matlabcentral/newsreader/view_thread/164002
.bat
对于n_t> 20,此代码非常缓慢。
由于给定长度的二元组合可以配对,例如
function M = all_poss(n_t)
% algorithm: recursion
% remarks: slow for n_t>22
if n_t > 1
L = all_poss(n_t - 1);
row = size(L,1);
M = [zeros(row,1) L; ones(row,1) L];
else
M = [0;1];
end
实现效率的一种方法是只生成其中的一半,并通过恭维获得另一半。
我想知道如何修改上面的代码以便它只生成一半的二进制组合,或者我是否应该为此编写全新的代码?
答案 0 :(得分:-1)
function M = all_poss_half(n_t)
n=1;
M = [0;1];
while n<n_t
N = cat(2,zeros(size(M,1),1),M);
M = cat(1,N,flipud(1-N)); %flipud(.) is not essential here.
n=n+1;
end