您好我正在建立一个项目,学生正在报名参加在全国多个城市进行的考试。虽然报名学生提供了三个城市的列表,他们希望按照自己的喜好进行考试。因此,学生可能会说他对考试中心的首选是纽约,其次是芝加哥,其次是波士顿。
现在请记住,由于考试中心的能力有限,他们无法容纳每个学生的第一选择。但是我们会尝试提供尽可能多的学生第一或第二选择的中心,并尽可能避免学生必须给予学生的第三选择中心
现在任何一种排序算法的想法都会使这个过程更加有效。这样做的简单方法是首先通过尽可能多的第一选择的学生列表,然后通过第二个选择列表并分配。然而,这可能会导致排名第一的学生获得他们的第一个中心,最后一个学生获得他们的第三选择,或者更糟糕的是没有他们的选择。任何可以提高效率的东西
答案 0 :(得分:6)
听起来像是经典stable marriages problem或college admission problem的变体。维基百科列出了前者的线性时间(在人数中的偏好数O( n ²))算法; NRMP描述后者的efficient algorithm。
我怀疑如果你为学生随机生成考试地点的偏好(每个考试地点Fisher–Yates shuffle)然后应用稳定婚姻算法,你将获得一个非常公平和有效的解决方案。
答案 1 :(得分:3)
这个问题可以表述为minimum cost flow的一个实例。设N是学生人数。让每个学生成为一个容量为1的源顶点。让每个考试中心成为一个具有容量的汇点顶点,以及它的容量。从每个学生到他的第一,第二和第三选择做一个弧。将首选弧的成本设置为0;第二选择弧的成本为1;并且第三选择的成本为N + 1。
找出移动N个流量单位的最小成本流量。假设你的求解器返回一个完整的解决方案(它应该;流LP是完全单模的),每个学生将一个单元流向他指定的中心。这些成本最大限度地减少了第三选择任务的数量,并通过第二选择任务的数量打破了联系。
答案 2 :(得分:0)
有一类算法可以解决这种称为拍卖的有限资源的分配问题。基本上在这种情况下,每个学生都会得到一定数额的钱(他们可以花费的数量),然后你的软件会在这些学生之间进行出价。您可以根据偏好使用公式。
一个例子是教程时间。如果你放下你的偏好,那么你会有效地为这些时间出价,而在你不想要的时候出价更少。因此,如果您没有获得自己的偏好,那么您可以获得更多“资金”来竞标其他教程。