如何只生成所有二进制组合的一半(MATLAB R2015b)

时间:2017-10-23 17:09:29

标签: matlab combinations

我使用以下代码生成长 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
实现效率的一种方法是只生成其中的一半,并通过恭维获得另一半。

我想知道如何修改上面的代码以便它只生成一半的二进制组合,或者我是否应该为此编写全新的代码?

1 个答案:

答案 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