第四章作业
一、选点问题分析
1、选点问题定义(核心:区间选点)
给定数轴上的n个闭区间[a_i, b_i],要求选择最少的点,使得每个区间至少包含一个选点。
例如:区间{[1,3], [2,5], [4,6]},选点4即可覆盖所有区间,是最优解。
2、选点问题的贪心策略
核心策略(三步搞定)
- 排序:将所有区间按右端点
b_i升序排列(关键步骤)。 - 初始化:选第一个区间的右端点作为第一个选点
p,计数count=1。 - 遍历选点:依次检查后续每个区间:
- 若当前区间的左端点
a_i > p(该区间没被p覆盖),则选该区间的右端点作为新的p,计数count++; - 若
a_i ≤ p(已被覆盖),直接跳过。
- 若当前区间的左端点
示例
区间{[1,5], [2,3], [4,6], [7,8]}:
- 排序后:
[2,3]、[1,5]、[4,6]、[7,8]; - 选第一个点
p=3(覆盖前两个区间); - 遇到
[4,6](4>3),选p=6(覆盖该区间); - 遇到
[7,8](7>6),选p=8;
最终选点3个,是最优解。
3、贪心选择性质证明(简化版)
贪心选择性质:每一步的局部最优选择能得到全局最优解。
用反证法证明选第一个区间的右端点是最优的:
- 假设最优解的第一个点不是第一个区间的右端点
p1,而是q(q≠p1); - 若
q > p1:第一个区间[a1,p1]不会被q覆盖,最优解需要额外加一个点,与“最优”矛盾; - 若
q < p1:把q换成p1,能覆盖更多后续区间,新的点集合依然是最优解;
因此,选第一个区间的右端点是全局最优的第一步。
以此类推,每一步选当前区间的右端点都能得到全局最优解
4、时间复杂度分析 - 排序:对
n个区间排序,时间复杂度O(n log n)(主要耗时); - 遍历:仅遍历一次区间,时间复杂度
O(n);
整体时间复杂度**:O(n log n)(排序是主导)。
二、对贪心算法的理解(通俗版)
- 核心逻辑:走一步看一步,每一步都选当前最“划算”的局部最优解,不回头、不后悔,最终希望得到全局最优。
- 关键前提:问题必须满足贪心选择性质(局部最优能推全局最优)和最优子结构(问题的最优解包含子问题的最优解),否则贪心会得到次优解。
- 优缺点:
- 优点:简单、高效,时间复杂度通常很低(如选点问题的
O(n log n)); - 缺点:不是所有问题都适用,比如0-1背包问题用贪心(选单位价值最高)会出错,而分数背包问题则适用。
- 优点:简单、高效,时间复杂度通常很低(如选点问题的
- 和动态规划的区别:贪心是“自顶向下”一步到位,动态规划是“自底向上”记录子问题解(能处理更多问题,但效率稍低)。

浙公网安备 33010602011771号