如何有效地将学生与他们喜欢的部分相匹配?

时间:2013-08-12 07:41:23

标签: algorithm math language-agnostic matching

假设您有一个包含5个部分的课程:A,B,C,D,E。每个部分在不同的时间开会,因此注册该课程的学生将优先选择他们将参加的部分(他们只能参加一个部分)。当学生注册该课程时,他们会按照优先顺序列出他们希望选择的3个部分。

每个部分都有n名学生。让我们说简单来说,正好有n * 5名学生注册了该课程。

所以,问题是:你如何有效地将学生与他们喜欢的部分相匹配?

我已经看到了一些类似匹配场景问题的问题,但是没有一个问题非常合适,我担心我对算法的了解不足以构成我自己的问题。顺便说一下,这是一个真正的问题,我知道有问题的部门需要花几天时间手工完成。

3 个答案:

答案 0 :(得分:3)

要确定是否可以将每个学生分配到首选部分,请在以下网络中构建整数值最大流量,其中三个X代表容量-1,从学生到他们喜欢的部分的弧线(多项式时间通过例如push-relabel算法)。当且仅当最大流量移动m = n*5单位时才有解决方案;然后分配由每个学生的哪些弧饱和确定。

capacity-1 arcs            capacity-n arcs
       |                          |
       v                          v
         student 1
       / student 2       section1
       /  .           X  section2 \
source <  .           X  section3 > sink
       \  .           X  section4 /
       \ student m-1     section5
         student m

要考虑优先顺序,切换到解决最小成本流问题,仍然可以解决多时间问题(尽管您可能会发现通用LP解算器的网络单工模式更容易使用)为每个弧指定的成本。根据您认为合理的内容,为每个偏好级别选择一个分数。

我很肯定以前曾经问过这个问题,但是调度问题就像雪花一样,我不能仅通过关键字找到旧问题。

答案 1 :(得分:0)

也许你可以将它们随机分配到各个部分。接下来,您选择随机的学生对,并考虑交换他们是否改善了分布(它是否会增加与他们的偏好匹配?)。您可以迭代直到X迭代无法改进。 这显然是一种非常天真的方法,但如果您的样本很小,它可能会很快收敛。您不能保证您拥有最佳解决方案,但因此您需要一种可能无法实施的强力方法。

答案 2 :(得分:0)

是否有评分系统,如果学生1在A部分,分数是20? (另一方面,如果学生2在A部分,得分是15?

我问,因为A部分只留下一个位置,并且学生1和2都最喜欢A部分,那么谁先获得注册就会获得该位置。而不是谁最适合(更高的分数)。

如果没有得分,你可以循环学生并把它们放在他们喜欢的部分。如果第一个是满的,那么尝试他们的第二个偏好,然后是下一个。如果学生喜欢的所有三个部分都已填写,只需将他们注册到未填写的部分。

(如果有得分则会有所不同,因为你必须为每个部分设置优先级队列并最大化它。)