只是一个好奇的问题。还记得在课堂小组作业中,教授会将人们分成一定数量的小组(n
)吗?
我的一些教授会从每个学生那里拿出n
一份想共事和n
不想共事的人的名单,然后神奇地将n
学生与他们喜欢并避免与之共事的人配对他们不喜欢的人。
对我来说,这个算法听起来很像一个背包问题,但我想我会问你解决这类问题的方法是什么。
编辑:找到一篇 ACM 文章,描述的内容与我的问题完全一样。阅读第二段的似曾相识。
只是一个好奇的问题。还记得在课堂小组作业中,教授会将人们分成一定数量的小组(n
)吗?
我的一些教授会从每个学生那里拿出n
一份想共事和n
不想共事的人的名单,然后神奇地将n
学生与他们喜欢并避免与之共事的人配对他们不喜欢的人。
对我来说,这个算法听起来很像一个背包问题,但我想我会问你解决这类问题的方法是什么。
编辑:找到一篇 ACM 文章,描述的内容与我的问题完全一样。阅读第二段的似曾相识。
你可以很容易地将其建模为一个聚类问题,你甚至不需要定义一个空间,你实际上可以只定义距离:
如果他们都想一起工作,让两个人非常接近。如果其中一个想要与另一个合作,请关闭。如果只是冷漠,中等距离。如果其中一方不想与另一方合作,则相距甚远。
然后你可以找到集群,是的。然后拆分任何规模过大的集群,并确信集群中的人都能很好地一起工作。
这个问题可以是暴力破解的,因此我的方法是首先暴力破解它,然后在我有更好的想法时修复它。
您可以使用几种算法。一个很好的例子就是所谓的“稳定婚姻问题”,它有一个完美的解决方案。你可以在这里读更多关于它的内容:
http://en.wikipedia.org/wiki/Stable_marriage_problem
稳定的婚姻问题只适用于两组人(婚姻案例中的男性/女性)。如果你想结对,你可以使用一个变体,稳定室友问题。在这种情况下,您创建对,但每个人都来自一个池。
但是您要求一个团队(我将其翻译为每个团队> 2人)。在这种情况下,您可以让每个人填写他们最好到最差的匹配,然后运行