只是一个好奇的问题。还记得在课堂小组中,教授会将人分成一定数量的小组(n
)吗?
我的一些教授会列出一个与n
人愿意合作的人和n
一个人不想与每个学生一起工作的人,然后神奇地变成一组{ {1}}学生可以与他们喜欢的人匹配,避免与他们不喜欢的人合作。
对我来说,这个算法听起来很像背包问题,但我想我会问你对这类问题的解决方法是什么。
编辑:发现an ACM article描述与我的问题完全相同的内容。为了似曾相识,请阅读第二段。
答案 0 :(得分:5)
对我而言,这听起来更像某种clique问题。
我看到问题的方式,我设置了以下graph:
然后将图形划分为大小为n的集团。 (假设学生人数可被n整除)
如果这是不可能的,我可能会让边缘上的第一个约束滑动,并且只要两个人都没有明确表示他们不想与另一个人合作,就会在两个人之间产生边缘。 / p>
至于有效解决这个问题的方法,我不知道,但这有望让你更接近对这个问题的一些见解。
答案 1 :(得分:3)
你可以很容易地将其建模为一个聚类问题,你甚至不需要定义一个空间,你实际上可以只定义距离:
如果他们俩想要一起工作,那么让两个人非常接近。 如果其中一个想要与另一个合作,请关闭。 中等距离,如果只是冷漠。 如果任何一方不想与另一方合作,那就远了。
然后你可以找到群集,但是。然后拆分任何过大的集群,确信集群中的人都可以很好地协同工作。
答案 2 :(得分:1)
这个问题可能是暴力强迫的,因此我的方法首先是暴力破解它,然后在我得到更好的想法时修复它。
答案 3 :(得分:0)
您可以使用几种算法。一个很好的例子是所谓的稳定婚姻问题",它有一个完美的解决方案。你可以在这里阅读更多相关信息:
http://en.wikipedia.org/wiki/Stable_marriage_problem
稳定的婚姻问题只适用于两组人(婚姻案件中的男/女)。如果你想形成一对你可以使用一个变化,稳定的室友问题。在这种情况下,您可以创建对,但每个人都来自一个池。
但是你要求一个团队(我将其转化为每队2人)。在这种情况下,你可以让每个人填写他们最好的最差匹配,然后运行