第四章算法作业

一、我的贪心策略
策略:将区间按右端点从小到大排序,遍历区间时,如果当前区间左端点大于上一个选点,则选择当前区间的右端点作为新点。
核心思想:每次选择能覆盖当前未覆盖区间中结束最早的区间的右端点。

二、证明算法满足贪心选择性质
贪心选择性质证明:
设排序后第一个区间为 [a₁, b₁]

  1. 必要性:任何解必须包含一个点覆盖 [a₁, b₁]
  2. 贪心选择:我选择 b₁ 作为第一个点
  3. 最优性证明:①假设存在最优解 OPT,第一个点是 p;②由于 p 覆盖 [a₁, b₁],所以 a₁ ≤ p ≤ b₁;③用 b₁ 替换 p:;④b₁ 仍覆盖 [a₁, b₁]; ⑤对于其他被 p 覆盖的区间 [aᵢ, bᵢ],因为 b₁ ≥ pb₁ ≤ bᵢ(排序性质),所以 b₁ 也覆盖它们;⑥因此 b₁ 也是一个最优的第一点
    结论:存在一个最优解以我的贪心选择开始。

三、时间复杂度分析

  1. 排序:sort(intervals, intervals + n, compare), C++ sort 平均时间复杂度:O(n log n)
  2. 遍历选择:for (int i = 0; i < n; i++),单层循环:O(n)
  3. 总时间复杂度:O(n log n) + O(n) = O(n log n)

四、对贪心算法的理解
本质特征:

  1. 局部最优:每一步选择当前状态下的最佳选项
  2. 不可逆:选择后不回溯
  3. 高效简单:通常实现简洁,运行快速
    适用条件:①贪心选择性质:局部最优能导向全局最优(如本题);②最优子结构:问题的最优解包含子问题最优解
    我的代码体现了:排序预处理:将问题转化为适合贪心的结构;贪心规则:if (intervals[i].start > lastPoint) 决定何时选新点;结果积累:countlastPoint 记录局部决策
    局限性:不是所有问题都适用(如0-1背包),但适用于具有特定结构的问题。
posted @ 2025-12-16 21:43  谁给我一节人文  阅读(2)  评论(0)    收藏  举报