朋友来问我一个考试编排的问题,怎么才能替代手工,以最大的自动化来编排试场。我自己了解了一下需求,感觉手动处理起来不算难的问题(就是费时间),在程序上不知道怎么解(主要还是因为我自己算法题刷少了)。
详细问过需求,简化成如下的需求点:
1. 所有考试都在同一时间,不需要考虑冲突问题。
2. 有若干校区,每个校区最大的教室数量不定。不考虑远近与学生是否方便,只考虑编排方便。
3. 有若干门课,每门课考试人数不定,可能是个位数,可能上百。
4. 如果某些课考试人数较少,那么需要合并到一起混考。
5. 若干教室,每个教室都有下面的属性:最大容纳人数、最大容纳混考课的数量。
6. 同一门课只能放在同一个校区考试。
我自己先假设最普通的情况,一个教室最大 30 个人。有若干从 1-30 人的课。用最无脑的方法,就是人数 30 的课放到 30 人的教室排满。然后排 29 人数的配 1 个人的课,然后 28 的配 2 人,27 、26...依次。
然后不同的场次处理后,发现等到课的人数是 17 、18 的时候,可能自己独立成一个教室考试有点浪费。或者一堆 1 、2 、3 的挤在一个教室加起来不到七八个人。
发现这种无脑从大到小的编排方式不行,所以觉得可能要使用某种算法来解决这个问题了。但是奈何学艺不精,没有刷过多少算法题,不清楚有哪些算法可以使用在这个问题上的。希望大家能说下算法的名称或者搜索学习算法方向。如果可以的话或者有什么处理思路的话,能简要说说就更好了。 |
|