机器学习-优化算法: 动态规划(DP)

动态规划是一种求解最优化问题的算法,具有无后效性和最优子结构的特点。关键在于确定状态和状态转移方程。常见的例子包括最长上升子序列和最长公共子序列等。动态规划与递推、贪心、搜索等算法的区别在于它通过状态转移找到最优解,而非简单依赖于之前的决策。文章还对比了动态规划与其他四大算法:分治法、回溯法、分支界限法和贪心算法的基本思想和适用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态规划

特点

  1. 本质是缩小最优解空间寻找最优解,所有的决策类求最优解的问题都是在状态空间内找一个可以到达的最佳状态。搜索的方式是去遍历每一个点,而动态规划则是把状态空间变形,由此变成从初始到目标状态的最短路问题。
  2. 无后效性:当前问题的最优解的获得方式与之后的最优解求解无关,即目前的求解算法与之后的求解算法不形成闭环后耦合关系。
  3. 具有最优子结构:在整体问题的最优解可以由子问题的最优解求出。

关键:找准状态和状态转移方程

所以一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!

  • 每个阶段只有一个状态->递推;
  • 每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心;
  • 每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索;
  • 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划。

例子

  1. 最长上升(递增)子序列(LIS) :给定一个数列,长度为N,设F_{k}为:以数列中第k项结尾的最长递增子序列的长度.
    max(F_{k}) 中的最大值.
  2. 最长公共子序列(LCS) 与最长公共子串,最长回文子串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值