贪心算法
贪心算法用于解优化问题的一类算法
一.步骤
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不是一成不变的。
备注
此文章为看完某视频后所整理的笔记,非纯原创。