一个好奇的问题。还记得那些在课堂小组作业时,教授会将人们分成固定数量(n
)的小组吗?
我的一些教授会从每个学生那里获取一个希望合作的n
人名单和一个不想与之合作的n
人名单,然后神奇地组成n
人的小组,让学生与他们喜欢的人匹配,并避免与他们不喜欢的人一起工作。
对我来说,这个算法听起来很像一个背包问题,但我想问一下你们在处理这种问题时采用的方法是什么。
编辑: 找到了一篇ACM文章,描述了与我问题完全相同的内容。请阅读第二段以获取似曾相识的感觉。
一个好奇的问题。还记得那些在课堂小组作业时,教授会将人们分成固定数量(n
)的小组吗?
我的一些教授会从每个学生那里获取一个希望合作的n
人名单和一个不想与之合作的n
人名单,然后神奇地组成n
人的小组,让学生与他们喜欢的人匹配,并避免与他们不喜欢的人一起工作。
对我来说,这个算法听起来很像一个背包问题,但我想问一下你们在处理这种问题时采用的方法是什么。
编辑: 找到了一篇ACM文章,描述了与我问题完全相同的内容。请阅读第二段以获取似曾相识的感觉。
这个问题可以通过暴力破解来解决,因此我的方法是先进行暴力破解,然后在我有更好的想法时再进行修复。
有几种算法可以使用。一个很好的例子是所谓的“稳定婚姻问题”,它有一个完美的解决方案。您可以在这里阅读更多信息:
http://en.wikipedia.org/wiki/Stable_marriage_problem
稳定婚姻问题只适用于两组人(在婚姻案例中是男性/女性)。如果您想形成一对,可以使用变体,即稳定的室友问题。在这种情况下,您创建了一对,但每个人都来自单个池。
n
的使用相当普遍。每个学生都必须喜欢和讨厌同样数量的人吗? - IVlad