贪心策略(未完结)
每次都试图解决问题的尽量大的一部分
如兑换硬币,先以最多数量的最大面值来迅速减少找零面值
- 首先确定基本结束条件(最直接的情况——其面值正好等于某种硬币)
- 减小问题的规模
递归算法:
1 | #!/user/bin/env python3 |
[c for c in coinValueList if c <= change]是一个列表推导式。
它的作用是从coinValueList中筛选出所有小于等于change的元素。
c for c in coinValueList:这部分表示从coinValueList中取出每个元素c。
if c <= change:这是一个条件判断,只有当c小于等于change时,c才会被包含在新生成的列表中。
缺点:效率低下(原因是重复计算太多)
优化的关键在于消除重复计算,如用一个表把中间结果保存下来
这个算法的中间结果就是部分找零的最优解,在递归调用过程中已经得到的最优解被记录下来在递归调用之前,先查找表中是否已有部分找零的最优解
如果有,直接返回最优解而不是递归调用
优化:
1 | #!/user/bin/env python3 |
如果没有,才进行递归调用
√通过记忆化/函数值缓存技术提高了递归解法的性能
动态规划的方法:https://www.cnblogs.com/ljnljn/p/18586653
- 标题: 贪心策略(未完结)
- 作者: ljnljn
- 创建于 : 2024-12-04 20:27:00
- 更新于 : 2026-05-25 22:04:46
- 链接: https://ljnljn2005.github.io/2024/12/04/贪心策略(未完结)/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。