平行志愿录取的算法
前年儿子中考后报考高中时,零志愿后是9个平行志愿(到底几个我也记不清了),零志愿是提前录取就不说了,平行志愿是按志愿顺序和分数高低逐个录取,我当时还考虑了一下,实现这个算法还挺不容易的,因为动脑筋太累也就不再考虑这个算法了。作为程序员你考虑过这个吗?或你自己考虑实现下看看。关于平行志愿是什么意思,可以自行查找。
又过了两年,儿子现在上高二了,明年要高考,高考上海也是平行志愿,当然提前批和后面批我们就不考虑算法了。因为还有一年了,所以上网补补课,学习下如何填报志愿,其中对于平行志愿的录取是这样介绍的:
1. 所有考生按分数从高到低排名,如果总分相等则又按科目分数的排名,总之就是准备好一个分数从高到低的名单备用。
2. 每个学校各专业组在本地的招生人数当然也定了,这个也备用。
3. 从分数最高的学生开始,查找他报的平行志愿中的第一个志愿学校(带专业组,下同),看这个学校的招生名额是否用完(第一个开始,当然是已录取0人了),如果还有可用名额,则此学生录取。
4. 上面的学生处理完毕,再取分数顺序下的一名学生,查找他的第一个平等志愿学校,看是否已招满,如果未满则录取,如果已满则查找此生的下一个平行志愿看是否招满决定是否录取。如果查询完此生填报的所有平行志愿后,全部学校都已招满,则此生落榜。
5. 同理,把分数从高到低处理所有学生。
6. 当然每名学生处理完后,可以做个判断,若所有的学校都已招满则剩下的低分学生不用再循环处理了,直接break, 都落榜了(进入下一批次环节)。
这个算法太完美了,复杂度也低,也容易写,还容易懂,最根本的算法逻辑是分高的学生优先,我前面就没想到过要这样处理!
算法之外要吐槽的是学生被大学录取之后,如果不同意专业调剂,并且其他填写此专业的学生分数比你高,本专业人数超员后,你将被退档,退档之后后面所有的平行志愿都失效了,你就完蛋了,掉夹缝里了。这个难道就不能按专业再明细化一下吗?
当然中考没有是否服从调剂的问题,因为大家学的是一样。