算法第四章作业

给定n个闭区间[ai, bi],需要选择尽可能少的点,使得每个区间内都至少包含一个点。
经过分析,我采用了基于区间右端点排序的贪心策略:

排序:将所有区间按照右端点bi进行升序排序

选择点:从第一个区间开始,选择当前区间的右端点作为第一个点

跳过覆盖:检查后续区间,如果该区间包含已选择的点(即ai ≤ 当前选择点),则跳过

新增点:遇到第一个不被当前点覆盖的区间时,选择该区间的右端点作为新点

重复:重复步骤3-4直到处理完所有区间

定理证明
贪心选择性质:存在一个最优解,其中第一个点选在右端点最小的区间的右端点。

证明:

设所有区间按右端点排序后为:I₁, I₂, ..., Iₙ

设I₁是右端点最小的区间,即b₁ = min{bᵢ}

假设存在一个最优解S,其中第一个点p不在I₁的右端点

考虑两种情况:

如果p在I₁内部:那么用b₁替换p,仍然覆盖所有原来被p覆盖的区间

如果p不在I₁内部:那么I₁不被任何点覆盖,矛盾

因此,总存在一个最优解以b₁作为第一个点

最优子结构性质证明
设选择了第一个点p = b₁后,剩余需要覆盖的区间集合为R

原问题的最优解 = {p} ∪ R的最优解

这是因为p的选择不影响剩余区间的选择,具有独立性

三、时间复杂度分析
时间复杂度
排序阶段:O(n log n),使用快速排序或归并排序

遍历阶段:O(n),线性扫描所有区间

总时间复杂度:O(n log n)

空间复杂度
存储区间:O(n)

额外空间:O(1)(如果不计排序所需的栈空间)

对贪心算法的理解

  1. 贪心算法的本质
    贪心算法是一种局部最优导致全局最优的算法思想。它在每一步都做出当前看起来最优的选择,希望这样的局部最优选择能够导致全局最优解。

  2. 贪心算法的适用条件
    使用贪心算法需要满足两个关键性质:

贪心选择性质:可以通过局部最优选择构建全局最优解

最优子结构:问题的最优解包含子问题的最优解

  1. 贪心算法的优缺点
    优点:

实现简单,代码简洁

通常具有较高的效率

容易理解和调试

缺点:

不是所有问题都适用

需要严格的数学证明

可能得到次优解而非最优解

posted @ 2025-12-19 18:35  ?|?|?  阅读(2)  评论(0)    收藏  举报