`
hilly
  • 浏览: 46656 次
  • 性别: Icon_minigender_1
  • 来自: **
社区版块
存档分类
最新评论

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

阅读更多

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

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

 

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

 

目前想到的办法:

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

 

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

 

大家给个办法。谢谢!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics