第四章作业

一、选点问题分析
1、选点问题定义(核心:区间选点)
给定数轴上的n个闭区间[a_i, b_i],要求选择最少的点,使得每个区间至少包含一个选点。
例如:区间{[1,3], [2,5], [4,6]},选点4即可覆盖所有区间,是最优解。

2、选点问题的贪心策略
核心策略(三步搞定)

  1. 排序:将所有区间按右端点b_i升序排列(关键步骤)。
  2. 初始化:选第一个区间的右端点作为第一个选点p,计数count=1
  3. 遍历选点:依次检查后续每个区间:
    • 若当前区间的左端点a_i > p(该区间没被p覆盖),则选该区间的右端点作为新的p,计数count++
    • a_i ≤ p(已被覆盖),直接跳过。

示例
区间{[1,5], [2,3], [4,6], [7,8]}

  1. 排序后:[2,3]、[1,5]、[4,6]、[7,8]
  2. 选第一个点p=3(覆盖前两个区间);
  3. 遇到[4,6](4>3),选p=6(覆盖该区间);
  4. 遇到[7,8](7>6),选p=8
    最终选点3个,是最优解。

3、贪心选择性质证明(简化版)
贪心选择性质:每一步的局部最优选择能得到全局最优解
反证法证明选第一个区间的右端点是最优的:

  1. 假设最优解的第一个点不是第一个区间的右端点p1,而是qq≠p1);
  2. q > p1:第一个区间[a1,p1]不会被q覆盖,最优解需要额外加一个点,与“最优”矛盾;
  3. q < p1:把q换成p1,能覆盖更多后续区间,新的点集合依然是最优解;
    因此,选第一个区间的右端点是全局最优的第一步。
    以此类推,每一步选当前区间的右端点都能得到全局最优解
    4、时间复杂度分析
  4. 排序:对n个区间排序,时间复杂度O(n log n)(主要耗时);
  5. 遍历:仅遍历一次区间,时间复杂度O(n)
    整体时间复杂度**:O(n log n)(排序是主导)。

二、对贪心算法的理解(通俗版)

  1. 核心逻辑:走一步看一步,每一步都选当前最“划算”的局部最优解,不回头、不后悔,最终希望得到全局最优。
  2. 关键前提:问题必须满足贪心选择性质(局部最优能推全局最优)和最优子结构(问题的最优解包含子问题的最优解),否则贪心会得到次优解。
  3. 优缺点:
    • 优点:简单、高效,时间复杂度通常很低(如选点问题的O(n log n));
    • 缺点:不是所有问题都适用,比如0-1背包问题用贪心(选单位价值最高)会出错,而分数背包问题则适用。
  4. 和动态规划的区别:贪心是“自顶向下”一步到位,动态规划是“自底向上”记录子问题解(能处理更多问题,但效率稍低)。
posted @ 2025-12-23 16:07  谢靖雯  阅读(4)  评论(0)    收藏  举报