活动选择问题

活动选择问题(Activity Selection Problem)是贪心算法的经典应用。

问题描述

每门课都有其上课时间和下课时间,不同课程不能出现时间冲突。目标是找到一种排课方式,使得排课数量最多同时不出现冲突。

贪心策略

选择结束时间最早的活动,证明该策略能得到最优解。

可以证明:存在一个优化解,结束时间最早的活动一定在优化解之中。

优化解具有子结构:去掉结束时间最早的活动后,剩余的活动组成是对剩下时间的最优解。

算法实现

简单来说:

  1. 对原活动按照结束时间进行排序
  2. 将第一个活动加入解集
  3. 从下一个活动开始遍历,如果其开始时间不小于解集最后元素的结束时间,就把该活动加入解集并更新结束时间

算法分析

时间复杂度主要由排序决定,为 O(n log n)。

链接到