
1) 【一句话结论】:航班起降顺序优化以最小化总等待时间,采用贪心算法按航班降落时间升序排列,时间复杂度为O(n log n),能保证最优解(在最优性证明下)。
2) 【原理/概念讲解】:问题建模为每个航班i有降落时间a_i(到达跑道的时间)和起飞时间e_i(离开跑道的时间),占用时间t_i = e_i - a_i。总等待时间T = Σ max(0, 前一个航班离开时间 - a_i)。分析:当航班按降落时间升序排列时,相邻航班降落时间差最小,使得每个后续航班的等待时间尽可能短——因为降落时间早的航班先离开,减少后续航班的等待。类比:餐厅排队点餐,先到的先做,后面的人等待时间由前面的人做完时间决定,按到达时间排序能最小化总等待。
3) 【对比与适用场景】
| 策略 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 按降落时间排序(贪心) | 航班按降落时间升序排列 | 相邻降落时间差最小,总等待时间最小(最优性证明) | 标准航班起降调度,减少跑道占用 | 仅适用于等待时间由降落时间决定的情况 |
| 按起飞时间排序 | 航班按起飞时间升序排列 | 可能导致后续航班等待时间增加 | 特殊场景(如起飞有紧急任务优先级) | 不是最优,因为降落时间更关键,可能导致后续航班等待时间累积 |
4) 【示例】:假设航班数据:
航班A:降落时间9:50,起飞时间10:00(占用10分钟);
航班B:降落时间10:15,起飞时间10:45(占用30分钟);
航班C:起飞时间10:20,降落时间10:20(占用0分钟)。
按降落时间排序后顺序为A、B、C。
计算等待时间:
5) 【面试口播版答案】:面试官您好,这个问题属于调度优化中的最小化总等待时间问题。核心思路是采用贪心算法,按航班降落时间升序排列。因为降落时间越早的航班等待时间越短,这样可以减少后续航班的等待时间。具体步骤:首先,将所有航班按降落时间从小到大排序;然后,按排序后的顺序依次执行,计算每个航班的等待时间(当前时间 - 降落时间,当前时间为前一个航班的离开时间,取非负值),累加得到总等待时间。时间复杂度方面,排序需要O(n log n),后续遍历是O(n),所以整体时间复杂度为O(n log n)。比如给定航班A(10:00起飞,降落时间9:50)、B(10:15降落)、C(10:20起飞),按降落时间排序后顺序为A、B、C,计算等待时间:A等待0,B等待=10:10-10:15=5分钟,C等待=10:45-10:20=25分钟,总等待时间30分钟,比其他顺序更优。
6) 【追问清单】
7) 【常见坑/雷区】