在本教程中,您将学习什么是贪心算法。此外,您还会找到一个贪心算法的示例。
贪心算法是一种通过选择当前可用的最佳选项来解决问题的方法,而不必考虑它未来会带来的结果。换句话说,通过局部最佳选择,旨在达到全局最佳选择。
这种算法可能不是所有问题的最佳选择。在某些情况下可能会产生错误的结果。
该算法采用自顶向下的方法。
该算法的主要优点是:
- 该算法更易于描述。
- 该算法的性能可能优于其他算法(但并非在所有情况下都如此)。
可行解
可行解为解决问题提供了最优解。
贪心算法
- 首先,包含答案的解决方案集为空。
- 在每个步骤中,都会向解决方案集中添加一个项。
- 如果解决方案集是可行的,则保留当前项。
- 否则,该项将被拒绝,不再考虑。
示例
问题:您必须使用最少数量的硬币进行零钱找零。
金额:28美元
可用硬币:
5美元硬币
2美元硬币
1美元硬币
解决方法:
- 创造一个空的解决方案集 solution-set = { }。
- coins = {5, 2, 1}
- sum = 0
- 当 sum ≠ 28,执行以下操作。
- 从 coins 中选择一个硬币 C,使得 sum + C < 28。
- 如果 C + sum > 28,返回无解决方案。
- 否则,sum = sum + C。
- 将 C 加入solution-set。
5次迭代之后,解决方案集包含5个5美元的硬币。之后得到1个2美元的硬币,最后得到1个1美元的硬币。
贪心算法的应用
参考文档
[1]Parewa Labs Pvt. Ltd.Greedy Algorithm[EB/OL].https://www.programiz.com/dsa/greedy-algorithm,2020-01-01.
[2]Baidu.贪心算法[EB/OL].https://baike.baidu.com/item/贪心算法/5411800,2021-02-22.
[3]大饼.经典算法思想5——贪心(greedy algorithm)[EB/OL].https://zhuanlan.zhihu.com/p/72734416,2020-11-05.