动态规划01--切钢条(2)

带备忘录的自顶向下遍历
def memoized_cut_rod_aux(p, n, r):
    '''
    携带一张收益表, 减少重复计算
    '''
    if r[n-1]>=0:
        return [r[n-1], r]

    if n==0:
        return [0, r]
    else:
        q = 0
        for i in range(1, n+1):
            sub_res = memoized_cut_rod_aux(p, n-i, r)
            sq = sub_res[0]
            r = sub_res[1]
            q = max(q, p[i-1]+sq)
    r[n-1] = q
    return [q, r]
进行时间对比
n = 25
p = getp(n)
r = [-1 for i in range(n)]
s = time.time()
q, r= memoized_cut_rod_aux(p, n, r)
e = time.time()
d = (e-s)
s1 = time.time()
q_normal = nr.cut_rod(p, n)
e1 = time.time()
d1 = (e1-s1)
#print(r)
print("normal method:   %s    %s" %(q_normal, d))
print("memoized method: %s    %s" %(q, d1))
#结果
normal method:   400    0.0009999275207519531
memoized method: 400    17.095400094985962
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值