什么是贪心算法?
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择, 从而希望导致结果是最好或最优的算法策略。
它不从整体最优上加以考虑,仅做出在某种意义上的局部最优解。 虽然不能保证对所有问题都得到全局最优解,但在许多场景下非常高效且实用。
典型应用场景
- 活动选择问题(Activity Selection)
- 最小生成树(Kruskal / Prim 算法)
- 霍夫曼编码(Huffman Coding)
- 找零钱问题(某些币值体系下)
- 任务调度与资源分配
经典示例:活动选择问题
假设有多个活动,每个活动有开始时间和结束时间。目标是选出最多互不冲突的活动。
贪心策略:每次选择结束时间最早的活动。
为什么有效?因为尽早结束能为后续留下更多空间。
贪心 vs 动态规划
贪心算法是动态规划的一种特例——它只考虑当前最优,不做回溯; 而动态规划会保存子问题的解,综合考虑全局。
贪心更快(通常 O(n log n)),但适用条件更严格; 动态规划更通用,但时间和空间复杂度更高。