MATLAB-整数分割方案的生成

用来分割整数的MATLAB函数

今天仿真需要用到分割整数的功能,没有查到Matlab里面关于整数分割的函数(可能因为我比较菜),所以自己写了一个将整数分割成任意数目的函数。
因为用的是递归,所以运行速度可能有点慢,但是对于比较小的数或者计算量少的场景,还是比较有用的。

话不多说,上代码!

主函数

function table_part = calcDivide(num_sum,num_part)
%% num_sum是被分割的数,num_part是被分割成的份数
%% 获取切分方案
list_sum = (1:num_sum+1)-1;
table_cut = calcNumCut(list_sum,num_part,[],[]);
table_part(:,1)=table_cut(:,1);
for ind = 2:num_part-1
   table_part = [table_part,table_cut(:,ind)-table_cut(:,ind-1)]; 
end
table_part = [table_part,num_sum - table_cut(:,end)];

子函数

function [table_cut,list_cut] = calcNumCut(list_sum,num_part,table_cut,list_cut)
%% 递归获取切分位置
num_space = length(list_sum);
num_cut = num_part-1;
for ind_cut = 1:num_space
    if(num_cut == 1)
        temp_list_cut = [list_cut,list_sum(ind_cut)];
        if(isempty(table_cut))
            table_cut = temp_list_cut;
        else
            table_cut = [table_cut;temp_list_cut];
        end
    else
        list_cut = [list_cut,list_sum(ind_cut)];
        [table_cut,list_cut] = calcNumCut(list_sum(ind_cut:end),num_part-1,table_cut,list_cut);
    end
end
if(~isempty(list_cut))
    list_cut(end) = [];
end

有了这两个函数就能完成完整功能了!

不过因为用的是递归,而且是对所有情况的穷举,所以运算量会随着被分割的整数的大小和分割数目成指数增加。所以能再优化一下的话就更好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值