整数分配计算方法

整数分配计算方法 

作者:AntoniotheFuture

关键词:整数、任务分配,算法

开发平台:不限

开发语言:不限

简介:使用算法对一个整数按一组比例分配,要求分配后每一项都是整数(尽可能符合比例),且其和等于总数。

现有一个算法应用题:某公司全年的业绩目标为新增M (M为整数)个客户。小明要尽可能地把这个目标按一组确定的百分比数字(数组[K])将全年目标分配到每个月(找最优解),要求每个月的目标都是整数,每个月目标之和等于全年目标,试求算法。

再比如,老板有X个工人,他们的工资不一样,现在有M(M为整数)个生产任务,要按他们的工资比例分配到每个人,试求算法。

在此问题中,我们可以发现,若是对一个整数直接进行系数分配,往往会出现非整数,显然,这个问题不能简单处理。

于是我想到这么一个算法:
1、将总数M按比例[K]分配后,对每个月的数值舍去小数,得到数组[n]。
2、M减去[n]的和得到差值N,请注意,这里的N是一定小于数组的长度(比如说12个月)。
3、得到的每个月数值[n]除以总数,得到实际占比,列为数组[K']。
4、将实际占比[K']与预期占比[K]的差,加上排序系数(可以用月份除以1000000),进行中国式排序得到排序结果[s]。
5、遍历排序结果[s],如果小于N就为1,如果大于N,就为0。写入数组[t]。
6、将数组[t]加回[n],得到结果数组[b],即为最后分配结果。

通俗来说,就是分配后舍去小数点,跟預期的比率差别大的,加回1。

下面我们来看看Excel中如何操作:


首先我们获得了一个总数和8个分配系数:



总数乘以系数,再舍去小数:



计算初步分配结果后与总数的差:



计算每个分配结果占总数的比,然后用原参数减去,得到每个分配的差(也可以理解为舍去的小数占总数的占比),再加上排序参数,用于中国式排序(相同成绩不同位)



排序:



判断排名结果是否小于总差,正则为1,否为0,用于补回总差。



汇总结果,检验,显示是符合要求的:


 



也可以在程序中使用这个算法,具体怎么写就靠大家集思广益了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值