数据结构与Python算法——贪心算法

硬币找零问题:

问题描述:
假设需要找零的金额为C,最少要用多少面值为 P1 < P2 < … < pn 的硬币(面值种类为 n,且假设每种面值的硬币都足够多)?
在这里插入图片描述
贪心算法在计算的时候,从最大面值的硬币开始,虽然看似非常简便迅速,但是它不总是有效的。比如若市面上有三种面值的硬币(1元、3元、4元),当要找零6元时,它得到的答案是 1 枚 4 元硬币和 2 枚 1 元硬币,即最少 3 枚硬币。而动态规划得到的正确答案是 2 枚 3 元硬币。这个时候贪心算法不再适用,应选用动态规划等其他算法进行求解。

活动安排问题:

问题描述:
学校的礼堂经常开展各类活动,这些活动的开始和结束时间各异,且可能出现重叠,为了开展尽可能多的活动,要怎么安排?
在这里插入图片描述
目标是在固定的教室中尽量多地安排活动,可以考虑的贪心策略有“总是选择最早开始的”、“总是选择时间最短的”、“总是选择与其他活动冲突最少的”、“总是选择结束时间最早的”。在这里,我们用总是选择结束时间最早的活动这一选择方案作为解题的贪心策略。(不过上面,有的方案是不能得到最优解的)
参考实现:
通过比较下一个活动的开始时间与上一个活动的结束时间的大小关系,确定这两个活动是否是相容的,如果开始时间大于结束时间则相容,否则不相容。
代码如下:
在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值