- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章动态规划1概要
动态规划(1)
李建敏
分治法
分治法所能解决的问题一般具有以下几个特征:
该问题的规模缩小到一定的程度就可以容易地解决
该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质
利用该问题分解出的子问题的解可以合并为该问题的 解;
该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
动态规划
动态规划解决的问题一般具有以下几个特征:
该问题的规模缩小到一定的程度就可以容易地解决
该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质
利用该问题分解出的子问题的解可以合并为该问题的解;
该问题所分解出的各个子问题不是相互独立的,即子问题之间包含公共的子问题。
动态规划与分治法
子问题是否相互独立的
动态规划思想
如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。
Those who cannot remember the past are doomed to repeat it.
动态规划基本步骤
找出最优解的性质,并刻划其结构特征
递归地定义最优值。
以自底向上的方式计算出最优值
根据计算最优值时得到的信息,构造最优解
矩阵乘法
矩阵连乘问题
给定n个矩阵:A1, A2, …, An,其中Ai与Ai+1是可乘的。确定一种连乘的顺序,使得矩阵连乘的计算量为最小
设A和B分别是p×q和q×r的矩阵,则乘积C=AB为p×r的矩阵,计算量为pqr次数乘
但是对于多于2个以上的矩阵连乘,连乘的顺序却非常重要,因为不同的顺序的总计算量将会有很大的差别
不同计算顺序差别
若按((A1A2)A3)来计算,则需要的数乘次数为10×100×5 + 10×5×50 = 7500
若按(A1(A2 A3))来计算,则需要的数乘次数为100 ×5 ×50+ 10×100×50 = 75000
不同计算顺序的数量
设n个矩阵的连乘有P(n)个不同的计算顺序
先在第k个和第k+1个矩阵之间将原矩阵序列分成两个矩阵子序列,k=1,…,n;再分别对两个子序列完全加括号,最后对结果加括号,便得到原序列的一种完全加括号方式。
不同计算顺序的数量
设n个矩阵的连乘有P(n)个不同的计算顺序。
由此可得出关于P(n)的递归式:
设解方程可得。
P(n)随n的增长呈指数增长。
9/28/15
计算机算法分析与设计
7
分解最优解的结构
将AiAi+1…Aj的矩阵连乘问题记为A[i: j]。
设A[1: n] 的一个最优解是在Ak和Ak+1处断开的,即A[1: n] = (A[1: k] A[k+1: n]),则A[1: k]和A[k+1: n]也分别是其最优解。
否者,若有A[1: k]的一个计算次序的计算量更少的话,则用此计算次序替换原来的次序,则得到A[1: n]一个更少计算量。矛盾。同理A[k+1: n]也是最优解。
9/28/15
计算机算法分析与设计
最优子结构性质
A1A2…An的矩阵连乘问题,即A[1: n],的每个最优解中的子问题A[1: k]和A[k+1: n]的解也是该子问题的最优解。
最优子结构性质:如果某问题的每个最优解中的子问题的解也是最优的,则称该问题具有最优子结构性质。
换言之,满足最优子结构性质的问题的最优解是由子问题的最优解构成的。
9/28/15
计算机算法分析与设计
建立递归关系
令m[i][j] , 1≤i, j≤n,为计算A[i, j] 的最少数乘次数,则原问题为m[1][n]。
当i = j时,A[i, j]为单一矩阵, m[i][j] = 0;
当i<j时,利用最优子结构性质有:
根据此递归式可以直接用递归程序来实现。
9/28/15
计算机算法分析与设计
建立递归关系
令m[i][j] , 1≤i, j≤n,为计算A[i, j] 的最少数乘次数,则原问题为m[1][n]。
当i = j时,A[i, j]为单一矩阵, m[i][j] = 0;
当i<j时,利用最优子结构性质有:
只需数组P[n+1]就可存放各矩阵的行列数。
9/28/15
计算机算法分析与设计
递归的执行过程
该递归自顶向下地执行,如A[1: 4]计算:
1: 4
1: 1
2: 4
1: 2
3: 4
1: 3
4: 4
2: 2
3: 4
2: 3
4: 4
1:1
2: 2
3: 3
4: 4
1: 1
2: 3
1: 2
3: 3
3: 3
4: 4
2: 2
3: 3
2: 2
3: 3
1: 1
2: 2
9/28/15
计算机算法分析与设计
直接递归的时间复杂性
根据该递归式不难得出的时间复杂性为
n–1
1 + ∑(T(k) + T(n–k) + 1)
k=1
T(n) ≥
文档评论(0)