第四章
从代码可知,该问题是区间选点问题,目标是用最少的点覆盖所有区间,每个点至少落在一个区间内。
- 贪心策略
- 步骤1:将所有区间按右端点从小到大排序;
- 步骤2:选择第一个区间的右端点作为第一个选点;
- 步骤3:依次遍历后续区间,若当前区间的左端点大于已选的最后一个点,则选择当前区间的右端点作为新的选点,重复此过程直到覆盖所有区间。
- 贪心选择性质的证明
贪心选择性质:“每一步的局部最优选择,能导致全局最优解”。
- 假设存在最优解 ( S ),其第一个选点为 ( x )(覆盖第一个区间 ( [a_1, b_1] ))。
- 由于区间按右端点排序,( b_1 \leq x )(否则 ( x ) 无法覆盖 ( [a_1, b_1] ))。
- 将 ( S ) 中的 ( x ) 替换为 ( b_1 ),新的点集 ( S' ) 仍能覆盖所有区间(因为 ( b_1 \leq x ),原被 ( x ) 覆盖的区间也会被 ( b_1 ) 覆盖)。
- 因此,选择第一个区间的右端点是贪心选择,且该选择能导出全局最优解。
- 时间复杂度分析
- 排序区间的时间复杂度:( O(n \log n) )(基于比较的排序算法);
- 遍历区间选点的时间复杂度:( O(n) );
- 总时间复杂度:( O(n \log n) )(排序为主要开销)。
对贪心算法的理解
贪心算法是一种局部最优导向全局最优的算法策略,核心特点:
- 每步贪心选择:每一步都做出当前状态下最优的选择(局部最优);
- 无后效性:过去的选择不会影响未来的选择,仅依赖当前状态;
- 适用条件:问题需满足“贪心选择性质”和“最优子结构性质”(全局最优解包含局部最优解的子解);
- 优缺点:
优点:实现简单、时间复杂度低;
缺点:并非所有问题都适用(需严格满足条件),否则可能得到次优解。
常见应用场景:区间调度、哈夫曼编码、最小生成树(Prim/Kruskal算法)等。

浙公网安备 33010602011771号