这样一个应用也许很常见:
有n个学校,每个学校的学生的人数都不同,但可确定。来自这些不同学校的学生,全部打乱,要求同一学校的学生尽可能的分散。(如安排考场座位或者交友分组等应用)
这显然不是正常的按某一属性(年龄,年级,性别,成绩等)排序,而是无规则的排序。我不清楚是否有专业术语来表述这种算法,姑且叫反排序吧。
目前想到的办法:
- 方法一,取所有学生的总数totalCount以内的随机数,做totalCount次循环,让每一学生按该随机数归位,如该随机数已生成过(该位已有学生),自动归位++,依此类推。这样易实现,但似乎随机,却仍然不是很均匀的分散。
- 方法二,新建一个包含totalCount个元素的集合,首先找到人数最多的那个学校,把该学校所有学生均匀间隔 放入集合中指定位置,这样首先是很均匀的分散了,再找人数第二多的学校,也均匀间隔 放入集合,如集合中已存在对象,自动归位++,依此类推。这样似乎更合理,分散得更均匀。实现也不难。
但似乎还有更好的办法实现吧?
大家给个办法。谢谢!