反排序:如何均匀的分散对象?

这样一个应用也许很常见:

有n个学校,每个学校的学生的人数都不同,但可确定。来自这些不同学校的学生,全部打乱,要求同一学校的学生尽可能的分散。(如安排考场座位或者交友分组等应用)

 

这显然不是正常的按某一属性(年龄,年级,性别,成绩等)排序,而是无规则的排序。我不清楚是否有专业术语来表述这种算法,姑且叫反排序吧。

 

目前想到的办法:

  • 方法一,取所有学生的总数totalCount以内的随机数,做totalCount次循环,让每一学生按该随机数归位,如该随机数已生成过(该位已有学生),自动归位++,依此类推。这样易实现,但似乎随机,却仍然不是很均匀的分散。
  • 方法二,新建一个包含totalCount个元素的集合,首先找到人数最多的那个学校,把该学校所有学生均匀间隔 放入集合中指定位置,这样首先是很均匀的分散了,再找人数第二多的学校,也均匀间隔 放入集合,如集合中已存在对象,自动归位++,依此类推。这样似乎更合理,分散得更均匀。实现也不难。

 

但似乎还有更好的办法实现吧?

 

大家给个办法。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值