动态规划算法原理介绍与实例解析

一 动态规划的定义:

算法导论给出的定义:通过组合子问题的解来求最优问题的解。该定义太简单了。满足该定义的解法还有分治法、贪婪法。

二 动态规划的求解过程:

1 描述最优解的结构(描)
2 自顶向下递归的拆子问题(拆)
3 按自底向上的方式递归求解子问题(反求)
4 组合子问题求解(组)

如果第3步是直接自顶向下求解的话就是简单的递归方法了

三 适用于动态规划的应用场景:

1 最优子结构

最优子结构:全局问题的最优解包含子问题的最优解

2 子问题重叠

子问题重叠:一个递归算法中不断的调用同一个子问题

四 实例分析 :矩阵链乘法

给定由n个要相乘的矩阵构成的序列A1,A2,A3,…,An,其中每一元素A i是ai-1 *ai的矩阵。要计算其乘积,求计算标量最小的计算顺序。Ai-Ai 的标量是ai-1 *ai*ai+1

1 描

假设Si,j 是Ai,…,Aj序列的最优解的标量值(i<j),定义 Si,j = Si,k+Sk+1,j(i<=k<j) 那么Si,k也一定是Ai,…,Ak序列的最优解。而本问题的解为S1,n

2 拆

Si,j = min(Si,k+Sk+1,j)(i<=k<j)
Si,i = 0

3 反求

j=n;l=1;
do{
for(i=1;i’<’j;i++)
{
Si,i+l
}
}while( 1==j )
每求Si,i+l 时间复杂度为On

4 根据记录打印全局解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值