算法学习——动态规划

动态规划

基本思想

动态规划与分治法类似,其基本思想也是将求解问题分解为若干个子问题,然后从这些子问题的解得到原问题的解。与动态规划不同的是,适用于动态规划求解的问题,经分解得到的子问题往往不是相互独立的。若用分治法解此类问题,则分类得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。动态规划的解决方法就是保存子问题的答案,当需要时再次找出已求得的答案,就可以避免大量重复计算。

关键

这点是我自己的理解,可能有误。
动态规划中最关键的点是状态转移方程。状态转移方程是算法中递推的根本。针对不同的问题,状态转移方程也会有所不同,但其基本思路是将规模较大的问题往小规模问题转移。

例子

接下来一共举三个例子,分别是矩阵连乘问题,联赛胜负概率问题,以及01背包问题

矩阵连乘问题

假设计算n个矩阵的乘积, M = M 1 × M 2 × . . . × M n M=M_1\times M_2\times ...\times M_n M=M1×M2×...×Mn,设 ( p , q ) (p,q) (p,q)阶与 ( q , r ) (q,r) (q,r)阶矩阵相乘,需要计算次数为 q p r qpr qpr次乘法,因此可以看出多个矩阵相乘时,矩阵乘法的顺序对运算次数影响特别大。
设列表 M a t Mat Mat为矩阵的阶,即 ( M a t [ 0 ] , M a t [ 1 ] ) (Mat[0],Mat[1]) (Mat[0],Mat[1]) M 1 M_1 M1的阶,同理有 ( M a t [ k − 1 ] , M a t [ k ] ) (Mat[k-1],Mat [k]) (Mat[k1],Mat[k]) M k M_k Mk的阶。
m [ i , j ] m[i,j] m[i,j]为计算 M i × M i + 1 × L × M j M_i\times M_{i+1}\times L\times M_j Mi×Mi+1×L×Mj的最小代价 ( 1 ≤ i ≤ j ≤ n ) (1\leq i\leq j\leq n) (1ijn),即所需的最少乘法次数。当 i &lt; j i&lt;j i<j时,在 i i i j j j之间取一个 k k k,将 M i × M i + 1 × . . . × M j M_i\times M_{i+1}\times ...\times M_j Mi×Mi+1×...×Mj分为 M i × M i + 1 × . . . × M k M_i\times M_{i+1}\times ...\times M_k M

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值