neo*_*neo 10 algorithm variable-assignment
我需要为m个课程分配n个人,每个人指定他们的第一和第二个偏好,每个课程都有最多的人参加.每个人只能参加一门课程.该算法应该找到一个解决方案
我猜这不是一个不常见的问题,但搜索没有回复太有用,因此我决定推出自己的.这是我到目前为止所得到的:
由于最后一步,我仍然认为该算法不会找到问题的最佳解决方案.任何想法如何使这个更好?还有其他算法可以解决这个问题吗?
小智 5
如果可能,将每个人都安排在他们的首选课程
如果有人没有得到它,请将它们放在第二个选择中.
现在,我们可能会得到一些没有得到任何选择的人.("失败者".)
找一个有他的第一选择课程的人,这也是"失败者"的第二选择.这个家伙将被重新分配到他的第二选择,而"失败者"将占据他的位置.如果没有这样的人,那么你的问题是无法解决的.
请注意,这样可以最大限度地增加首选人数:
如果你有第二个选择,那么它意味着:
(可能最后一点有点难以理解,所以这里是重写:)
对于具有第一选择A和第二选择B的人X:
如果X得到选择B,那么: