动态规划基本思想和学习目的

 动态规划算法与分治法类似,其基本思想也就是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解,简单概括为自顶向下分解,自底向上求解。动态规划的基本思想:用一个表来记录所有已经解决过的子问题的答案,不管该子问题在以后是否会被用到,只要它被计算过,就将其结果填入表中,以后碰到同样的子问题,就可以从表中直接调用该子问题的答案,而不需要再计算一次。动态规划的适用场合,一般适用于解最优化问题,例如矩阵连乘问题、最长公共子序列、背包问题等等。

学习目的

    适合于用动态规划法求解的问题,经分解得到的子问题往往不是相互独立的,换句话说,就是前面解决过的子问题,在后面的子问题中又碰到了前面解决过的子问题,子问题之间是有联系的。如果用分治法,有些同样的子问题会被重复计算几次,这样就很浪费时间了。所以动态规划是为了解决分治法的弊端而提出的。

矩阵连乘问题描述

    给定n个矩阵:A1,A2,…,An,其中Ai与Ai+1是可乘的,i=1,2…,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。若A是一个p * q的矩阵,B是一个q * r的矩阵,则其乘积C=AB是一个p * r的矩阵。数乘次数是p * q * r.

疑问

A(3 * 5)A(5 * 7)A(7 * 2)的连乘次数和括号划分有关系吗?

(A(3 * 5)A(5 * 7))A(7 * 2) 相乘次数: (3 * 5 * 7)+(3 * 7 * 2) = 147
A(3 * 5)(A(5 * 7)A(7 * 2)) 相乘次数: (5 * 7 * 2)+(3 * 5 * 2) = 100

答案很明显是有关系的。

分析

求 A1A2A3…An 定义 AiAi+1…Ak…Aj-1Aj 子列, 可看成是Ai…Ak,Ak…Aj
确定k的位置,然后按照递归的思想来逐步解决 求得结果后,使i=1,j=n原问题即可求解。

建立递归关系(状态转移方程)

m[i][j]:存储Ai…Aj相乘 的最小数乘次数
S[i][j]:存储最佳断开位置。
A1:P0 * P1(长宽)
A2:P1 * P2
A3:P2 * P3

Ai:Pi-1 * Pi
Ai+1:Pi * Pi+1

An:Pn-1 * Pn
P0 * P1 * P2 … * Pn——n+1个

当i=j时,m[i][j] = 0;
当i<j时,m[i][j] = m[i][k]+m[k+1][j]+Pi-1PkPj
k在i,j之间取值,取值范围为i<=k<j
有递推关系如下:

动态规划的最优子结构性质是:

问题的最优解包含了其子问题的最优解。
最优子结构性质是问题可用动态规划法求解的显著特征。
Ai…Ak,Ak+1…Aj的最优划分也包含在Ai…Aj的最优划分中

在计算出最优值m[i][j]后,可递归地由s[i][j]构造出相应的最优解。

动态规划矩阵连乘问题相关推荐

  1. 蓝桥杯 - 垒骰子(动态规划+矩阵快速幂优化)

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  2. 算法设计与分析——动态规划——矩阵连乘问题

    动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...

  3. 动态规划——矩阵中的最短路径长度

    文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 题目 假设我们有一个 n 乘以 n 的矩阵 w[n][n].矩阵存储的都是正整数.棋子起始位置在左上角, ...

  4. 动态规划——矩阵连乘(算法设计课题)

    问题描述:给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘的,i=1,2 ,-,n-1.如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少.例如:A1={30 ...

  5. 动态规划-矩阵连乘问题

    给定n个矩阵,其中与 是可乘的,   .考察这n个矩阵的连乘积  由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序.这种计算次序可以用加括号的方式来确定. 若一个矩阵连乘积的计算次序 ...

  6. Java动态规划---矩阵链相乘的最小计算代价

    参考书籍:算法导论第三版. 采用自底向上的递归模式来求解. * 动态规划在矩阵链相乘的应用,目的求出最小的计算代价,即矩阵的计算顺序,用加小括号表示. * 主要的计算思想是递归,而且是带备忘录的递归, ...

  7. 矩阵连乘问题算法思想_动态规划-矩阵连乘问题(一)

    动态规划的理论性和实践性都比较强,一方面需要理解状态.状态转移.最优子结构.重叠子问题等概念,另一方面又需要根据题目的条件灵活设计算法. 动态规划是一种用途很广的问题求解方法.它本身并不是一个特定的算 ...

  8. 动态规划——矩阵链相乘

    如果看过我上一篇文章(动态规划--最长公共子序列)的同学,相信已经对动态规划的思想有了一定的了解和认识,即把之前求解得出的子问题存储起来,以便后续求解大问题直接使用. 本章要讲解的问题是矩阵链相乘.因 ...

  9. 动态规划——矩阵连乘问题算法及实现详解(附完整代码)

    问题分析 矩阵连乘问题是经典的动态规划问题,其主要是n个矩阵进行矩阵乘法运算时,通过括号改变运算的先后顺序,减少运算次数,找到最佳划分方法,求解最少运算次数. 算法分析 矩阵连乘问题中动态规划可以帮助 ...

最新文章

  1. php利用上传文件,如何利用PHP上传文件
  2. java httpinvoker漏洞_Spring HttpInvoker 服务端安全验证的和客户端请求配置
  3. 30天敏捷生活(8): 生成你的20/80待做事项列表
  4. libSVM笔记之(一)在matlab环境下安装配置libSVM
  5. AI换脸引发全民恐慌,用对方向却能推动行业变革
  6. Windows sever 2008 动态硬盘数据恢复
  7. 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
  8. 谷歌排名第一的编程语言,收下这份资料,小白也能学的会!
  9. Could not clean server of obsolete files
  10. mysql去重函数的使用方法_MySQL中使用去重distinct方法的示例详解
  11. 2020-09-14 编译Qt的MySQL 5.7插件: qsqlmysql.dll
  12. python snownlp了解_分享python snownlp的实例教程
  13. MATLAB数据线性度计算,非线性度的计算
  14. SVN提交报错: txn-current-lock拒绝访问。
  15. Easy EDA #学习笔记06# | L9110S H桥2路直流电机驱动板设计(附.4056 充电、过充过放保护电路设计)
  16. H5 微信授权登录功能实现
  17. java中文乱码问题
  18. 学籍信息管理系统 c语言,c语言学籍信息管理系统设计
  19. MySQL8.0版本选型建议
  20. 地震模拟在计算机,电子计算机在模拟地震振动台中的应用-力学与实践.PDF

热门文章

  1. 超细粒度分析XLNet中神奇的Attention Mask
  2. ACL 2019 | 面向远程监督关系抽取的模式诊断技术
  3. 叮!请查收本周份「知识图谱」专题论文解读
  4. 【腾讯面试题】Docker
  5. centos安装mysql密码_centos 安装mysql并设置密码
  6. flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...
  7. unity 知道2点计算线段选择角度_影像测量仪实战技巧之角度测量
  8. html5option的js代码,ng-option(示例代码)
  9. SpringMVC-注解@RequestParam
  10. magic number