Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 生成5个二进制数的所有可能组合,使总和小于或等于3_Algorithm_Matlab - Fatal编程技术网

Algorithm 生成5个二进制数的所有可能组合,使总和小于或等于3

Algorithm 生成5个二进制数的所有可能组合,使总和小于或等于3,algorithm,matlab,Algorithm,Matlab,如何在Matlab中生成一个矩阵,该矩阵有5行和特定数量的列,元素只能是二进制数,列和必须小于或等于3 这个怎么样:最大二进制数,可以用5表示,它是2^5-1=31,然后跳过这些,找到有数字之和的数字一些没有循环的可能性: 使用字符串: D = 5; S = 3; numbers = str2mat(dec2bin(0:2^D-1))-'0'; numbers = numbers(sum(numbers,2)<=S,:); 以下是一个矢量化解决方案,可有效地提供所有事件: Bstr =

如何在Matlab中生成一个矩阵,该矩阵有5行和特定数量的列,元素只能是二进制数,列和必须小于或等于3

这个怎么样:最大二进制数,可以用5表示,它是2^5-1=31,然后跳过这些,找到有数字之和的数字一些没有循环的可能性:

  • 使用字符串:

    D = 5;
    S = 3;
    numbers = str2mat(dec2bin(0:2^D-1))-'0';
    numbers = numbers(sum(numbers,2)<=S,:);
    

  • 以下是一个矢量化解决方案,可有效地提供所有事件:

    Bstr =dec2bin(1:31); 
    Bstr(sum(dec2bin(0:31),2)<=sum('00111'),:)=='1'
    
    Bstr=dec2bin(1:31);
    
    Bstr(sum(dec2bin(0:31),2)有很多方法可以做到这一点,到目前为止你尝试了什么?注意,如果你使用Matlab,你通常会想将其矢量化。请参阅我基于你的答案。谢谢你的提示,丹尼斯!
    numbers = [zeros(1,D); cell2mat(arrayfun(@(s) fliplr(full(sparse((1:nchoosek(D,s)).'*ones(1,s), nchoosek(1:D,s), 1))), 0:S, 'uni', 0).')];
    
    Bstr =dec2bin(1:31); 
    Bstr(sum(dec2bin(0:31),2)<=sum('00111'),:)=='1'