第四次作业
一、选点问题分析与算法详解
你需要解决的是数轴上的选点问题:给定n个闭区间,选取最少的点使得每个区间内至少有一个点。
- 贪心策略
将区间按右端点升序排序,遍历区间时选择当前区间的右端点作为选点(仅当当前区间不包含已选点时)。
排序:将所有闭区间按照右端点bi从小到大的顺序进行排序。
选点:初始化一个点dian(初始值设为极小值,如-1e9),遍历排序后的区间:如果当前区间的左端点ai大于dian,说明当前区间不包含已选的点,则选择该区间的右端点b作为新的点,同时计数加 1;如果当前区间包含已选的点,则跳过。 - 贪心选择性质证明
贪心选择性质:每一步的局部最优选择可以导致全局最优解。
反证法证明该策略的正确性:
假设:存在一个全局最优解S,其第一个选点不是第一个区间的右端点b1,而是另一个点x(x>b1或x<b1)。
情况1(x>b1):第一个区间[a1, b1]不包含x,违反 “每个区间至少有一个点” 的要求,因此x不可能大于b1。
情况2(x<b1):由于所有区间已按右端点排序,后续区间的右端点都≥b1,且第一个区间的左端点a1≤x<b1。此时,将x替换为b1,新的点集S'仍然满足所有区间的要求(因为b1在第一个区间内,且后续区间的左端点若≤x则必然≤b1,若>x则可能需要新增点,但替换后点的数量不会增加)。
结论:选择第一个区间的右端点b1是局部最优的,且可以推广到后续所有区间。因此,该算法满足贪心选择性质。 - 时间复杂度分析
算法的时间消耗主要分为两部分:
排序:对n个区间按右端点排序,使用标准排序算法sort的时间复杂度为O(nlogn)。
遍历:遍历n个区间进行选点,时间复杂度为O(n)。
因此,算法的总时间复杂度为O(nlogn)。
二、对贪心算法的理解
贪心算法是一种基于来追求全局最优解的算法设计策略,核心思想是:在每一步决策中,都选择当前看起来最优的选项,不回溯、不考虑后续的影响。
- 贪心算法具有的性质
贪心选择性质:每一步的局部最优选择能导致全局最优解。
最优子结构性质:问题的全局最优解包含其子问题的最优解(与动态规划的共性)。 - 贪心算法的特点
优点:代码简洁、时间复杂度低(通常为O(n)或O(nlogn)),执行效率高。
缺点:并非所有问题都适用,只有满足贪心选择性质的问题才能用贪心算法求解;如果贪心策略选择不当,会得到局部最优但全局次优的解。

浙公网安备 33010602011771号