算法第四章作业

1.贪心策略:
先将将所有的区间,按照区间的 右端点从小到大 的顺序进行排序
之后初始化:记录最后一个选中的点的位置为 −∞,选点的总数为 0。
依次遍历排序后的每一个区间:
如果当前区间的左端点>最后一个选中的点,就选择当前区间的右端点作为新的点,选点总数 + 1,同时更新最后一个选中的点为当前区间的右端点
如果当前区间的左端点≤最后一个选中的点,说明这个区间已经被之前选中的点覆盖,不需要再选新的点

证明:我们可以通过反证法来证明:
假设存在一个全局最优的选点集合 S,这个集合的选点数量是最少的,设为 k我们贪心策略选出的第一个点是 p(也就是排序后第一个区间的右端点),假设 S 中第一个选中的点是q且q p因为所有区间已经按照右端点排序,所以第一个区间的右端点 p,是所有区间右端点里最小的,所以 p 小于等于q所有包含q 的区间,必然也包含 p:因为这类区间的左端点小于等于q,同时右端点大于等于q大于等于p,所以 p 一定在这个区间内部那么我们可以把 S 中的 q 替换成 p,得到新的选点集合 S2,S2 的选点数量依然是 k,同时也是一个可行解这就说明,全局最优解中一定可以包含我们贪心策略选择的第一个点,以此类推,每一步的贪心选择都可以加入到全局最优解中,因此这个算法满足贪心选择性质.

时间复杂性分析:区间排序:对 n 个区间进行排序,使用常规的比较排序算法(比如快速排序、归并排序),时间复杂度是Onlogn遍历选点:只需要对排序后的区间进行一次遍历,时间复杂度是O(n)整体的时间复杂度由排序步骤主导,为Onlogn.

2.贪心算法是一种基于局部最优推导全局最优的算法思想:
核心逻辑:在每一步的决策中,都只选择当前状态下的最优解(局部最优),不会回溯或者考虑这个选择对后续步骤的影响.
适用的必要条件:
贪心选择性质:刚才已经说明,全局最优解可以通过一步步的局部最优选择得到.
最优子结构性质:如果一个问题的全局最优解,包含了它所有子问题的最优解,这个问题就有最优子结构性质.
局限性:并不是所有的问题都可以用贪心算法解决,只有同时满足两个必要条件的问题才可以,比如背包问题中,0-1 背包就不可以用贪心,但是分数背包可以.

posted on 2025-12-20 20:01  薄荷味的棉花糖  阅读(3)  评论(0)    收藏  举报

导航