基于偏好的分组算法

我正在寻找一种方法来按照人们的偏好将人分类。

例如,假设有100名学生将被分配五个班级中的一个:

  • 科学 - 40个席位
  • 数学 - 15个座位
  • 历史 - 15个席位
  • 电脑 - 20个座位
  • 写作 - 10个座位
  • 每个学生有三个首选班,按照优先顺序排列。 最好的办法是分开学生,让尽可能多的人获得他们的第一和第二选择课程,同时确保没有班级的学生太多。

    我想通过以下方法来处理它:

  • 按照他们的首选班级将所有学生分组
  • 看看哪些班级的学生太多,哪些班级太少
  • 检查是否有任何超额预定班的学生有未被预订的第二选择课程
  • 相应地移动这些学生
  • 用第三选择课重复2-4
  • 虽然我觉得这是一个合理的实现,但我想知道是否有其他算法可以更好地解决这个问题。 我试过了所有的搜索,但是我找不到任何能解决这类问题的东西。


    从你的描述来看,这听起来非常像稳定婚姻问题的变化之一

    维基百科

    检查Wiki链接,你会看到Gale-Shapley算法的描述,这是一个很好的解决方案。

    Gale-Shapley算法

    链接地址: http://www.djcxy.com/p/71321.html

    上一篇: Algorithm for preference based grouping

    下一篇: can a method with return type as list be called from a thread