动态规划算法原理及案例

动态规划是一种通过解决子问题并存储结果以避免重复计算的技术,适用于存在最优子结构和重叠子问题的问题。本文介绍了动态规划的基本概念,包括状态定义和状态转移方程,并通过数塔取数、编辑距离、矩阵取数、最长递增子序列和最大子段和等案例阐述动态规划的解题方法。
摘要由CSDN通过智能技术生成

参考链接:https://www.cnblogs.com/huststl/p/8664608.html

动态规划基本概念

定义:动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做法。动态规划的核心思想巧妙的将问题拆分成多个子问题,通过计算子问题而得到整体问题的解。而子问题又可以拆分成更多的子问题,从而用类似递推迭代的方法解决要求的问题。

基本思想:若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次(将结果存储起来),从而减少计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。 这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。分治与动态规划,通常来说时间复杂度为O(N^2)

应用场景:对于一个可拆分问题中存在可以由前若干项计算当前项的问题可以由动态规划计算。

问题特征:

  1. 最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。
  2. 重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个表格中,在以后尽可能多地利用这些子问题的解。

动态规划与分治方法的比较:

1. 共同点:二者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小(小到很容易解决的程序)的子问题.然后将子问题的解合并,形成原问题的解

2. 不同点:分治法将分解后的子问题看成相互独立的,通过用递归来做。动态规划将分解后的子问题理解为相互间有联系,有重叠部分,需要记忆,通常用迭代来做。

动态规划的解题核心:

动态规划的解题核心主要分为两步:

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值