动态规划算法50页PPT
合集下载
第8章动态规划PPT课件
fk
1
(sk
1 )
过程指标(阶段递推)函数:
第23页/共103页
k= 4
7
f4 (C1) = 3, f4 (C2) = 4
A1 4
B1 1
k= 3
2
6
f f
3( 3(
B B
1 2
) )
= =
m m
i i
n n
{ {
1 6
+ +
f f
4( 4(
C C
1 1
) )
= =
4 9
* ,
,
34++f 4f(4QC( C22) =)4=78*
; 的 最 优 控 制 等 问 题
第9页/共103页
§7.2 动态规划的基本概念和基本思想
一、基本概念
使用动态规划方法求解决策问题首先要将问题改造成符合动态规划求解要求的 形式,要涉及以下概念:
(1)阶段
(2)状态
(3)决策与策略
(4)状态转移方程
(5)指标函数
(6)基本方程
第10页/共103页
(1) 划分阶段
• 离散确定型 • 离散随机型 • 连续确定型 • 连续随机型
第6页/共103页
动态规划的特点:
• 动态规划没有准确的数学表达式和定义精确的算法, 它强调具体问题具体分 析, 依赖分析者的经验和技巧。
• 与运筹学其他方法有很好的互补关系, 尤其在处理非线性、离散性问题时有 其独到的特点。
第7页/共103页
何找到的这个终点)无关;-----无后效性
• 3、逐段地求解最优路径,势必会找到一个全过程最优路径。-----
动态规划
动态规划算法教学PPT
03
动态规划算法的实现步骤
明确问题,建立数学模型
1
确定问题的目标和约束条件,将其转化为数学模 型。
2
理解问题的阶段划分,将问题分解为若干个子问 题。
3
确定状态变量和决策变量,以便描述子问题的状 态和决策。
划分阶段,确定状态变量和决策变量
01
根据问题的阶段划分,将问题分解为若干个子问题。
02
确定状态变量和决策变量,以便描述子问题的状态 和决策。
02
将子问题的最优解组合起来,得到原问题的最优解。
对最优解进行验证和性能评估,确保其满足问题的要求。
03
04
动态规划算法的优化技巧
分支定界法
分支定界法是一种求解优化问题的算 法,它通过不断生成问题的分支并确 定每个分支的界限,来寻找最优解。 在动态规划中,分支定界法可以用来 优化状态转移方程,减少计算量。
详细描述
多目标规划问题在实际生活中应用广泛,如资源分配、项目计划、城市规划等领 域都有涉及。常用的求解多目标规划的方法包括权重和法、帕累托最优解等。
多阶段决策问题
总结词
多阶段决策问题是动态规划中的一类,解决的问题需要在多个阶段做出决策,每个阶段的决策都会影响到后续阶 段的决策。
详细描述
多阶段决策问题在实际生活中应用广泛,如生产计划、库存管理、路径规划等领域都有涉及。常用的求解多阶段 决策问题的方法包括递归法、动态规划等。
特点
动态规划算法具有最优子结构、重叠 子问题和最优解性质等特征。
动态规划算法的应用领域
计算机科学
在计算机科学中,动态规划算法广泛应用于字符 串处理、排序、数据压缩和机器学习等领域。
电子工程
在电子工程中,动态规划算法用于信号处理、通 信和控制系统等领域。
算法分析与设计动态规划ppt课件
问题的描述 1)二分检索树定义
二分检索树T是一棵二元树,它或者为空,或者其每个 结点含有一个可以比较大小的数据元素,且有:
·T的左子树的所有元素比根结点中的元素小; ·T的右子树的所有元素比根结点中的元素大; ·T的左子树和右子树也是二分检索树。 注: ·二分检索树要求树中所有结点的元素值互异
29
二分检索树
COST(n)0
for jn -1 to 1 by –1 do
设r是一个这样的结点,<j, r>∈E且使c(j,r)+COST(r)取小值
COST(j)c(j,r)+COST(r)
D(j)r repeat P(1)1;P(k)n
计算出COST(j)的值, 并找出一条最小成本 路径
for j2 to k-1 do
12
4.2 多段图
多段图向前处理的算法
– 设P(i, j)是一条从Vi中的节点j 到汇点t 的最小 成本路径,COST(i, j)表示这条路径的成本, 根据向前处理方法有公式4.5:
13
多段图的向前处理算法
因为,若<j, t> ∈E成立,有COST(k-1,j)=c(j,t), 若<j, t> ∈E不成立,则有COST(k-1,j)=∞,所以 可以通过如下步骤解式公式(4.5),并求出 COST(1,s)。 首先对于所有j∈Vk-2,计算COST(k-2, j),然后对 所有的j∈Vk-3,计算计算COST(k-3, j)等等,最后 计算出计算COST(1, s)
BCOST(2,4)=3; BCOST(2,5)=2;
21
V1
V2
V3
V4
V5
24
9
1
3
二分检索树T是一棵二元树,它或者为空,或者其每个 结点含有一个可以比较大小的数据元素,且有:
·T的左子树的所有元素比根结点中的元素小; ·T的右子树的所有元素比根结点中的元素大; ·T的左子树和右子树也是二分检索树。 注: ·二分检索树要求树中所有结点的元素值互异
29
二分检索树
COST(n)0
for jn -1 to 1 by –1 do
设r是一个这样的结点,<j, r>∈E且使c(j,r)+COST(r)取小值
COST(j)c(j,r)+COST(r)
D(j)r repeat P(1)1;P(k)n
计算出COST(j)的值, 并找出一条最小成本 路径
for j2 to k-1 do
12
4.2 多段图
多段图向前处理的算法
– 设P(i, j)是一条从Vi中的节点j 到汇点t 的最小 成本路径,COST(i, j)表示这条路径的成本, 根据向前处理方法有公式4.5:
13
多段图的向前处理算法
因为,若<j, t> ∈E成立,有COST(k-1,j)=c(j,t), 若<j, t> ∈E不成立,则有COST(k-1,j)=∞,所以 可以通过如下步骤解式公式(4.5),并求出 COST(1,s)。 首先对于所有j∈Vk-2,计算COST(k-2, j),然后对 所有的j∈Vk-3,计算计算COST(k-3, j)等等,最后 计算出计算COST(1, s)
BCOST(2,4)=3; BCOST(2,5)=2;
21
V1
V2
V3
V4
V5
24
9
1
3
2019年动态规划算法.ppt
T(n)
=n
n/2
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4)
2019/4/27
4
算法总体思想
如果能够保存已解决的子问题的答案, 而在需要时再 找出已求得的答案, 就可以避免大量重复计算, 从而 得到多项式时间算法.
2019/4/27
13
Algorithm 7.1 LCS Input: Two strings A and B of length n and m, respectively, over an
alphabet Output: The length of the longest common subsequence of A and B
蛮力法: 列举A所以的2n个子序列, 对于每一子序 列在(m)时间内来确定它是否也是B的子序列.
很明显, 此算法的时间复杂的为(m*2n).
2019/4/27
10
递推公式
为了使用动态规划技术, 首先推导一个求最长公 共子序列长度的递推公式. 令A=a1a2...an和B=b1b2...bm 令L[i, j]表示a1a2...ai和b1b2...bj的最长公共子 序列的长度(i, j可能是0, 此时a1a2...ai和 b1b2...bj中至少一个为空). 可得如下结论:
T(n/4) T(n/4)
T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) STe(nn/s4e) (19T0(5n)/4)
第6章_动态规划ppt课件
gg(u1)
这时,机器的年完好率为a,即如果年初完好 机器的数量为u,到年终时完好的机器就为au, 0<a<1。在低负荷下进行生产时,产品的年 产量和投入生产的机器数量u2的关系为
hh(u2)
PPT学习交流
7
这时,机器的年完好率为b,0<b<1 。
假定开始生产时完好的机器数量为s,要求制定 一个五年计划,在每年开始时,决定如何重新分配 完好的机器在两种不同的负荷下生产的数量,使在 五年内产品的总产量达到最高?
PPT学习交流
15
2.在多阶段决策过程中,动态规划方法是既把前一 段和未来各段分开,又把当前效益和未来效益结 合起来考虑的一种最优化方法。因此,每段决策 的选取是从全局来考虑的,与该段的最优选择答 案一般是不同的。
3.在求整个问题的最优策略时,由于初始状态是已 知的,而每段的决策都是该段状态的函数,故最 优策略所经过的各段状态便可逐次变换得到,从 而确定了最优路线。
因f3是x3线性单调下降函数,故得最优解 x3*=0,相应的有f3(s3)=18s3
PPT学习交流
36
K=2时
f2(s2)0 m x 2 s2 [4 a x 2 x6 s2f3(s3) ]0 m x 2 s2(4 a x 2x 6 s2 1s3 8 ) 0 m x 2 s2 4 a x 2x 6 s2 1(5 4 8 s21 3x 0 2) 0 m x 2 s2(2 a5 2 0 x s27 5x 2)
sk1T k(sk,xk(sk))
PPT学习交流
12
PPT学习交流
13
PPT学习交流
14
§3 动态规划的基本方法
一、动态规划方法的基本原理
动态规划方法的基本思想:
动态规划专题完整ppt
then begin m:=s[c[k-1,j]]+v[c[k,i],c[k-1,j]]; d:=c[k-1,j]; end;
s[c[k,i]]:=m; { S[c[k,j] ] 记录第K个阶段的第J个结点到 终点的最短距离}
h[c[k,i]]:=d;{h[j]记录第j阶段最优路径经过的编号} end; end; writeln(s[n]);
三、动态规划中的几个概念
1、阶段
把解题的次序称为规划方向,把地位相同的结点称为一个 阶段。
2、状态
每一阶段的一个结点称为这个阶段的一个状态。如例1 中的第3阶段,有3个结点C1、C2、C3,称第3阶段有4种 状态,分别是C1、C2、C3。
3、状态转移方程 除边界外的任一阶段都得由其前面的阶段递推得到,这递
如:输入数据: N=7 4 3 2 1 4 4 t[i] 3 4 2 2 4 r[i] 输出 14 1 2+3 4+5 6+7
分析:
设F[i] 表示第i个人到第N个人买票所要的最小 时间。
F[i]=min{t[i]+f[i+1],r[i]+f[i+2] } (i=1,2,…,n-1)
F[n]=t[n] 目标是求f[1], 即所有歌迷总的买票时间的最小 值。
推的过程就表现出了阶段的动态演变。这种根据已有状态求得
未知状态的过程,我们称之为状态转移,状态转移的规则用数 学语言来描述,就称为状态转移方程。状态转移方程的形式多 样,如例1中的形式为G[i]=min{G[j]+ei,j},ei,j∈E。
例题2:排队买票问题
一场演唱会即将举行。现有N(0〈N<=200〉个歌迷 排队买票,一个人买一张,而售票处规定,一个人每次最 多只能买两张票。假设第i位歌迷买一张票需要时间Ti(1 〈=I〈=n〉,队伍中相邻的两位歌迷(第j个人和第j+1个 人)也可以由其中一个人买两张票,而另一位就可以不用 排队了,则这两位歌迷买两张票的时间变为Rj,假如 Rj<T(j)+T(j+1),则这样做就可以缩短后面歌迷等待的时间, 加快整个售票的进程。现给出N,Tj和Rj,求使每个人都买 到票的最短时间和方法。
s[c[k,i]]:=m; { S[c[k,j] ] 记录第K个阶段的第J个结点到 终点的最短距离}
h[c[k,i]]:=d;{h[j]记录第j阶段最优路径经过的编号} end; end; writeln(s[n]);
三、动态规划中的几个概念
1、阶段
把解题的次序称为规划方向,把地位相同的结点称为一个 阶段。
2、状态
每一阶段的一个结点称为这个阶段的一个状态。如例1 中的第3阶段,有3个结点C1、C2、C3,称第3阶段有4种 状态,分别是C1、C2、C3。
3、状态转移方程 除边界外的任一阶段都得由其前面的阶段递推得到,这递
如:输入数据: N=7 4 3 2 1 4 4 t[i] 3 4 2 2 4 r[i] 输出 14 1 2+3 4+5 6+7
分析:
设F[i] 表示第i个人到第N个人买票所要的最小 时间。
F[i]=min{t[i]+f[i+1],r[i]+f[i+2] } (i=1,2,…,n-1)
F[n]=t[n] 目标是求f[1], 即所有歌迷总的买票时间的最小 值。
推的过程就表现出了阶段的动态演变。这种根据已有状态求得
未知状态的过程,我们称之为状态转移,状态转移的规则用数 学语言来描述,就称为状态转移方程。状态转移方程的形式多 样,如例1中的形式为G[i]=min{G[j]+ei,j},ei,j∈E。
例题2:排队买票问题
一场演唱会即将举行。现有N(0〈N<=200〉个歌迷 排队买票,一个人买一张,而售票处规定,一个人每次最 多只能买两张票。假设第i位歌迷买一张票需要时间Ti(1 〈=I〈=n〉,队伍中相邻的两位歌迷(第j个人和第j+1个 人)也可以由其中一个人买两张票,而另一位就可以不用 排队了,则这两位歌迷买两张票的时间变为Rj,假如 Rj<T(j)+T(j+1),则这样做就可以缩短后面歌迷等待的时间, 加快整个售票的进程。现给出N,Tj和Rj,求使每个人都买 到票的最短时间和方法。
《动态规划算法》课件
总结词
多阶段决策优化
详细描述
背包问题是一个经典的动态规划问题,通过将问题分解 为多个阶段,并为每个阶段定义状态和状态转移方程, 我们可以找到最优解。在背包问题中,我们使用一个二 维数组来存储每个状态的最优解,并逐步更新状态以找 到最终的最优解。
最长公共子序列求解
总结词
字符串匹配优化
详细描述
最长公共子序列问题是一个经典的动态规划问题,用 于找到两个序列的最长公共子序列。通过动态规划, 我们可以避免在寻找公共子序列时进行冗余比较,从 而提高算法效率。在动态规划中,我们使用一个二维 数组来存储子问题的最优解,并逐步构建最终的最长 公共子序列。
动态规划的基本思想
01
将问题分解为子问 题
将原始问题分解为若干个子问题 ,子问题的解可以构成原问题的 解。
02
保存已解决的子问 题
将已解决的子问题的解保存起来 ,以便在求解其他子问题时重复 使用。
03
递推求解
从子问题的解逐步推导出原问题 的解,通常采用自底向上的方式 求解。
02
动态规划算法的步骤
可并行化
动态规划算法可以并行化执行,以提高计算效率,这对于 大规模问题的求解非常有利。
缺点
• 空间复杂度高:动态规划算法需要存储大量的中间状态,因此其空间复杂度通常较高,有时甚至会超过问题规 模的一个指数倍。
• 问题规模限制:由于动态规划算法的空间复杂度较高,因此对于大规模问题的求解可能会遇到困难。 • 可能产生大量重复计算:在动态规划算法中,对于每个子问题,可能会被多次计算和存储,这会导致大量的重复计算和存储空间浪费。 • 不易发现:动态规划算法的应用范围有限,对于一些非最优子结构问题或没有重叠子问题的优化问题,动态规划算法可能不适用。因此,在解决问题时需要仔细分析问题特性,判断是
多阶段决策优化
详细描述
背包问题是一个经典的动态规划问题,通过将问题分解 为多个阶段,并为每个阶段定义状态和状态转移方程, 我们可以找到最优解。在背包问题中,我们使用一个二 维数组来存储每个状态的最优解,并逐步更新状态以找 到最终的最优解。
最长公共子序列求解
总结词
字符串匹配优化
详细描述
最长公共子序列问题是一个经典的动态规划问题,用 于找到两个序列的最长公共子序列。通过动态规划, 我们可以避免在寻找公共子序列时进行冗余比较,从 而提高算法效率。在动态规划中,我们使用一个二维 数组来存储子问题的最优解,并逐步构建最终的最长 公共子序列。
动态规划的基本思想
01
将问题分解为子问 题
将原始问题分解为若干个子问题 ,子问题的解可以构成原问题的 解。
02
保存已解决的子问 题
将已解决的子问题的解保存起来 ,以便在求解其他子问题时重复 使用。
03
递推求解
从子问题的解逐步推导出原问题 的解,通常采用自底向上的方式 求解。
02
动态规划算法的步骤
可并行化
动态规划算法可以并行化执行,以提高计算效率,这对于 大规模问题的求解非常有利。
缺点
• 空间复杂度高:动态规划算法需要存储大量的中间状态,因此其空间复杂度通常较高,有时甚至会超过问题规 模的一个指数倍。
• 问题规模限制:由于动态规划算法的空间复杂度较高,因此对于大规模问题的求解可能会遇到困难。 • 可能产生大量重复计算:在动态规划算法中,对于每个子问题,可能会被多次计算和存储,这会导致大量的重复计算和存储空间浪费。 • 不易发现:动态规划算法的应用范围有限,对于一些非最优子结构问题或没有重叠子问题的优化问题,动态规划算法可能不适用。因此,在解决问题时需要仔细分析问题特性,判断是
动态规划算法教学PPT
2013-8-23
作业三:求这个区域的 最长滑坡。 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 19
最大子段和:数列一段的和
N M 7 7 -1 6 2 -13 8 -5 6 6 -5 1 6 7 7 -1
14 13
2013-8-23
12
数塔问题
有形如下图所示的数塔,从顶部出发,在每 一结点可以选择向左下走或是向右下走,一直走 到底层,要求找出一条路径,使路径上的值最大 。
2013-8-23
13
考虑一下:
从顶点出发时到底向左走还是向右 走应取决于是从左走能取到最大值还是 从右走能取到最大值,只要左右两道路 径上的最大值求出来了才能作出决策。 同样,下一层的走向又要取决于再 下一层上的最大值是否已经求出才能决 策。这样一层一层推下去,直到倒数第 二层时就非常明了。 如数字2,只要选择它下面较大值 的结点19前进就可以了。所以实际求解 时,可从底层开始,层层递进,最后得 到最大值。
分别标记出每个 结点到D点的最短 路径
再一例:最短路径
பைடு நூலகம்
动态规划的基本步骤(完整)(选)
(1)【理解题目】找出最优解的性质,并刻画其结构特征。 (2)【状态之间的关系】递归地定义最优值。 (3)【规划的步骤和方式】以自底向上的方式计算出最优值。 理论上自底向上,形式上可有所变化。 (4)【规划的详细过程再现】根据计算最优值时得到的信息,构造 一个最优解。一般需要一个辅助的数组,保存状态之间的变迁线路。 说明: 其中(1)-(3)步是动态规划算法的基本步骤。在只需要求出 最优值的情形,步骤(4)可以省去。 若需要求出问题的一个最优解,则必须执行步骤(4)。此时,在 步骤(3)中计算最优值时,通常需记录更多的信息,以便在步骤 (4)中,根据所记录的信息,快速构造出一个最优解。
第05章 动态规划的基本方法PPT课件
需指出:动态规划是求解某类问题的一种方法,是考察 问题的一种途径,而不是一种算法。必须对具体问题进 行具体分析,运用动态规划的原理和方法,建立相应的 模型,然后再用动态规划方法去求解。
动态决策问题的特点:
系统所处的状态和时刻是进行决策的重要因素; 即在系统发展的不同时刻(或阶段)根据系统所处的状态,不断
图示如下:
状态转移方程是确定过程由一 个状态到另一个状态的演变过 程。如果第k阶段状态变量sk 的值、该阶段的决策变量一经 确定,第k+1阶段状态变量sk+1 的值也就确定。
s1
u1 1
s2
u2 2
s3
sk
uk k
sk+1
能用动态规划方法求解的多阶段决策过程是一类特殊的多阶段决策过程, 即具有无后效性的多阶段决策过程。
量 u1的关系为
g=g(u1)
这时,机器的年完好率为 a , 0<a<1 ,即如果年初完好机器的数量为 u1, 到年终完好的机器就为 au1, 0<a<1。
在低负荷下生产时,产品的年产量 h 和投入生产的机器数量 u2 的关系
为
h=h(u2)
相应的机器年完好率 b, 0< b<1。
假定开始生产时完好的机器数量为 s1。要求制定一个五年计划,在每 年开始时,决定如何重新分配完好的机器在两种不同的负荷下生产的 数量,使在五年内产品的总产量达到最高。
多阶段决策问题的典型例子:
1 . 生产决策问题:企业在生产过程中,由于需求是随时间变化的,因此 企业为了获得全年的最佳生产效益,就要在整个生产过程中逐月或逐 季度地根据库存和需求决定生产计划。
2. 机器负荷分配问题:某种机器可以在高低两种不同的负荷下进行生
动态决策问题的特点:
系统所处的状态和时刻是进行决策的重要因素; 即在系统发展的不同时刻(或阶段)根据系统所处的状态,不断
图示如下:
状态转移方程是确定过程由一 个状态到另一个状态的演变过 程。如果第k阶段状态变量sk 的值、该阶段的决策变量一经 确定,第k+1阶段状态变量sk+1 的值也就确定。
s1
u1 1
s2
u2 2
s3
sk
uk k
sk+1
能用动态规划方法求解的多阶段决策过程是一类特殊的多阶段决策过程, 即具有无后效性的多阶段决策过程。
量 u1的关系为
g=g(u1)
这时,机器的年完好率为 a , 0<a<1 ,即如果年初完好机器的数量为 u1, 到年终完好的机器就为 au1, 0<a<1。
在低负荷下生产时,产品的年产量 h 和投入生产的机器数量 u2 的关系
为
h=h(u2)
相应的机器年完好率 b, 0< b<1。
假定开始生产时完好的机器数量为 s1。要求制定一个五年计划,在每 年开始时,决定如何重新分配完好的机器在两种不同的负荷下生产的 数量,使在五年内产品的总产量达到最高。
多阶段决策问题的典型例子:
1 . 生产决策问题:企业在生产过程中,由于需求是随时间变化的,因此 企业为了获得全年的最佳生产效益,就要在整个生产过程中逐月或逐 季度地根据库存和需求决定生产计划。
2. 机器负荷分配问题:某种机器可以在高低两种不同的负荷下进行生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T(n/2)
4
算法总体思想
但是经分解得到的子问题往往不是互相独立的. 不同子 问题的数目常常只有多项式量级. 在用分治法求解时, 有些子问题被重复计算了许多次.
T(n)
=n
n/2
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4)
n/2
T(n/4) T(n/4)
T(n/4)
n/2
n/2 -----George Santnay/2ana,
The life of Reason,
Book I: Introduction and
Reason in Common
T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) STe(n/s4e) (19T0(5n)/4)
ma L[ix ,j {1]L ,[i1,j]}ifi0,j0anaid bj
09.03.2021
13
现在可以直接用动态规划技术来求解最长 公共子序列问题。对每一对i和j的值,0 i n,0 j m,我们用一个(n+1)×(m+1) 表来计算L[i, j]的值,只需要用上面的公式 逐行地填表L[0…n, 0…m]。算法如下:
09.03.2021
5
算法总体思想
如果能够保存已解决的子问题的答案, 而在需要时再找 出已求得的答案, 就可以避免大量重复计算, 从而得到 多项式时间算法.
Those who can=not renmember the past
arTe(nd)oomed to repeat it.
(无法记取教训者必重蹈覆辙 )
2n n
有效计算上式的方法是按行构造帕斯卡三角形
09.03.2021
9
What is dynamic programming
什么是动态规划?
当子问题发生重叠时, 分治法做了很多不必要的 工作——重复对重叠的子问题进行求解.
动态规划算法对每个子问题求解一次, 然后将结 果保存在一张表里面, 这样可以避免每个已求解 子问题的重复计算.
但是它远不是有效的算法.
算法复杂性: (n) Why???
09.03.2021
7
Fibonacci sequence分析
f(n)= f(n-1)+ f(n-2)
=2f(n-2)+ f(n-3)
=3f(n-3)+2f(n-4)
=5f(n-4)+3f(n-5)
T(n) 1T(n1)T(n2)
If these subproblems are not independent, what will happen?
09.03.2021
3
算法总体思想
动态规划算法与分治法类似, 其基本思想也是 将待求解问题分解成若干个子问题
T(n)
=n
T(n/2)
09.03.2021
T(n/2)
T(n/2)
动态规划算法
怎样思想,就有怎样的生活
Chapter 7
动态规划Dynamic Programming
What is dynamic programming
与分治法类似, 动态规划也是通过组合子问题 的解来求解问题.
分治算法将问题划分成独立子问题, 递归地解决 这些子问题, 然后组合这些子问题的解来求解原 始问题.
09.03.2021
14
Algorithm 7.1 LCS Input: Two strings A and B of length n and m, respectively, over an alphabet
Output: The length of the longest common subsequence of A and B
09.03.2021
12
递推公式
观察结论7.1 如果i和j都大于0, 那么
若ai=bj, L[i, j]=L[i-1, j-1]+1 若aibj, L[i, j]=max{L[i, j-1], + L[i-1, j]}
可得如下公式:
0
ifi0ojr0
L[i,j] L[i1,j1]1
ifi0,j0anaid bj
对于Fibonacci序列, 一个明显的方法是从f(1)开 始自底向上地计算到f(n), 只需要(n)时间和(1) 空间.
和前面的方法相比, 可以很大程度降低时间复杂 度.
09.03.2021
10
The longest common subsequence problem最长公共子序列问题
在字母表上, 分别给出两个长度为n和m的字符 串A和B, 确定在A和B中最长公共子序列的长度.
这符里串A, 其=a中1a每2...个ani的j在子1到序n列之的间一, 个并形且式1为i1<aii21<a.i.2..<..iakik的n 字
蛮力法: 列举A所以的2n个子序列, 对于每一子序 列在(m)时间内来确定它是否也是B的子序列.
很明显, 此算法的时间复杂的为(m*2n).
09.03.2021
11
递推公式
为了使用动态规划技术, 首先推导一个求最长公 共子序列长度的递推公式. 令A=a1a2...an和B=b1b2...bm 令L[i, j]表示a1a2...ai和b1b2...bj的最长公共子 序列的长度(i, j可能是0, 此时a1a2...ai和 b1b2...bj中至少一个为空). 可得如下结论:
if n1,2 if n3
f (n)(n),where1 5
2
09.03.2021
8
二项式系数的计算
1
n k
n k
1 1
n k
1
n k
n! k!(n
k )!
由 Stirling 等式,有
if k 0 or k n if 2 )! ) 2
2nn n / en n(n / 2)n / en
09.03.2021
6
Fibonacci sequence(序列)
Fibonacci序列定义如下:
1. procedure f(n)
2. if n=1 or n=2 then return 1
3. else return f(n-1)+f(n-2)
这种递归形式有简洁、容易书写和容易查错等 优点, 最主要是它的抽象性.