算法设计与分析教案第04章.动态规划

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设P[0…n]向量为各矩阵的维数,P[i]为Ai的列数,P[0]为A1的行

数;

初始化m[i][i] = 0;i = 1…n
规 划
L循环从1到n-1,计算m[i][i+L]: i(行下标)循环从1到n-L: j(列下标) = i+L;
m[i][j]=
min{ m[i][k]+m[k+1][j]+P[i-1]P[k]P[j] | k=i..j-1 }

X={x1,x2,…,xm},
Y={y1,y2,…,yn},

求X和Y的一个最长公共子序列;


例:X=ABCBDAB,Y=BDCABA

X和Y的最长公共子序列为:BCBA
最长公共子序列
第 04 章
分析:
设待求的公共子序列为Z={z1,z2,…,zk},则可推论: 若xm=yn,则Z是Xm-1和Yn-1的最长公共子序列+xm; 否则,则Z是X和Yn-1的最长公共子序列(当zk≠xm时)或是Xm-1和
K=1 K=1 K=3 K=3 K=3
0
2625 4375 7125 10500
K=2 K=3 K=3 K=3


3
750 2500 5375 0
K=3 K=3 K=3

4

0
1000 3500
K=4 K=5
5
0
5000
K=5
6
0
最优解为: (A1A(2AA23A)3()A)(4AA54)A5)
矩阵连乘问题
并纪录:s[i][j] = k;
求A1A2A3A4A5A6的最优次序,其中: P[0…6] = { 30, 35, 15, 5, 10, 20, 25 };
mi,j=min{mi,k+mk+1,j+pi-1*pk*pj i≤k<j}
i\j 1
2
3
4
5
Байду номын сангаас
6

04 章
1 2
0
15750 7875 9375 11875 15125

若b[i][j]=2( X1…i-1,Y1…j的最优解),则

解为: X1…i-1,Y1…j的解 若b[i][j]=3( X1…i,Y1…j-1的最优解),则
解为: X1…i,Y1…j-1的解
终结条件:i或j为0时,解为空序列;
算法的改进:可通过c向量推算出b向量,减少空间的消耗
例:X=ABCBDAB,Y=BDCABA


矩阵连乘问题
第 在矩阵连乘过程中,结合顺序的不同会影响总的计算
04
量,因此选择最优的计算顺序将有助于提高计算的效

率;



(A10*20B20*50)C50*10 10*20*50+10*50*10=15000

A10*20(B20*50C50*10) 10*20*10+20*50*10=12000
0
0
0
0
0

1A
0
0
0
0
1
1
1

2B
0
1
1
1
1
2
2
B

X 3C
0
1
1
2
2
2
2
C

4B
0
1
1
2
2
3
3
B
5D
0
1
2
2
2
3
3
6A
0
1
2
2
3
3
4
A
7B
0
1
2
2
3
4
4
对b递归推导得解:BCBA
凸多边形的最优三角剖分

对平面上的一个凸多边形进行三角剖分,即通过多边形的若干条不 相交弦将多边形分割成互不重迭的若干个三角形。

否则:

k = s[i+1][j];

输出Pi…k的最优划分;

输出三角形Δvi,vk,vj;
输出Pk…j的最优划分;
备忘录方法
第 采用与分治法相同的自顶向下的递归求解方法,
04
并引入备忘录表记录已求得的子问题的解;在

递归求解时,先查看备忘录,如果子问题已经

有解,则不再重复求解;



Y的最长公共子序列(当zk ≠yn时);




x1
x2
x3
x4

… xm-1 xm
y1
y2
y3

… yn-1 yn
z1
z2
… zk-1 zk
最长公共子序列
第 递归解法
04 章
问题形式:求X1…i,Y1…j的最长公共子序列; 递归规则:

若xi=yj,则 求X1…i-1,Y1…j-1的最长公共子序列Z1…k;

mii=0

mij=min{mik+mk+1,j+pi-1*pk*pj | i≤k<j}
规 划
pi表示矩阵Ai的列数,Ai+1的行数; 并令sij k,用来记录计算过程
12345
1
矩阵连乘问题
2 3
4
5
第 算法过程
04
为了避免重复的计算,从mi,i出发,依次计算mi,i+1、

mi,i+2、...mi,n,同时记录si,j;过程如下:

引入辅助向量s1..n,1..n,记录k值;
态 规
v0
vn

v1
...
...
vk
凸多边形的最优三角剖分
第 计算最优值
04
给定凸n+1多边形P=<v0,v1,…,vn>和权函数ω(vi, vk, vj);

初始化t[i][i] = 0;i = 1…n; L循环从1到n-1,计算t[i][i+L]:
04 对n个顶点的凸多边形,其三角剖分恰好有n-3条弦和n-2个三角形;

最优三角剖分问题:给定一个凸多边形P={v0,v1,…,vn-1},以及定
义在由多边形边和弦所组成的三角形上的一个权函数ω,要求确定

该凸多边形的一个三角剖分,使得剖分中的诸三角形的权之和最小。


v0
v5

v1 ω012
(m-1,n-2)|(m,n-2),(m-1,n-1)
(m-2,n-1)|(m-1,n-1),(m-2,n)
最长公共子序列

自底向上构造最优值
04
求解X1…m和Y1…n的最长公共子序列,记为(Xm,Yn)

引入辅助向量c0…m,0…n和b1…m,1…n:
c0…m,0…n记录子问题的最优值,

ci,j表示(Xi,Yj)的长度,i或j为0表示X或Y为空序列;
( ( (A1*A2) * A3 ) * (A4*A5) )
凸多边形的最优三角剖分

最优子结构性质
04
若P={v0,v1,…,vn-1}的一个最优三角剖分T包含了三角形v0vkvn-

