算法设计 动态规划
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-7-4 22 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 6 5 3 5 8 6
V4 9 10 4
V5
s 1
7
2
5
12
t
11 11 8
11
•(从前)向后:设BPij是从源点s到Vi 中顶点j的最小成本路径,bcost(i,j)是这 条路径的代价 •bcost(i,j)=min{bcost(i-1,r) + C(r,j)}
2013-7-4 14 of 158
向前处理法:设P(i,j)是从Vi中的点j到 t的一条最短路,cost(i,j)是这条路线的 耗费。由后向前推算,得到
cost(i,j)=min{C(j,r)+cost(i+1,r)}
r∈Vi+1 <j,r> ∈E
Vi j
Vi+1 最短 r 最短 t
2013-7-4
15 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 6 5 3 5 8 6
V4 9 10 4
V5
s 1
7
2
5
12
t
11 11 8
11
cost(i,j)=min{C(j,r)+cost(i+1,r)}
cost(4,9)=4 cost(4,10) =2 cost(4,11)=5 cost(3,6)= min{6+cost(4,9),5+cost(4,10)} 5+2 =min{6+4,5+2}=7 从第3段的顶点6到t的最短路径是6-10-t
cost(3,8)=7 •从第3段的顶点8到t的最短路径是8-10-t
2013-7-4 17 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 7 3
V4 6
5 9 10 4 2 5
V5
s 1
12
t
11
11 8 8
5
6 11
cost(2,2)=7 从第2段顶点2到t的最短路是2-7-10-t cost(2,3)=9从第2段顶点3到t的最短路是3-6-10-t cost(2,4)=18从第2段顶点4到t的最短路是4-8-10-t cost(2,5)=15从第2段顶点5到t的最短路是5-8-10-t cost(1,1)=16 从第1段顶点1到t的最短路径由两条:
19 of 158
•为了便于描述算法,对一个k段图的顶点,按 段的顺序给它的每个顶点编号。设图中有n个 顶点,则编号为1,2,·,n。首先,给s编为 · · 1号;然后给V2中的各个顶点分别编为2, 3, · ,| V2 |+1号;以此类推,最后t编号为n。 · · 这样编号使Vi+1中的任何顶点的编号大于Vi中 所有顶点的编号。 •于是,可以按n-1,n-2,·,1的顺序计算出 · · cost(i,j)和D(i,j)。算法中可以利用顺序编号 的特点,而不再考虑顶点所在的段。
动态规划法
方法概述: 发展及研究内容
动态规划(dynamic programming)是运筹学的一个分
支,20世纪50年代初美国数学家R.E.Bellman等人 在研究多阶段决策过程(multistep decision process)的 优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段 问题,逐个求解,创立了解决这类过程优化问 题的新方法——动态规划。 动态规划问世以来,在经济管理、生产调度、 工程技术和最优控制等方面得到了广泛的应用。 例如最短路线、资源分配、设备更新等问题, 用动态规划比用其它方法求解更为方便。
2013-7-4
例1:多段图的最短路问题
多段图:设G=<V,E>是一个有向连通图, 其中|V|=n, |E|=m, V有划分{V1,V2,·,Vk}, · · 这里V1 ={s},s称为源点, Vk ={t},t称为 终点,其中k ≥ 2 。对于每条有向边 <u,v> ∈ E都存在Vi ∈ V,使得u ∈ Vi 和v ∈ Vi+1, 其中1≤i<k且每条边<u,v>均 附有代价C(u,v),则称G是一个k段图。
r ∈Vi-1 <r,j> ∈E
2013-7-4 23 of 158
格路问题:求从起点O(0,0)到终点E(m,n)
的最短路。则分别用穷举法和动态规划法 的加法次数和比较次数各是多少?
y E(m,n)
O(0,0)
2013-7-4
x
24 of 158
2013-7-4
25 of 158
y
E(m,n)
2013-7-4 16 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 6 5 3 5 8 6
V4 9 10 4
V5
s 1
7
2
5
12
t
11 11 8
11
cost(3,7)= min{4+cost(4,9),3+cost(4,10)} =min{4+4,3+2}=5 •从第3段的顶点7到t的最短路径是7-10-t
2013-7-4
•D(2,5)=8, D(1,1)=2 •设从s到t的最短路径为s,w2,w3,·,wk-1,t · · •则有w2=D(1,1)=2 w3= D(2,D(1,1))=D(2,2)=7 w4=D(3,D(2,D(1,1)))=D(3,D(2,2))=D(3,7)=10 •所以这条路径是1-2-7-10-t •所以这条路径是1-2-7-10-t
2013-7-4 5 of 158
方法概述: 适用条件
动态规划法的有效性依赖于问题本身所具有的 两个重要性质 最优子结构:当问题的最优解包含了其子问题 的最优解时,称该问题具有最优子结构性质。 重叠子问题:在用递归算法自顶向下解问题时, 每次产生的子问题并不总是新问题,有些子问 题被反复计算多次。动态规划算法正是利用了 这种子问题的重叠性质,对每一个子问题只解 一次,而后将其解保存在一个表格中,在以后 尽可能多地利用这些子问题的解。
•求两点间最短路径的算法:
Procedure Fgraph 1. { for i ←1 to n cost[i] ←0; 2. for j =n-1 step –1 to 1 do { 3. 找顶点r,使<j,r> ∈E,且C(j,r)+cost[r]最小; 4. cost[j]←C(j,r)+cost[r]; O(n+|E|) 5. D[j] ←r ; } 6. P[1] ←1 ; P[k] ←n; 7. for j=2 to k-1 do P[j] ←D[P[j-1]] }
方法概述: 求解步骤
1、找出最优解的性质,并刻画其结构特征; 2、递归地定义最优值(写出动态规划方程); 3、以自底向上的方式计算出最优值; 4、根据计算最优值时记录的信息,构造最优解。 注: -步骤1-3是动态规划算法的基本步骤。在只需要 求出最优值的情形,步骤4可以省略; -若需要求出问题的一个最优解,则必须执行步 骤4,步骤3中记录的信息是构造最优解的基础
2 of 158
2013-7-4
方法概述: 发展及研究内容
虽然动态规划主要用于求解以时间划分阶段的 动态过程的优化问题,但是一些与时间无关的 静态规划(如线性规划、非线性规划),可以人为 地引进时间因素,把它视为多阶段决策过程, 也可以用动态规划方法方便地求解。
2013-7-4
3 of 158
方法概述: 基本思想
动态规划的思想实质是分治思想和解决冗余。 与分治法类似的是,将原问题分解成若干个子 问题,先求解子问题,然后从这些子问题的解 得到原问题的解。 与分治法不同的是,经分解的子问题往往不是 互相独立的。若用分治法来解,有些共同部分 (子问题或子子问题)被重复计算了很多次。 如果能够保存已解决的子问题的答案,在需要 时再查找,这样就可以避免重复计算、节省时 间。动态规划法用一个表来记录所有已解的子 2013-7-4 4 of 158 问题的答案。
O(0,0) mn个点
2013-7-4 20 of 158
•设顶点的编号已知,边已知及边的代价函 数C(i,j)已知。用cost[i]表示顶点i到t的最小 代价, 1≤i ≤n。用D[i]表示从顶点i到t的最 短路径上顶点i的后继顶点号,用P[i]表示 最短路径经过第i级的顶点号, 1≤i ≤k
2013-7-4
21 of 158
空间溢出的问题,是动态规划解决问 题时一个普遍遇到的问题; 动态规划需要很大的空间以存储中间 产生的结果,这样可以使包含同一个 子问题的所有问题共用一个子问题解, 从而体现动态规划的优越性,但这是 以牺牲空间为代价的,为了有效地访 问已有结果,数据也不易压缩存储, 因而空间矛盾是比较突出的。
10 of 158
6 of 158
2013-7-4
方法概述: 最优性原理及举例
Bellman给出这个原理作为动态规划的适用条 件,后来Morin在1982年证明了这只是一个充 分条件而非必要条件。Bellman的原定义如下:
An optimal policy has the property that whatever the initial state and initial decision are, then remaining decisions must constitute an optimal policy with regard to the state resulting from first decision.
2013-7-4
证明:(反证) 设i~ip~iq~ j是一条最短路径,但其中子 路径ip~iq~ j不是最优的,假设最优的路径 为ip~iq’~ j 则我们重新构造一条路径:i~ip~iq’~ j 显然该路径长度小于i~ip~iq~ j,与i~ ip~iq~ j是顶点i到顶点j的最短路径相矛盾. 所以,原问题满足最优性原理。
2013-7-4 11 of 158
V1
V2 2 9 1 7 3 4 2 11 11 5 8 3 7 4 2 2
V3
V4
V5
6 4 7 5
6
9
s 1
4
5 3 10 2 12 t
5 6
8
11
2013-7-4
12 of 158
最短路:从源点s到终点t的整条路上的
代价之和为最小。
•每个子集Vi构成图中的一段。由于E的 约束,每条从s到t的路径都是从第一段 开始,然后顺次经过第2段,第3段,·, · · 最后在第k段终止。对于每条从s到t的路 径,可以把它看成在k-2个阶段中做出 的某个决策序列的相应结果。
2013-7-4 13 of 158
假设s,v2,v3,·,vk-1,t是一条从s到t的最短路径, · ·
还假定从源点s(初始状态)开始,已做出了到 结点v2的决策(初始决策),因此v2就是初始决 策所产生的状态。如果把v2看成是原问题的一个 子问题的初始状态,解这个子问题就是找出一 条由v2到t的最短路径。这条路径显然是 v2,v3,·,vk-1,t,否则设v2,q3,·,qk-1,t是一条由v2到t · · · · 的更短路径,则s,v2,q3,·,qk-1,t是一条比路径 · · s,v2,v3,·,vk-1,t 更短的由s到t的路径,与假设矛盾, · · 故最优化原理成立。
8 of 158
方法概述: 设计技巧
来自百度文库
动态规划的设计技巧:阶段的划 分和状态的表示; 在动态规划的设计过程中,阶段 的划分和状态的表示是非常重要 的两步,这两步会直接影响该问 题的计算复杂性,有时候阶段划 分或状态表示的不合理还会使得 动态规划法不适用。
9 of 158
2013-7-4
方法概述: 存在的问题
如果有一决策序列包含有非最优的决策子序列,则该决 策序列一定不是最优的。即一个最优策略的子策略总是最 优的。
7 of 158
最优性原理又称为最优子结构性质:
2013-7-4
方法概述: 最优性原理及举例(续)
例1:设G是一个有向加权图,则G从顶点 i到顶点j之间的最短路径具有最优子结构 性质。
2013-7-4
1-2-7-10-t和1-3-6-10-t
18 of 158
从s到t的一条最短路径的代价为16。
•用D(i,j)表示使C(j,r)+cost(i+1,r)取得最小值 的r,则在上述求解过程中同时得到: •D(3,6)=10, D(3,7)=10, D(3,8)=10 •D(2,2)=7, D(2,3)=6, D(2,4)=8
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 6 5 3 5 8 6
V4 9 10 4
V5
s 1
7
2
5
12
t
11 11 8
11
•(从前)向后:设BPij是从源点s到Vi 中顶点j的最小成本路径,bcost(i,j)是这 条路径的代价 •bcost(i,j)=min{bcost(i-1,r) + C(r,j)}
2013-7-4 14 of 158
向前处理法:设P(i,j)是从Vi中的点j到 t的一条最短路,cost(i,j)是这条路线的 耗费。由后向前推算,得到
cost(i,j)=min{C(j,r)+cost(i+1,r)}
r∈Vi+1 <j,r> ∈E
Vi j
Vi+1 最短 r 最短 t
2013-7-4
15 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 6 5 3 5 8 6
V4 9 10 4
V5
s 1
7
2
5
12
t
11 11 8
11
cost(i,j)=min{C(j,r)+cost(i+1,r)}
cost(4,9)=4 cost(4,10) =2 cost(4,11)=5 cost(3,6)= min{6+cost(4,9),5+cost(4,10)} 5+2 =min{6+4,5+2}=7 从第3段的顶点6到t的最短路径是6-10-t
cost(3,8)=7 •从第3段的顶点8到t的最短路径是8-10-t
2013-7-4 17 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 7 3
V4 6
5 9 10 4 2 5
V5
s 1
12
t
11
11 8 8
5
6 11
cost(2,2)=7 从第2段顶点2到t的最短路是2-7-10-t cost(2,3)=9从第2段顶点3到t的最短路是3-6-10-t cost(2,4)=18从第2段顶点4到t的最短路是4-8-10-t cost(2,5)=15从第2段顶点5到t的最短路是5-8-10-t cost(1,1)=16 从第1段顶点1到t的最短路径由两条:
19 of 158
•为了便于描述算法,对一个k段图的顶点,按 段的顺序给它的每个顶点编号。设图中有n个 顶点,则编号为1,2,·,n。首先,给s编为 · · 1号;然后给V2中的各个顶点分别编为2, 3, · ,| V2 |+1号;以此类推,最后t编号为n。 · · 这样编号使Vi+1中的任何顶点的编号大于Vi中 所有顶点的编号。 •于是,可以按n-1,n-2,·,1的顺序计算出 · · cost(i,j)和D(i,j)。算法中可以利用顺序编号 的特点,而不再考虑顶点所在的段。
动态规划法
方法概述: 发展及研究内容
动态规划(dynamic programming)是运筹学的一个分
支,20世纪50年代初美国数学家R.E.Bellman等人 在研究多阶段决策过程(multistep decision process)的 优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段 问题,逐个求解,创立了解决这类过程优化问 题的新方法——动态规划。 动态规划问世以来,在经济管理、生产调度、 工程技术和最优控制等方面得到了广泛的应用。 例如最短路线、资源分配、设备更新等问题, 用动态规划比用其它方法求解更为方便。
2013-7-4
例1:多段图的最短路问题
多段图:设G=<V,E>是一个有向连通图, 其中|V|=n, |E|=m, V有划分{V1,V2,·,Vk}, · · 这里V1 ={s},s称为源点, Vk ={t},t称为 终点,其中k ≥ 2 。对于每条有向边 <u,v> ∈ E都存在Vi ∈ V,使得u ∈ Vi 和v ∈ Vi+1, 其中1≤i<k且每条边<u,v>均 附有代价C(u,v),则称G是一个k段图。
r ∈Vi-1 <r,j> ∈E
2013-7-4 23 of 158
格路问题:求从起点O(0,0)到终点E(m,n)
的最短路。则分别用穷举法和动态规划法 的加法次数和比较次数各是多少?
y E(m,n)
O(0,0)
2013-7-4
x
24 of 158
2013-7-4
25 of 158
y
E(m,n)
2013-7-4 16 of 158
V1 9 7 3 2
V2 2 1 3 7 4 5
4 2 2
V3 6 4 6 5 3 5 8 6
V4 9 10 4
V5
s 1
7
2
5
12
t
11 11 8
11
cost(3,7)= min{4+cost(4,9),3+cost(4,10)} =min{4+4,3+2}=5 •从第3段的顶点7到t的最短路径是7-10-t
2013-7-4
•D(2,5)=8, D(1,1)=2 •设从s到t的最短路径为s,w2,w3,·,wk-1,t · · •则有w2=D(1,1)=2 w3= D(2,D(1,1))=D(2,2)=7 w4=D(3,D(2,D(1,1)))=D(3,D(2,2))=D(3,7)=10 •所以这条路径是1-2-7-10-t •所以这条路径是1-2-7-10-t
2013-7-4 5 of 158
方法概述: 适用条件
动态规划法的有效性依赖于问题本身所具有的 两个重要性质 最优子结构:当问题的最优解包含了其子问题 的最优解时,称该问题具有最优子结构性质。 重叠子问题:在用递归算法自顶向下解问题时, 每次产生的子问题并不总是新问题,有些子问 题被反复计算多次。动态规划算法正是利用了 这种子问题的重叠性质,对每一个子问题只解 一次,而后将其解保存在一个表格中,在以后 尽可能多地利用这些子问题的解。
•求两点间最短路径的算法:
Procedure Fgraph 1. { for i ←1 to n cost[i] ←0; 2. for j =n-1 step –1 to 1 do { 3. 找顶点r,使<j,r> ∈E,且C(j,r)+cost[r]最小; 4. cost[j]←C(j,r)+cost[r]; O(n+|E|) 5. D[j] ←r ; } 6. P[1] ←1 ; P[k] ←n; 7. for j=2 to k-1 do P[j] ←D[P[j-1]] }
方法概述: 求解步骤
1、找出最优解的性质,并刻画其结构特征; 2、递归地定义最优值(写出动态规划方程); 3、以自底向上的方式计算出最优值; 4、根据计算最优值时记录的信息,构造最优解。 注: -步骤1-3是动态规划算法的基本步骤。在只需要 求出最优值的情形,步骤4可以省略; -若需要求出问题的一个最优解,则必须执行步 骤4,步骤3中记录的信息是构造最优解的基础
2 of 158
2013-7-4
方法概述: 发展及研究内容
虽然动态规划主要用于求解以时间划分阶段的 动态过程的优化问题,但是一些与时间无关的 静态规划(如线性规划、非线性规划),可以人为 地引进时间因素,把它视为多阶段决策过程, 也可以用动态规划方法方便地求解。
2013-7-4
3 of 158
方法概述: 基本思想
动态规划的思想实质是分治思想和解决冗余。 与分治法类似的是,将原问题分解成若干个子 问题,先求解子问题,然后从这些子问题的解 得到原问题的解。 与分治法不同的是,经分解的子问题往往不是 互相独立的。若用分治法来解,有些共同部分 (子问题或子子问题)被重复计算了很多次。 如果能够保存已解决的子问题的答案,在需要 时再查找,这样就可以避免重复计算、节省时 间。动态规划法用一个表来记录所有已解的子 2013-7-4 4 of 158 问题的答案。
O(0,0) mn个点
2013-7-4 20 of 158
•设顶点的编号已知,边已知及边的代价函 数C(i,j)已知。用cost[i]表示顶点i到t的最小 代价, 1≤i ≤n。用D[i]表示从顶点i到t的最 短路径上顶点i的后继顶点号,用P[i]表示 最短路径经过第i级的顶点号, 1≤i ≤k
2013-7-4
21 of 158
空间溢出的问题,是动态规划解决问 题时一个普遍遇到的问题; 动态规划需要很大的空间以存储中间 产生的结果,这样可以使包含同一个 子问题的所有问题共用一个子问题解, 从而体现动态规划的优越性,但这是 以牺牲空间为代价的,为了有效地访 问已有结果,数据也不易压缩存储, 因而空间矛盾是比较突出的。
10 of 158
6 of 158
2013-7-4
方法概述: 最优性原理及举例
Bellman给出这个原理作为动态规划的适用条 件,后来Morin在1982年证明了这只是一个充 分条件而非必要条件。Bellman的原定义如下:
An optimal policy has the property that whatever the initial state and initial decision are, then remaining decisions must constitute an optimal policy with regard to the state resulting from first decision.
2013-7-4
证明:(反证) 设i~ip~iq~ j是一条最短路径,但其中子 路径ip~iq~ j不是最优的,假设最优的路径 为ip~iq’~ j 则我们重新构造一条路径:i~ip~iq’~ j 显然该路径长度小于i~ip~iq~ j,与i~ ip~iq~ j是顶点i到顶点j的最短路径相矛盾. 所以,原问题满足最优性原理。
2013-7-4 11 of 158
V1
V2 2 9 1 7 3 4 2 11 11 5 8 3 7 4 2 2
V3
V4
V5
6 4 7 5
6
9
s 1
4
5 3 10 2 12 t
5 6
8
11
2013-7-4
12 of 158
最短路:从源点s到终点t的整条路上的
代价之和为最小。
•每个子集Vi构成图中的一段。由于E的 约束,每条从s到t的路径都是从第一段 开始,然后顺次经过第2段,第3段,·, · · 最后在第k段终止。对于每条从s到t的路 径,可以把它看成在k-2个阶段中做出 的某个决策序列的相应结果。
2013-7-4 13 of 158
假设s,v2,v3,·,vk-1,t是一条从s到t的最短路径, · ·
还假定从源点s(初始状态)开始,已做出了到 结点v2的决策(初始决策),因此v2就是初始决 策所产生的状态。如果把v2看成是原问题的一个 子问题的初始状态,解这个子问题就是找出一 条由v2到t的最短路径。这条路径显然是 v2,v3,·,vk-1,t,否则设v2,q3,·,qk-1,t是一条由v2到t · · · · 的更短路径,则s,v2,q3,·,qk-1,t是一条比路径 · · s,v2,v3,·,vk-1,t 更短的由s到t的路径,与假设矛盾, · · 故最优化原理成立。
8 of 158
方法概述: 设计技巧
来自百度文库
动态规划的设计技巧:阶段的划 分和状态的表示; 在动态规划的设计过程中,阶段 的划分和状态的表示是非常重要 的两步,这两步会直接影响该问 题的计算复杂性,有时候阶段划 分或状态表示的不合理还会使得 动态规划法不适用。
9 of 158
2013-7-4
方法概述: 存在的问题
如果有一决策序列包含有非最优的决策子序列,则该决 策序列一定不是最优的。即一个最优策略的子策略总是最 优的。
7 of 158
最优性原理又称为最优子结构性质:
2013-7-4
方法概述: 最优性原理及举例(续)
例1:设G是一个有向加权图,则G从顶点 i到顶点j之间的最短路径具有最优子结构 性质。
2013-7-4
1-2-7-10-t和1-3-6-10-t
18 of 158
从s到t的一条最短路径的代价为16。
•用D(i,j)表示使C(j,r)+cost(i+1,r)取得最小值 的r,则在上述求解过程中同时得到: •D(3,6)=10, D(3,7)=10, D(3,8)=10 •D(2,2)=7, D(2,3)=6, D(2,4)=8