因此,我对使用尽可能少的教室安排可能重叠的 n 个活动的问题的解决方案有一些疑问。解决方案如下:
找到最少数量的教室来安排一组活动 S。为此,根据开始和结束时间有效地完成活动。维护两个教室列表:时间 t 繁忙的房间和时间 t 空闲的房间。当 t 是某个活动的开始时间时,将此活动安排到空闲房间并将房间移动到忙碌列表。同样,当活动停止时,将房间移动到空闲列表。最初从零房间开始。如果空闲列表中没有房间,则创建一个新房间。
该算法可以通过对活动进行排序来实现。在每个开始或结束时间,我们可以安排活动并在恒定时间内在列表之间移动房间。因此,总时间受排序支配,因此为 O(n lg n)。
我的问题是
1)首先,你如何同时开始和结束时间来完成活动?
2)我不太明白如何在恒定时间内在列表之间移动房间。如果您想将房间从忙碌列表移动到空闲列表,您是否不必遍历忙碌列表中的所有房间并查看哪些房间的结束时间已经过去?
3)在执行此操作以使其正常工作时,是否需要跟踪任何“状态”变量?