动态规划的两种实现形式

动态规划是解决子问题重叠的分治特例,通过保存子问题解避免重复计算。递推和递归是两种实现方式,前者适用于依赖关系明显但可能计算无用状态的情况,后者在无用状态少时更有效。选择方法取决于无用状态数量和依赖关系的清晰度。

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

动态规划

动态规划与分治方法相似,都是通过组合子问题的解来求解原问题。

动态规划是分治方法的特例,应用于子问题重叠的情况。在这种情况下,分治算法会反复求解这些重叠的子问题。而动态规划算法对每个子问题只求解一次,将其解保存下来,而无需每次都计算。

动态规划的实现有两种形式:递推形式和递归形式。

递推形式的动态规划

通常采用自底往上的方法。

缺点

  1. 有时候状态之间的依赖关系不明显。
  2. 可能会计算到无用状态。
递归形式的动态规划(记忆化搜索)

在分治算法的基础上,把计算过的子问题的解保存下来,再次处理这个子问题时直接输出保存下来的解。

优点
  1. 不用重新考虑状态之间的依赖关系,在分治代码的基础上简单改动即可。
  2. 只有需要用到某个状态才会计算,不会计算无用状态。
缺点
  1. 无用状态不多或没有时,比递推开销大,运行慢。
两种实现形式的选择

有些题目只能用记忆化搜索,有些题目只能用递推。

有些题目这两种形式都可以用,选择方法如下:

  1. 当无用状态多的时候,用记忆化搜索。
  2. 当无用状态不多,依赖关系明显的时候,用递推。
  3. 以上两种都不是的时候,优先选择记忆化搜索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值