加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

找零兑换递归解决

发布时间:2020-12-17 17:02:23 所属栏目:Python 来源:网络整理
导读:背景: 假设你为宜家自动售货机厂家变成,自动售货机要每次找给顾客最少数量的硬币。如假设某次顾客投进1元纸币,买了0.37的东西,要找0.63元,那么最少数量就是:3个1分钱硬币,1个1毛钱硬币,1个5毛钱硬币 代码: def?recMC(coin_value_li,change):????min

背景:

假设你为宜家自动售货机厂家变成,自动售货机要每次找给顾客最少数量的硬币。如假设某次顾客投进1元纸币,买了0.37的东西,要找0.63元,那么最少数量就是:3个1分钱硬币,1个1毛钱硬币,1个5毛钱硬币

代码:

def?recMC(coin_value_li,change):
????min_coins=change
????if?change?in?coin_value_li:
????????return?1
????for?i?in?[c?for?c?in?coin_value_li?if?c?<=?change]:
????????num_coins=1+recMC(coin_value_li,change-i)
????????if?num_coins<?min_coins:
????????????min_coins=num_coins
????return?min_coins

import?time

print(time.process_time())
print(recMC([1,5,10,25],63))
print(time.process_time())

上述代码中有大量需要重复计算的步骤所以计算速度极慢。

优化代码:

通过将中间结果进行缓存,提高计算速度。

import?time

def?recDC(coin_value_li,change,known_resulsts):
????min_coins=change
????if?change?in?coin_value_li:
????????#?记录最优解
????????known_resulsts[change]=1
????????return?1
????elif?known_resulsts[change]>0:
????????return?known_resulsts[change]
????else:
????????for?i?in?[c?for?c?in?coin_value_li?if?c?<=?change]:
????????????num_coins=1+recDC(coin_value_li,change-i,known_resulsts)
????????????if?num_coins<?min_coins:
????????????????min_coins=num_coins
????????????????#?找到最优解,记录到表中
????????????????known_resulsts[change]=min_coins
????return?min_coins

print(time.process_time())
print(recDC([1,63,[0]*64))
print(time.process_time())


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读