1,由T0…n-1的权等于T0…k+Tk…n-1+ω0,k,n-1,可知Pn…k和Pk…n-1上 的剖分也是最优的。

态 规
v0
vn

v1
...
...
vk
凸多边形的最优三角剖分
最优三角剖分对应的权的递归结构
第 04
引入辅助向量t1..n,1..n,ti,j表示Pi-1…j的最优三角剖分的权值; 则P0…n的最优三角剖分的权值即t1,n;由最优子结构性质可得:

ti,i=0
ti,j=min{ti,k+tk+1,j+ω(vi-1,vk,vj)|i≤k≤j-1,1≤i<j≤n}
并分别记录b[i][j]=2 或 b[i][j]=3;
最长公共子序列
第 构造最优解
04
由计算最优值时得到的b[1…m][1…n],可以递归地得到最

优解,递归过程如下:
问题形式:X1…i,Y1…j
动 态
递归规则: 若b[i][j]=1(xi=yj的情况),则: 解为:X1…i-1,Y1…j-1的解 + { xi }

Z1…k+{xi}即结果;

否则

求X1…i-1,Y1…j的最长公共子序列Z1;
求X1…i,Y1…j-1的最长公共子序列Z2;
比较Z1和Z2,长度较长的序列即结果;
终结条件:若X或Y为空序列,则Z为空序列;
最长公共子序列

(m,n)
04

(m-1,n-1)|(m,n-1),(m-1,n)
动 态 (m-2,n-2)|(m-1,n-2),(m-2,n-1) 规 划
容易看出,按分治法自顶向下计算时,子问题将会
大量重复出现;
第 04
A1,n


A1A2,n

A1,2A3,n
A1,3A4,n ...

划 A2A3,n A2..3A4,n ... A3A4,n A3,4A5,n ...
矩阵连乘问题
第 定义最优值递归规则
04 章
若设mij表示Ai,j的最优解的计算量,最后一 步乘法是Ai,k*Ak+1,j,则:
《算法设计与分析》 第04章 动态规划
基本思想
第 动态规划方法常用来求解最优化问题。
04 其思想是:问题的最优解如果可以由子问题的

最优解推导得到,则可以先求解子问题的最优

解,再构造原问题的最优解;若子问题有较多

的重复出现,则可以自底向上,从最终子问题

向原问题逐步求解。

设计步骤
第 分析最优值的性质,得到最优值的递归定义;
04 自底向上地计算子问题的最优值,逐步得到

原问题的最优值,并记录计算过程;
动 由最优值的计算过程出构造原问题的最优解;
态 规 划
动态规划算法的基本要素
第 1. 最优子结构性质
04
问题的最优解包含了子问题的最优解。

2. 子问题重叠性质

在自顶向下递归求解时,有些子问题会重

复出现,而被重复计算。
i循环从1到n-L:

j = i+L;

计算t[i][j] =

min{ t[i][k]+t[k+1][j]+ω(vi-1,vk,vj) }

i≤k<j 并记录:s[i][j] = k;
凸多边形的最优三角剖分
第 根据s递归求得最优剖分
04 章
从P0…n起计算Pi…j的最优剖分: 若i+1==j,则递归结束;
矩阵连乘问题
第 分析
04
为方便描述,将Ai×Ai+1……×Aj记作Ai,j;

设最优解的最后一步乘法是A1,k×Ak+1,n,则显然,

A1,k和Ak+1,n应分别是该子式的最优解;总计算量是 这两个子式的计算量加上子式结果相乘的计算量;
态 规 划
这种最优解包含了子问题最优解的性质即称为最优 子结构性质;
计算规则: 若Xi=Yj,则Ci,j=Ci-1,j-1+1,bi,j=1; 否则,若Ci,j-1较大,则Ci,j=Ci,j-1,bi,j=2; 否则,Ci,j=Ci-1,j,bi,j=3 为便于观察,将b=1标为斜箭头,2标为上箭头,3标为左箭头

j
04

Y
章 i
0-
1B
2D
3C
4A
5B
6A
0-
0
0

b1…m,1…n记录子问题的解,

bi,j表示(Xi,Yj)是由哪一个子问题的解得到的,

约定: 若是由(Xi-1,Yj-1)的解得到的,bi,j记为1;
若是由(Xi-1,Yj)的解得到的,bi,j记为2;
若是由(Xi,Yj-1)的解得到的,bi,j记为3。
最长公共子序列

自底向上构造最优值
04
从空序列开始,逐步计算子问题:

初始化c[i][0] = 0; c[0][i] = 0; 对比X和Y的全部字符对,i=1..m, j=1..n:
若X[i]=Y[j],则

由递归规则:c[i][j] = c[i-1][j-1]+1;

记录b[i][j] = 1;

否则

选子问题中的最小值作为当前问题的最优值,即: c[i][j] = max{ c[i-1][j],c[i][j-1] }
ω035
ω345 v4
ω023
v3 v2
凸多边形的最优三角剖分
第 三角剖分的结构及其相关问题
04
三角剖分问题和表达式的完全加括号问题(如矩阵

连乘问题)都可以表述成一个正则二叉树(不含度
为1的结点的二叉树);
动 态
v0 A1
v5 A5

v1
v4

A1 A2 A3 A4 A5
A2 v2
A4
A3
v3

构造最优解——矩阵连乘顺序
04
由计算过程中得到的s向量,可以递归地得到矩阵连乘的计算

顺序;
递归算法如下:

问题形式:计算Ai,j; 递归规则:

k = s[i][j];

X = Ai,k;

Y = Ak+1,j;
结果为:X×Y;
终结条件:Ai,i = Ai
最长公共子序列

问题:
04
给定两个序列
相关文档
最新文档