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

来源:互联网 发布:修改mysql最大连接数 编辑:程序博客网 时间:2024/05/19 08:01

带备忘录的自顶向下遍历

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 = 25p = 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.0009999275207519531memoized method: 400    17.095400094985962
原创粉丝点击