递归与动态规划(python)

本文探讨了递归与动态规划的概念及其在Python中的实现。递归主要涉及子问题分解、停止条件及决策过程,而动态规划则强调记录子问题的解。通过递归转为动态规划的四步分析法,文章举例说明如何解决矩阵最短路径、累加和匹配、背包问题以及组合计算等经典问题,展示了两者在优化问题求解中的优势。
摘要由CSDN通过智能技术生成

递归:
1、分成子问题
2、停止条件
3、得到子问题之后的决策过程
4、不记录子问题的解
动态规划:
需要记录子问题的解
递归转为动态规划:(无后效性问题)
1、可变参数推出子空间维数
2、从调用看目标状态
3、从停止条件看初始状态
4、从递归函数分析普遍位置依赖

1、从矩阵的左上角走到右下角,只能往下和往右走,矩阵上的值代表代价,求最低代价。
递归:

matrix=[[1,3,2],[0,3,4],[5,7,1]]
def path(i,j,matrix):
    if i==len(matrix)-1 and j==len(matrix[0])-1:
        return matrix[i][j]
    if i==len(matrix)-1 and j!=len(matrix[0])-1:
        return matrix[i][j]+path(i,j+1,matrix)
    if i!= len(matrix)-1 and j == len(matrix[0])-1:
        return matrix[i][j] + path(i+1,j,matrix)
    return matrix[i][j]+min(path(i,j+1,matrix),path(i+1,j,matrix))
print(path(0,0,matrix))

动态规划:

def dp_path(matrix):
    row=len(matrix)
    col=len(matrix[0])
    dp= [[0] * col for i in range(row)]
    dp[row-1][col-1]=matrix[row-1][col-1]
    for i in range(col-2,-1,-1):
        dp[row-1][i]=dp[row-1][i+1]+matrix[row-1][i]
    for i in range(row-2,-1,-1):
        dp[i][col-1]=dp[i+1][col-1]&#
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值