什么是贪心算法?
贪心算法(Greedy Algorithm) 是一种算法策略,它在求解问题时,每一步都选择当前**最优(局部最优)**的解,希望最终能得到全局最优解。
🔹 关键特点:
- 贪心选择(Greedy Choice):每一步都做出局部最优的选择。
- 无后效性(No Aftereffect):当前选择不会影响后续的选择。
- 最优子结构(Optimal Substructure):局部最优解能够构造全局最优解。
⚠️ 注意:贪心算法并不总是能得到最优解,但对于某些问题(如最小生成树、活动安排、背包问题等),贪心算法能高效地求解最优解。
C# 代码示例:贪心算法求解“零钱找零问题”
问题描述
假设商店要找零 amount
元,硬币的面值有 {1, 5, 10, 25, 50}
(美分)。
要求:用最少数量的硬币找零。
贪心策略
- 每次都选择当前最大面值的硬币,直到总额满足
amount
。
C# 代码(贪心找零)
运行结果
✅ 解释:87 美分,贪心算法的选择是:
- 50 美分 × 1
- 25 美分 × 1
- 10 美分 × 1
- 1 美分 × 2 总共 5 枚硬币。
总结
- 贪心算法适用于找零问题,因为每次选择最大面值的硬币不会影响最终最优解。
- 时间复杂度:O(n),其中
n
是硬币种类数,效率很高。
🚀 贪心算法适用于一些优化问题,如最短路径、活动选择、哈夫曼编码等,但不是所有问题都能保证最优解!