用处1:小组有N个耗时不等的任务,小组有M个能力不等的人,将任务进行合理的平均分配。
用处2:数据库表的关系表需要分表,如漫画的图片链接表每个漫画的图片数量不同,按服务器的性能进行分配数据。
计算推导
分数值:33,47,22,6,38,56
序号及权重:A:1 B:2 C:3
1.每人轮流按顺序拿
A: 33,6
B:47,38
C:22,56
2.将任务耗时降序排序按ABC顺序轮询拿
分数值:56,47,38,33,22,6
序号及权重:A:1 B:2 C:3
A: 56,33
B: 47,22
C: 38,6
3.在2的基础上ABC每轮询一次后按拿的分数升序,分数低的先拿(贪婪分配?这时候权重算是1:1了)
分数值:56,47,38,33,22,6
序号及权重:A:1 B:2 C:3
A: 56,6
B: 47,22
C: 38,33
(开始平均了)
4.在3的基础上为ABC加入权重,但是轮询一次后已拿的分数除以权重(权重分数)再进行升序
因为数据量不大,跟3的结果一样,但是用代码随机生成测试,分配不是很合理
5.将权重看作次数,分数按顺序分配,按权重分数升序拿,每拿一次权重减1,某个单位权重为0时分数不分配给该单位。全部单位权重都为0时恢复权重值重新轮