我需要为m个课程分配n个人,每个人指定他们的第一和第二个偏好,每个课程都有最多的人参加。每个人只能参加一门课程。该算法应该找到一个解决方案
我猜这不是一个不常见的问题,但搜索没有任何回报,因此我决定推出自己的问题。这是我到目前为止所得到的:
由于最后一步,我仍然认为该算法不会找到问题的最佳解决方案。任何想法如何使这个更好?还有其他算法可以解决这个问题吗?
答案 0 :(得分:5)
如果可能的话,将每个人都安排在他们的首选课程中。
如果有人没有得到它,请将它们放在第二个选择中。
现在,我们可能会得到一些没有得到任何选择的人。 (“失败者”。)
找到一个获得他的第一选择课程的人,这也是“失败者”的第二选择。这个家伙将被重新分配到他的第二选择,而“失败者”将占据他的位置。如果没有这样的人,那么你的问题就无法解决了。
请注意,这样可以最大限度地增加首选人数:
如果你有第二个选择,那么它意味着:
(可能最后一点有点难以理解,所以这里有一个重写:)
对于具有第一选择A和第二选择B的人X:
如果X得到选择B,那么:
答案 1 :(得分:2)
鉴于 n 男性和 n 女性,在哪里 每个人都排名所有成员 具有独特数字的异性 在1和 n 之间按顺序排列 偏爱,嫁给男人和女人 这样就没有两个了 两性的人都会 而不是他们的彼此 现有合作伙伴如果没有这样的话 人们,所有的婚姻都是 “稳定的”。
考虑到@bdares评论,以及课程容量有限这一事实很难将问题视为稳定匹配。
我会用linear program作为{{3}}来解决这个问题,其目标函数取决于获得第一选择的人数和课程大小作为约束。
答案 2 :(得分:0)
第一个问题可以建模为最大基数二分匹配问题。第二个问题可以建模为加权二分匹配问题(也称为分配问题)。
答案 3 :(得分:0)
听起来像linear bottleneck assignment problem。当您在维基页面中时,请查看参考部分中提供的链接。