在算法学习中,贪心算法(Greedy Algorithm)是一种常见又高效的策略。相比动态规划或回溯法,它实现简单、运行迅速,却同样能在许多问题中表现出色。
本文将带你全面了解贪心算法的核心思想、应用场景、优缺点,并通过两个典型题目——「柠檬水找零」和「将数组和减半的最小操作数」进行实战演练。
📌 什么是贪心算法?
贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,从而期望获得全局最优解的策略。
说白了,就是“走一步看一步”,每次都挑眼下最有利的决定,靠这种“局部最优”去逼近甚至达到“全局最优”。
✨ 贪心算法的关键特性
想要判断一个问题是否能用贪心算法解决,我们必须看它是否满足以下两个性质:
✅ 1. 贪心选择性质(Greedy Choice Property)
每一步的局部最优选择不会影响全局最优解的正确性。
举例:在活动选择问题中,选择最早结束的活动不会影响后续活动的最大数量。
✅ 2. 最优子结构(Optimal Substructure)
问题的最优解由子问题的最优解构成。
这与动态规划有些相似,但区别在于:
-
贪心只看当前,不记历史;
-
动态规划则保存子问题状态,逐步推导。
⚠️ 贪心算法的优缺点
✅ 优点 | ❌ 缺点 |
---|---|
实现简单、思路清晰 | 不一定保证全局最优解 |
效率高,时间复杂度低(通常 O(n log n)) | 有些问题必须用动态规划或回溯来解决 |