贪心算法和动态规划的区别,硬币组合问题贪心算法
动态规划问题之贪婪算法实现硬币最优解贪婪问题实现最少的硬币找零问题:
start_time=time.time()
end_time=time.time()
打印(耗时%f秒 %(结束时间-开始时间))
是我们加入用来计算运算时间的
首先定义一个函数:rec(货币值列表,更改)其中coinValueList是我们的硬币的面值,改变是我们的需要找零的金额
[如果c=变化,则c为coinValueList中的c]:这里创建一个列表用来存储这次找零可以用到的面值金额,然后进行循环调用和递归运算。
导入时间
start_time=time.time()
def rec(coinValueList,change):
硬币=零钱
如果coinValueList发生变化:
返回一
否则:
for I in[c for c in coinValueList if c=change]:
numCoins=1 rec(coinValueList,change-i)
如果numCoins最小硬币:
minCoins=numCoins
返回硬币
打印(建议([1,5,10,25],63))
end_time=time.time()
打印(耗时%f秒 %(结束时间-开始时间))
我们可以看出这种算法耗时非常多,需要进行优化:
加入一个可查询的列表,就不用重复计算已经算过的此面值最优的找零方法,可以节约非常巨大的一部分时间。
导入时间
start_time=time.time()
def rec(coinValueList,change,List):
硬币=零钱
如果coinValueList发生变化:
列表[更改]=1
返回一
否则如果列表[更改] 0:
返回列表[更改]
否则:
for I in[c for c in coinValueList if c=change]:
numCoins=1 rec(coinValueList,change-i,List)
如果numCoins最小硬币:
minCoins=numCoins
清单[零钱]
返回硬币
打印(建议([1,5,10,25],63,[0]*64))
end_time=time.time()
打印(耗时%f秒 %(结束时间-开始时间))
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。