51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

课程排课算法,如何优化教师资源分配,避免时间冲突,请用C++实现关键逻辑(如贪心算法或动态规划)。

好未来后端 - C++难度:中等

答案

1) 【一句话结论】课程排课的核心是采用贪心算法,结合最小优先级队列(时间堆),按课程开始时间排序后,为每个教师维护左闭右闭的空闲时间区间,通过技能匹配与时间完全覆盖(空闲结束时间≥课程结束时间)判断分配课程,并更新空闲时间为课程结束时间+预设间隔,避免时间冲突。

2) 【原理/概念讲解】课程排课属于资源分配优化问题,约束条件包括教师时间表、课程时间区间、教师技能匹配。贪心策略的核心是“局部最优选择”——每次为当前课程选择最早空闲且技能匹配的教师。具体实现:为每个教师维护一个最小堆(空闲时间队列),堆中元素按时间升序排列(左闭右闭区间,如[开始时间, 结束时间])。处理每个课程时,遍历所有教师,从其空闲时间堆中取出最早空闲时间。若教师技能集合包含课程要求的技能,且空闲结束时间≥课程结束时间(即时间完全覆盖,无冲突),则分配课程,更新空闲时间为课程结束时间+预设休息间隔(如课程时长+10分钟休息),通过堆的push操作插入新空闲时间,保持堆有序性。类比:就像为每个老师安排会议,先处理最早空闲时间,若会议时间不冲突且技能匹配,就安排,否则找下一个老师,最后更新老师的空闲时间(会议结束+休息时间),确保后续会议能正确安排。

3) 【对比与适用场景】

方法定义特性使用场景注意点
贪心算法每步选择当前最优解(最早空闲时间),按课程开始时间排序,教师空闲时间用最小堆管理时间复杂度O(n log m),空间复杂度O(m),高效处理大规模数据课程数量多、时间冲突为主、教师技能匹配简单(如单一技能)可能存在局部最优导致全局最优不最优(如先排早课程占用后续老师时间)
动态规划记忆化搜索或递推,考虑所有子问题,计算所有可能的分配方案时间复杂度O(n²)或更高,空间复杂度高教师能力匹配复杂(如多技能教师、多课程协同)、约束条件多(如教师精力上限、课程优先级)适用于小规模问题或复杂约束,计算成本高

4) 【示例】假设课程列表按开始时间排序:C1: [1,3](数学课,技能:数学),C2: [2,4](英语课,技能:英语),C3: [3,5](数学课,技能:数学);教师T1: 技能{数学,英语},空闲时间堆:[0,2](数学)、[2,4](英语);T2: 技能{英语},空闲时间堆:[0,1]、[3,5]。

  • 处理C1:
    T1堆取[0,2],技能匹配(数学),空闲结束时间2≥课程开始时间1,分配,更新为[3,12](结束时间3+9分钟休息),插入堆得[3,12]。
    T2堆取[0,1],技能匹配(英语),空闲结束时间1<1,跳过。
  • 处理C2:
    T1堆取[3,12],空闲结束时间12≥课程开始时间2,技能匹配(英语),分配,更新为[4,14](结束时间4+10分钟休息),插入堆得[4,14]。
    T2堆取[3,5],空闲结束时间5≥2,技能匹配(英语),分配,更新为[5,15],插入堆得[5,15]。
  • 处理C3:
    T1堆取[3,12],空闲结束时间12≥课程开始时间3,技能匹配(数学),分配,更新为[5,15],插入堆得[5,15]。
    T2堆取[3,5],空闲结束时间5≥3,技能匹配(数学),分配,更新为[5,15],插入堆得[5,15]。
    结果:T1排C1、C3,T2排C1、C3,无冲突,技能匹配正确。

5) 【面试口播版答案】面试官您好,课程排课的核心思路是用贪心算法结合时间优先级队列。首先,按课程开始时间排序,为每个教师维护一个最小堆(空闲时间队列,按时间升序排列,左闭右闭区间)。处理每个课程时,遍历所有教师,从其空闲时间堆中取出最早空闲时间。检查教师是否具备课程要求的技能,并且空闲结束时间≥课程结束时间(即时间完全覆盖,无冲突)。若满足条件,就分配课程,更新空闲时间为课程结束时间加上预设的休息间隔(比如课程结束后有10分钟休息),通过堆的push操作插入新空闲时间。这样保证每次都给最早空闲且技能匹配的老师排课,避免时间冲突,时间复杂度约为O(n log m),n是课程数,m是教师数。

6) 【追问清单】

  • 问:课程结束后,如何处理教师的空闲时间(比如加上休息时间)?
    回答要点:课程结束后,将空闲时间更新为结束时间加上预设的休息间隔(如课程时长+10分钟),通过堆的push操作插入,保持堆的有序性,确保下次分配时能正确计算最早空闲时间。
  • 问:如果课程需要多个技能(如数学+英语),如何处理?
    回答要点:检查教师技能集合是否包含所有课程要求的技能,若不满足则跳过,只对技能匹配的教师进行时间冲突判断。
  • 问:贪心算法的局限性是什么?比如为什么可能存在局部最优?
    回答要点:贪心算法只考虑当前最优选择(最早空闲时间),可能先排早的课程导致后续教师空闲时间被占用,无法安排更重要的课程,适用于课程数量多、时间冲突为主的场景,不适合复杂约束。
  • 问:当教师数量不足时,如何处理?
    回答要点:若教师数量不足,无法分配所有课程,需返回冲突课程列表,并建议调整课程时间(如错开时间)或增加教师,优先分配高优先级课程(如核心课程)。

7) 【常见坑/雷区】

  • 时间冲突判断错误:仅比较空闲开始时间与课程开始时间,未考虑空闲结束时间与课程结束时间的重叠,导致可能分配冲突课程。
  • 空闲时间区间表示:未明确为左闭右闭区间,且未说明时间间隔处理(如休息时间是否计入),影响算法正确性。
  • 堆操作细节:示例中未详细说明插入新空闲时间时保持堆有序性的步骤,缺乏可落地细节。
  • 动态规划适用场景:未具体说明多约束(如教师精力上限、课程优先级)的处理方法,导致适用场景说明不深入。
  • 边界条件处理:未说明教师数量为0或课程数量为0时的处理,可能导致结果错误。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1