《算法设计与分析》第三章 动态规划.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、最优子结构性质
•利用问题的最优子结构性质,以自底向上的 方式递归地从子问题的最优解逐步构造出整 个问题的最优解。最优子结构是问题能用动 态规划算法求解的前提。
3.2 动态规划法的适用条件
二、重叠子问题性质
递归算法求解问题时,每次产生的子问题并不总是新 问题,有些子问题被反复计算多次。这种性质称为子 问题的重叠性质。
1373
1374
1363T(n)=O(
n m
)
1372
1362 1362
1352
1371 13611361 1351 1361 1351 1351 1341
3.3 动态规划法的基本步骤
找出最优解的性质,并刻划其结构特征。-- 考察是否适合采用动态规划法。
递归地定义最优值(建立递归式或动态规划方 程)。
int Fib(int n) {
f1=f2=0; for(f=1,i=0; i<=n; i++) {
f2=f1; f1=f; f=f1+f2; } return f;
}
3.3 动态规划法的基本步骤
例2 求解二项式系数 求解步骤: 1 具有最优子结构性质 2 具有重叠子问题性质 3 建立递归式或动态规划方程 4 求解。
mn
n! m!(n
m)!
n m
=
1
1
n m
1
mn 11
m=0 n=m 其它
3.2 动态规划法的适用条件
一、最优子结构性质
•在分析问题的最优子结构性质时,所用的方法具有普 遍性:首先假设由问题的最优解导出的子问题的解不 是最优的,然后再设法说明在这个假设下可构造出比 原问题最优解更好的解,从而导致矛盾。
一、最优子结构性质
当问题的最优解包含着其子问题的最优解时,称该问 题具有最优子结构性质。
例1:Fibonacci数问题
n
n≤1
F(n)=
F(n-1)+F(n-2) n>1
3.2 动态规划法的适用条件
一、最优子结构性质
当问题的最优解包含着其子问题的最优解时,称该问题
具有最优子结构性质。
例2:求解二项式系数
动态规划法解所能解决的问题一般具有以下两个 基本因素:
一、最优子结构性质
当问题的最优解包含着其子问题的最优解时,称该问 题具有最优子结构性质。
二、重叠子问题性质
递归算法求解问题时,每次产生的子问题并不总是新 问题,有些子问题被反复计算多次。这种性质称为子 问题的重叠性质。
其它同分治法
3.2 动态规划法的适用条件
3.2 动态规划法的适用条件
一、最优子结构性质
•例3 最短路径问题 设G是有向图,若G中从顶点i到顶点j有
路径存在,找出最短的一条。 下面证明最短路径问题具有最优子结构性质
3.2 动态规划法的适用条件
一、最优子结构性质 证明: 设i,i1,i2,…,ik,j是从i到j的一条最短路径。从初 始顶点i开始,设从i到下一顶点i1的判定已经做 出。接下去,问题就转化为用i1替代i,重复原 来的问题,找出一条从i1到j的路径。显然, i1,i2,…,ik,j一定构成了从从i1到j的最短路径(与 原问题相同的最优子序列)
3.2 动态规划法的适用条件
二、重叠子问题性质
例1: Fibonacci数问题的递归树
Fib(5)
T(n)=O(Fib(n))
Fib(4)
Fib(3)
Fib(3) Fib(2) Fib(2) Fib(1)
Fib(2) Fib(1)
3.2 动态规划法的适用条件
二、重叠子问题性质
例2:
求解二项式系数的递归树
n 3
n 4
n 5
n 6
n 7
01
11 1
21 2 1
31 3 31
41 4 641
51 61
5 10 10 5 1 6 15 20 15 6 1
7 1 7 21 35 35 21 7 1
3.3 动态规划法的基本步骤
例2 求解二项式系数 int Binom(int n, int m) {
int b[MAXSIZE]; b[0]=1; for(i=1;i<=n;i++) {
以自底向上迭代的方式(或以自顶向下的备忘 录方法)计算出最优值;
根据计算Βιβλιοθήκη Baidu优值时得到的信息,构造最优解。
3.3 动态规划法的基本步骤
例1 Fibonacci数问题 求解步骤: 1 具有最优子结构性质 2 具有重叠子问题性质 3 建立递归式或动态规划方程 4 求解值。
3.3 动态规划法的基本步骤
3.1 动态规划法的基本思想
动态规划法与分治法的异同:
– 与分治法类似,动态规划法也是对问题进行递归分解。 – 而当递归分解得到的子问题不互相独立时,用分治法
求解,则有些子问题被重复计算了许多次。而动态规 划法通过保存已解决的子问题的解,在需要时再找出 已求得的解,可以避免大量重复计算。
3.2 动态规划法的适用条件
3.2 动态规划法的适用条件
一、最优子结构性质
证明: 若不然,设i1, r1,r2,…,rp,j是一条从i1 到j的
最短路径,则i,i1, r1,r2,…,rp,j将是一条从i到j的路 径且比路径i,i1,i2,…,ik,j要短,得出矛盾。
所以,最短路径问题具有最优子结构性质。
3.2 动态规划法的适用条件
3.3 动态规划法的基本步骤
例2 求解二项式系数
求解方法:
1 动态规划法:
计算如下序列:
SS10=={{1000, }11
}
SS2n=={{0n02,,121n,,222n},…,
n n
}
3.3 动态规划法的基本步骤
例2 求解二项式系数
1 动态规划法:
Pascal 三角形
n
n 0
1n
n 2
第3章 动态规划(Dynamic-Programming)
3.1 动态规划法的基本思想 3.2 动态规划法的适用条件 3.3 动态规划法的基本步骤 3.4 应用举例-0/1背包问题
3.1 动态规划法的基本思想
为求解给定问题,有一系列子问题需要解答。 对这些子问题按照某种方式仔细设计,使得其 后的每一个子问题都可以通过上面已经求出的 一个或多个子问题的合并而获得其解。
b[i]=1 for(j=i-1;j>0;j++)
b[j]=b[j]+b[j-1]; } return b[m]; }
3.3 动态规划法的基本步骤
例2 求解二项式系数 求解方法: 2 备忘录法:
•备忘录方法的控制结构与直接递归方法的控制结 构相同,区别在于备忘录方法为每个解过的子问 题建立了备忘录以备需要时查看,避免了相同子 问题的重复求解。
•利用问题的最优子结构性质,以自底向上的 方式递归地从子问题的最优解逐步构造出整 个问题的最优解。最优子结构是问题能用动 态规划算法求解的前提。
3.2 动态规划法的适用条件
二、重叠子问题性质
递归算法求解问题时,每次产生的子问题并不总是新 问题,有些子问题被反复计算多次。这种性质称为子 问题的重叠性质。
1373
1374
1363T(n)=O(
n m
)
1372
1362 1362
1352
1371 13611361 1351 1361 1351 1351 1341
3.3 动态规划法的基本步骤
找出最优解的性质,并刻划其结构特征。-- 考察是否适合采用动态规划法。
递归地定义最优值(建立递归式或动态规划方 程)。
int Fib(int n) {
f1=f2=0; for(f=1,i=0; i<=n; i++) {
f2=f1; f1=f; f=f1+f2; } return f;
}
3.3 动态规划法的基本步骤
例2 求解二项式系数 求解步骤: 1 具有最优子结构性质 2 具有重叠子问题性质 3 建立递归式或动态规划方程 4 求解。
mn
n! m!(n
m)!
n m
=
1
1
n m
1
mn 11
m=0 n=m 其它
3.2 动态规划法的适用条件
一、最优子结构性质
•在分析问题的最优子结构性质时,所用的方法具有普 遍性:首先假设由问题的最优解导出的子问题的解不 是最优的,然后再设法说明在这个假设下可构造出比 原问题最优解更好的解,从而导致矛盾。
一、最优子结构性质
当问题的最优解包含着其子问题的最优解时,称该问 题具有最优子结构性质。
例1:Fibonacci数问题
n
n≤1
F(n)=
F(n-1)+F(n-2) n>1
3.2 动态规划法的适用条件
一、最优子结构性质
当问题的最优解包含着其子问题的最优解时,称该问题
具有最优子结构性质。
例2:求解二项式系数
动态规划法解所能解决的问题一般具有以下两个 基本因素:
一、最优子结构性质
当问题的最优解包含着其子问题的最优解时,称该问 题具有最优子结构性质。
二、重叠子问题性质
递归算法求解问题时,每次产生的子问题并不总是新 问题,有些子问题被反复计算多次。这种性质称为子 问题的重叠性质。
其它同分治法
3.2 动态规划法的适用条件
3.2 动态规划法的适用条件
一、最优子结构性质
•例3 最短路径问题 设G是有向图,若G中从顶点i到顶点j有
路径存在,找出最短的一条。 下面证明最短路径问题具有最优子结构性质
3.2 动态规划法的适用条件
一、最优子结构性质 证明: 设i,i1,i2,…,ik,j是从i到j的一条最短路径。从初 始顶点i开始,设从i到下一顶点i1的判定已经做 出。接下去,问题就转化为用i1替代i,重复原 来的问题,找出一条从i1到j的路径。显然, i1,i2,…,ik,j一定构成了从从i1到j的最短路径(与 原问题相同的最优子序列)
3.2 动态规划法的适用条件
二、重叠子问题性质
例1: Fibonacci数问题的递归树
Fib(5)
T(n)=O(Fib(n))
Fib(4)
Fib(3)
Fib(3) Fib(2) Fib(2) Fib(1)
Fib(2) Fib(1)
3.2 动态规划法的适用条件
二、重叠子问题性质
例2:
求解二项式系数的递归树
n 3
n 4
n 5
n 6
n 7
01
11 1
21 2 1
31 3 31
41 4 641
51 61
5 10 10 5 1 6 15 20 15 6 1
7 1 7 21 35 35 21 7 1
3.3 动态规划法的基本步骤
例2 求解二项式系数 int Binom(int n, int m) {
int b[MAXSIZE]; b[0]=1; for(i=1;i<=n;i++) {
以自底向上迭代的方式(或以自顶向下的备忘 录方法)计算出最优值;
根据计算Βιβλιοθήκη Baidu优值时得到的信息,构造最优解。
3.3 动态规划法的基本步骤
例1 Fibonacci数问题 求解步骤: 1 具有最优子结构性质 2 具有重叠子问题性质 3 建立递归式或动态规划方程 4 求解值。
3.3 动态规划法的基本步骤
3.1 动态规划法的基本思想
动态规划法与分治法的异同:
– 与分治法类似,动态规划法也是对问题进行递归分解。 – 而当递归分解得到的子问题不互相独立时,用分治法
求解,则有些子问题被重复计算了许多次。而动态规 划法通过保存已解决的子问题的解,在需要时再找出 已求得的解,可以避免大量重复计算。
3.2 动态规划法的适用条件
3.2 动态规划法的适用条件
一、最优子结构性质
证明: 若不然,设i1, r1,r2,…,rp,j是一条从i1 到j的
最短路径,则i,i1, r1,r2,…,rp,j将是一条从i到j的路 径且比路径i,i1,i2,…,ik,j要短,得出矛盾。
所以,最短路径问题具有最优子结构性质。
3.2 动态规划法的适用条件
3.3 动态规划法的基本步骤
例2 求解二项式系数
求解方法:
1 动态规划法:
计算如下序列:
SS10=={{1000, }11
}
SS2n=={{0n02,,121n,,222n},…,
n n
}
3.3 动态规划法的基本步骤
例2 求解二项式系数
1 动态规划法:
Pascal 三角形
n
n 0
1n
n 2
第3章 动态规划(Dynamic-Programming)
3.1 动态规划法的基本思想 3.2 动态规划法的适用条件 3.3 动态规划法的基本步骤 3.4 应用举例-0/1背包问题
3.1 动态规划法的基本思想
为求解给定问题,有一系列子问题需要解答。 对这些子问题按照某种方式仔细设计,使得其 后的每一个子问题都可以通过上面已经求出的 一个或多个子问题的合并而获得其解。
b[i]=1 for(j=i-1;j>0;j++)
b[j]=b[j]+b[j-1]; } return b[m]; }
3.3 动态规划法的基本步骤
例2 求解二项式系数 求解方法: 2 备忘录法:
•备忘录方法的控制结构与直接递归方法的控制结 构相同,区别在于备忘录方法为每个解过的子问 题建立了备忘录以备需要时查看,避免了相同子 问题的重复求解。