贪心是一类 “局部最优导向全局最优” 的经典思想
一、选点问题:
问题描述
数轴上有n个闭区间[a_i, b_i],要求选取最少的点,使得每个区间内至少包含一个点(不同区间可共用点)。
比如输入样例:
plaintext
3
1 3
2 4
5 6
最优解是选 2 个点(如3和6),覆盖所有区间。
贪心策略设计
解决该问题的核心贪心策略是:按区间的右端点从小到大排序,依次遍历每个区间
若当前区间最小点大于已选最大,则选择该区间的右端点作为新的点。
需要注意一开始最大点填一个负的-1e9
最终count即为最少需要的点数。
贪心算法是一种 “短视但高效” 的算法思想:它在每一步都做出当前看来最优的选择,期望通过局部最优的积累得到全局最优。
但贪心算法并非适用于所有问题,它的适用场景需要满足两个核心条件:
贪心选择性质:每一步的局部最优选择,不影响后续步骤的最优性;
最优子结构:全局最优解包含了子问题的最优解。
以选点问题为例:
贪心选择性质保证了 “选当前区间右端点” 的局部最优;
最优子结构保证了 “覆盖剩余区间” 的子问题也能通过同样策略得到最优解。
贪心算法的优势是高效、实现简单,但难点在于 “贪心策略的设计”—— 不同问题的贪心方向可能完全不同(比如选点问题是 “按右端点排序”,而活动安排问题是 “按结束时间排序”),需要结合问题特性分析。