Algorithm 生成5个二进制数的所有可能组合,使总和小于或等于3
如何在Matlab中生成一个矩阵,该矩阵有5行和特定数量的列,元素只能是二进制数,列和必须小于或等于3 这个怎么样:最大二进制数,可以用5表示,它是2^5-1=31,然后跳过这些,找到有数字之和的数字一些没有循环的可能性: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 =
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'