把学校机房的课时按每小时或者按几个小时为单位编成一个数据结构。这个具体看学校怎么安排上机课,如果最小单位为2小时,当然以2小时为单位,如果有班级只上半小时的上机课当然以半小时为单位。比如一周5天每天10小时我们可以把它编成50个单位的一个数据结构。可以为数组,可以为链表,当然也可以为更复杂的结构,看你的需要。简单的机房上机课时结构基本子元素为:起止时间、已安排班级(若未安排则为空)、已安排老师
把班级和老师也储存在一个数据结构里。然后确定班级排上机课的原则。比如是平均分配机时,那么将每个班级增加一个计数器。那么班级的数据结构每个元素至少要有这么几个子元素:班级标识、班级计数器、班级空闲时间表。排上机课的时候,首先取出机房上机课时的数据结构,取出第一个元素,然后遍历存储班级信息的数据结构,优先取出班级计数器最小的班级,查看这个班级这时是否有课,无课则插入到上机课时的数据结构中,同时将班级计数器加一,有课则选择下一个计数器数字最小的元素。(计数器只是表示班级安排了多少上机课,也可以用一个数字代替,仅仅表示权重,比如计算机系的班级权重就可以调高。建议将整个链表中计数器数字的最小值保存在这个链表的某处,使得访问者一开始就能得到而不用访问所有元素)。重复上述过程,直到所有上机课时都被分配。
老师的分配过程和上述班级分配类似。
看来是新手,加油!
排课算法是一个复杂程度相当高的算法,穷举是行不通的。不同的班级,不同的教师的课程纵横交错,不可能对每一种组合一一穷举。一间不到三十个班的学校,其课程组合的数量级常常超过整个宇宙质子数的总和。
但在这么多的课程组合中,找出“相对合理”的课程组合,满足学校、教师、学生的要求是可行的。
穷举的话思路是这样的,比如要选择一定量的课程,假设是k,这样所有的课程为n,这样所有的组合为C(n,k)种,然后分别检查每一种是否有冲突,如果没有冲突,那么就是一个合法的选课方式。这样就可以列举出所有的可能性。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)