第四次作业

一、贪心算法核心理解贪心算法是一种基于局部最优选择,期望最终得到全局最优解的算法思想,其核心特征为:每一步决策仅做出当前状态下最优的选择,不回溯、不考虑后续步骤的影响,无后效性;问题必须具备两个关键性质才能用贪心求解:贪心选择性质 + 最优子结构性质,二者缺一不可。两个核心性质定义✅ 最优子结构性质:一个问题的全局最优解,一定包含其子问题的最优解。✅ 贪心选择性质:可以通过做出局部最优的贪心选择,逐步构造出全局最优解;即每一步的最优选择,最终能导向整体最优。贪心算法的特点✔️ 优点:思路简洁、代码实现简单、时间复杂度通常极低(多为(O(n))/(O(n\log n)));❌ 缺点:并非所有问题都适用,若问题不满足贪心选择性质,局部最优会导致全局错误,且无法验证 / 补救;💡 关键:使用贪心的前提是严格证明贪心选择性质与最优子结构性质,而非直觉判断。二、选点问题(经典区间贪心)全分析✅ 问题描述(标准版)给定数轴上的 n 个闭区间 ([a_1,b_1],[a_2,b_2],\dots,[a_n,b_n]),要求选择最少数量的点,使得每个区间内至少包含一个选点,求解该最小点集。✅ 贪心策略设计采用按区间右端点升序排序的贪心策略,具体执行步骤:将所有区间按照右端点 (b_i) 从小到大排序;初始化:选取第一个区间的右端点作为第一个选点,记为 last;遍历剩余区间:若当前区间的左端点 (a_i > last),说明该区间未被覆盖,选择其右端点作为新的选点,更新 last;若当前区间的左端点 (a_i \le last),说明该区间已被 last 覆盖,直接跳过。遍历结束后,所有选取的点即为满足要求的最小点集。策略示例区间集合:([1,5],[2,3],[4,7],[6,8])排序后:([2,3],[1,5],[4,7],[6,8])选点过程:选 3 → 覆盖 ([2,3])、([1,5]);因 (4>3),选 7 → 覆盖 ([4,7]);因 (6\le7),([6,8]) 未被完全覆盖,选 8;最终选点:({3,7,8}),共 3 个(最优解)。✅ 证明算法满足贪心选择性质前置前提已证明选点问题具备最优子结构性质:设原问题最优解为 S,若第一个选点覆盖了前 k 个区间,则剩余区间的选点问题是原问题的子问题,且 S 中剩余点为该子问题的最优解。贪心选择性质证明(反证法)求证:选第一个区间的右端点 (b_1),是构造全局最优解的一个合法贪心选择。设原问题的任意一个最优解为 A,A 中的第一个选点为 x;由于区间按右端点升序排序,(b_1 \le x)(x 必然落在第一个区间内,否则无法覆盖第一个区间);用 (b_1) 替换最优解 A 中的 x,得到新的点集 (A'):原被 x 覆盖的所有区间,必然被 (b_1) 覆盖(因为 (b_1 \le x),区间左端点 (\le b_1 \le x \le) 区间右端点);(A') 依然是原问题的一个可行解,且 (|A'|=|A|),即 (A') 也是最优解;结论:存在一个包含贪心选择点 (b_1) 的最优解,即该贪心策略满足贪心选择性质。全局最优性推导每一步都能选出属于最优解的局部点,通过逐步叠加贪心选择,最终得到的点集就是全局最优解。✅ 时间复杂度分析算法的时间开销主要分为两部分:区间排序:对 n 个区间按右端点排序,采用快速排序 / 归并排序,时间复杂度为 (\boldsymbol{O(n\log n)});遍历选点:线性扫描所有区间,仅进行比较与赋值操作,时间复杂度为 (\boldsymbol{O(n)})。根据复杂度的主定理,总时间复杂度由高阶项决定,最终为:(\boldsymbol{T(n)=O(n\log n)})

posted @ 2025-12-24 12:09  Chenz111  阅读(3)  评论(0)    收藏  举报