Python贪心算法

贪心算法

贪心算法用于解优化问题的一类算法

一.步骤

1.遍历备选的元素
2.贪心的策略确定选择一个决策的过程

二.决策过程

1.原集合大小依次变小,剩余的元素状态不发生变化
2.新集合大小依次变大

三.例题

硬币找零
coin=[1,5,10,25,100] 希望找36元 如何找零使硬币个数最少?
此处a=36
找最接近a的,也就是找25
此时a=11
找最接近a的,也就是10
此时a=1
找最接近a的,也就是1
直到a=0
即:
1.min(a-coin[1,5,10,25,100]) >0
2.商(a/coin[1,5,10,25,100])>0
代码:

#贪心算法例题(找硬币)
def coin(n):
    allcoin=[1,5,10,25,100]
    solusion=[]
    s_allcoin=sorted(allcoin,reverse=True)
    for i in s_allcoin:
        num_coin=int(n/i)
        solusion+=[i, ]*num_coin    
        n=n-i*num_coin
        if n<=0:
            break
    return solusion
print(coin(36))

分析:也就是说,设需要找的零钱为a,用a去除以集合(集合从大到小排列)各个元素,对应的商取整数(当元素大于a时,得到的结果为0,也就不会找取此元素对于面值的钱),同时记录所需找取的面值与个数,注意a不是一成不变的。

备注

此文章为看完某视频后所整理的笔记,非纯原创。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值