(lecture_06)动态规划(1)

合集下载

动态规划的基本概念

动态规划的基本概念

且也必然对目标函数给予影响,阶段效应就是执行阶段 决策时给目标函数的影响。
多阶段决策过程关于目标函数的总效应是各阶段的阶段 效应累积形成的。常见的全过程目标函数有以下两种形式: (1)全过程的目标函数等于各阶段目标函数的和,即:

R=r1 (x1, u1) +r2 (x2, u2) +…+rn(xn, un) (2)全过程的目标函数等于各阶段目标函数的积,即: R=r1 (x1, u1) ×r2 (x2, u2) ×…×rn(xn, un)
例2(带回收的资源分配问题)某厂新购某种机床125台。据 估计,这种设备5年后将被其它设备所代替。此机车如在高负荷状 态下工作,年损坏率为1/2,年利润为10万元;如在低负荷状态下 工作,年损坏率为1/5,年利润为6万元。问应如何安排这些机床 的生产负荷,才能使5年内获得的利润最大? 本问题具有时间上的次序性,在五年计划的每一年都要作出 关于这些机床生产负荷的决策,并且一旦作出决策,不仅影响到 本年利润的多少,而且影响到下一年初完好机床数,从而影响以 后各年的利润。所以在每年初作决策时,必须将当年的利润和以 后各年利润结合起来,统筹考虑。 与上面例1、例2类似的多阶段决策问题还有资源分配、生产 存贮、可靠性、背包、设备更新问题等等。
在基本方程中, rk(xk, uk), xk+1=T(xk, uk)都是已知函数,
最优子策略fk(xk)与fk+1(xk+1)之间是递推关系, 要求出fk(xk)及uk(xk),需要先求出fk+1(xk+1),这 就决定了应用动态规划基本方程求最优策略总是逆着 阶段的顺序进行的。
另一方面,由于k+1阶段的状态xk+1=T(xk, uk)是由前面的状态 和决策所形成的,在计算fk+1(xk+1)时还不能具体确定xk+1的,这 就要求必须就k+1阶段的各个可能状态计算fk+1(xk+1),因此动态 规划不但能求出整个问题的最优策略和最优目标值,而且还能求 出决策过程中所有可能状态的最优策略及最优目标值。

动态规划讲义(一)

动态规划讲义(一)
递推关系 一般递 推关系 动态 规划
例2的简化版本
7 38 810 2744 45265 给出如上图所示的n层数字三角。现在从顶点出 发,每次只能向下或者向右下方移动一步。问 最多能获得的价值(经过方格的数字之和)是 多少?
如何储存数据
对于该类问题,我们要迅速的想到二维数 组。(因为数据有行信息与列信息这二维) 用数组map[i][j]表示第i行第j列的数值是多 少。当然,从c和c++语言出发,我们习惯 性的从第0行第0列开始计数。 于是我们用两重for循环读入数据 for(i=0;i<n;i++) for(j=0;j<=i;j++) scanf(“%d”,&map[i][j]);
-1 -2
动态规划与递推的关系 递推的关系
上题实质上是采用动态规划来求解,那么与递 上题实质上是采用动态规划来求解 那么与递 推动态规划之间到底是什么关系呢? 推动态规划之间到底是什么关系呢? 我们不妨画个图(如下图 如下图)。 我们不妨画个图 如下图 。而通常人们理解的 递推关系就是一般递推关系, 递推关系就是一般递推关系,故认为动态规 划与递推关系是两个各自独立的个体。 划与递推关系是两个各自独立的个体。
继续类比
此时,问题似乎并未得到解决。不妨再来 看样例中的3,4行。 810 2744 我们暂时不考虑第5行(即最后一层)的 影响。采用和刚才类似的思想:若终点为 (2,0),我们必然会选择(3,1)=7作为起点。 另外两个点完全做一样的贪心选择。
问题得解
现在我们加入第5行,即考虑3~5层 810 2744 45265 若目标为(2,0),则我们的选择可以分为两 步:首先从最后一行出发…. 聪明的你肯定已经发现,我们不需要再重 复的进行分析,之前的两次分析已经给出 了答案

动态规划超级详细的讲义

动态规划超级详细的讲义

动态规划入门1(2008-09-20 21:40:51)第一节动态规划基本概念一,动态规划三要素:阶段,状态,决策。

他们的概念到处都是,我就不多说了,我只说说我对他们的理解:如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。

显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。

每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。

下面举个例子:要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……,这样没个环节就可以看做是一个阶段;产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态变成固态=_=||)。

每个形态就是一个状态,那从液态变成固态经过了冰冻这一操作,这个操作就是一个决策。

一个状态经过一个决策变成了另外一个状态,这个过程就是状态转移,用来描述状态转移的方程就是状态转移方程。

经过这个例子相信大家对动态规划有所了解了吧。

下面在说说我对动态规划的另外一个理解:用图论知识理解动态规划:把动态规划中的状态抽象成一个点,在有直接关联的状态间连一条有向边,状态转移的代价就是边上的权。

这样就形成了一个有向无环图AOE网(为什么无环呢?往下看)。

对这个图进行拓扑排序,删除一个边后同时出现入度为0的状态在同一阶段。

这样对图求最优路径就是动态规划问题的求解。

二,动态规划的适用范围动态规划用于解决多阶段决策最优化问题,但是不是所有的最优化问题都可以用动态规划解答呢?一般在题目中出现求最优解的问题就要考虑动态规划了,但是否可以用还要满足两个条件:最优子结构(最优化原理)无后效性最优化原理在下面的最短路径问题中有详细的解答;什么是无后效性呢?就是说在状态i求解时用到状态j而状态j就解有用到状态k…..状态N。

动态规划算法(一)

动态规划算法(一)
}
动态规划:向后处理(K段图)Байду номын сангаас
BC ( i,j) O m S B iT n C ( i 1 ,O l) c ( l,S j) T l V i 1 l,j E
动态规划:0/1背包问题
对于0/1背包问题,可以通过作出变量x1,x2,…,xi的一个 决策序列来得到它的解。而对变量x的决策就是决定它 们是取0还是取1值。
动态规划:0/1背包-向后处理
先求解f0: i> 当x≥0,f0(x)=0 ii> 当x<0, f0(x)=-∞
利用递推式,求出f1, f2, …, fn
动态规划:0/1背包求解实例
考虑如下背包问题: n=3 (w1, w2, w3)=(2, 3, 4) (p1, p2, p3)=(1,2,5) M=6
求解过程(图解法求解):
i=3: f2(x-w3)+p3
8 7 6 5 4 3 2 1
12
567
9
f3(x)
8 7 6 5 4 3 2 1
1234
67
9
动态规划:0/1背包-向后处理
i=1: f0(x-w1)+p1
f1(x)
2 1
2
6
i=2: f1(x-w2)+p2
3 2 1
2
56
2 1
2
6
f2(x)
C( O i,j) S m T c (ij,l n ) CO (i 1 ,l) ST l V i 1 j,lE
动态规划:向前处理算法
void function FGRAPH(E, int k, int n, int P[]){ int COST[n]; int D[n-1]; int r, j; COST[n]=0; for(j=n-1; j<=1; j--){ r是这样的节点,<j,r>∈E且使c(j,r)+COST[r]最小 COST[j]=c(j,r)+COST[r]; D[j]=r; } P[1]=1; P[k]=n; for(j=2;j<=k-1;j++){ P[j]=D[P(j-1)]; }

《动态规划课件》课件

《动态规划课件》课件

应用场景:求解最短路径、背 包问题等
注意事项:避免重复计算子问 题和记忆化搜索
定义:将问题划分为 若干个较小的子问题, 并逐个解决子问题, 最终得到原问题的解
特点:将原问题分解为 更小的子问题,通过求 解子问题的最优解得到 原问题的最优解
应用场景:适用于 具有重叠子问题和 最优子结构特性的 问题
示例:背包问题、 最大子段和问题等
分段算法的代码 实现
分段算法的时间 复杂度分析
避免重复计算:使用备忘录或动态规划表来记录已计算过的子问题 减少子问题的数量:通过合并或减少不必要的子问题来降低计算复杂度 选择合适的递归方式:根据问题的特点选择最优的递归方式 优化递归栈:通过减少递归深度或使用循环代替递归来提高性能
优化算法:动态规划可以优化算法,提高计算效率 避免重复计算:通过记忆化搜索,避免重复计算,提高计算速度
添加标题ቤተ መጻሕፍቲ ባይዱ
添加标题
添加标题
添加标题
动态规划与分治法比较:分治法将 问题分解为子问题,而动态规划将 子问题联系起来
动态规划与回溯法比较:回溯法会 穷举所有可能解,而动态规划可以 避免不必要的搜索
机器学习与深度 学习中的动态规 划
自然语言处理中 的动态规划
计算机视觉中的 动态规划
推荐系统中的动 态规划
最大子段和问题的定义 最大子段和问题的应用场景 最大子段和问题的解决方法 最大子段和问题的实际应用案例
定义:矩阵链乘法问题是一种优化问题,通过动态规划算法来求解
应用场景:在科学计算、机器学习、图像处理等领域都有广泛的应用
算法原理:通过动态规划算法,将矩阵链乘法问题转化为子问题,从而避免重复计算,提高 计算效率
应用场景:背包问题在计算机科学、运筹学、经济学等领域都有广泛的应用,如资源分配、路径规划、时间表安 排等。

动态规划讲义

动态规划讲义

第6章动态规划最优化原理1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决。

一些静态模型,只要人为地引进“时间”因素,分成时段,就可以转化成多阶段的动态模型,用动态规划方法去处理。

与此同时,他提出了解决这类问题的“最优化原理”(Principle of optimality):上述程序实现方法同样适合于背包问题,最优库存问题等,只是针对具体情况,最优决策表的表示和生成会有所不同。

“一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略”。

简言之,一个最优策略的子策略,对于它的初态和终态而言也必是最优的。

这个“最优化原理”如果用数学化一点的语言来描述的话,就是:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的。

最优化原理是动态规划的基础。

任何一个问题,如果失去了这个最优化原理的支持,就不可能用动态规划方法计算。

能采用动态规划求解的问题都需要满足一定的条件:(1)问题中的状态必须满足最优化原理;(2)问题中的状态必须满足无后效性。

所谓的无后效性是指:“下一时刻的状态只与当前状态有关,而和当前状态之前的状态无关,当前的状态是对以往决策的总结”。

问题求解模式动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。

这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。

如图所示。

动态规划的设计都有着一定的模式,一般要经历以下几个步骤:初始状态→│决策1│→│决策2│→…→│决策n│→结束状态(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。

动态规划

动态规划

5 . 最短路问题:给定一个交通网络图如下,其 中两点之间的数字表示距离(或花费),试求从A点 到G点的最短距离(总费用最小)。
1 C1 3 6 8 3 D1 1 2 2 2 5 E2 2 D2 E1 3
5
A 3
B1
6
8 B2 7 6
C2
5
3
5
F1
3
4
G
C3 8 C4
3
4 D3
3
3 4 E3
6
6
F2
3.航天飞机飞行控制问题:由于航天飞机的运 动的环境是不断变化的,因此就要根据航天飞机飞 行在不同环境中的情况,不断地决定航天飞机的飞 行方向和速度(状态),使之能最省燃料和实现目 的(如软着落问题)。
不包含时间因素的静态决策问题(本质上是一 次决策问题)也可以适当地引入阶段的概念,作为 多阶段的决策问题用动态规划方法来解决。 4.线性规划、非线性规划等静态的规划问题也可 以通过适当地引入阶段的概念,应用动态规划方法 加以解决。
f k sk min d k sk , uk sk f k 1 uk sk u k Dk s k f 6 s6 0或 写 成 5 s5 d 5 s5 , F f
k 5,4,3,2,1
动态规划的基本方程(二)
D4(D1)={E1,E2},D4(D2)= {E1,E2}
D5(E1)={F}, D5(E2)={F}
4 A 5
2 B1 3 5 B2 8 7 7
⑷状态转移方程 上例中的状态转移方程sk+1=uk(sk)
C1 5 8 C2 45 3 C3 4 84 C4
D1 3 5 E1 4 6 D2 2 3 E2 1 3 D3

动态规划专题讲义课件

动态规划专题讲义课件

VS
状态转移方程是动态规划中的重要概念,它描述了状态之间的转移关系。在求解问题时,通过状态转移方程可以将一个状态转移到另一个状态,从而逐步求解出问题的最优解。
状态转移方程的建立需要通过对问题进行深入分析,找出状态之间的依赖关系,并建立数学模型。在应用状态转移方程时,需要注意状态的初始状态和终止状态,以及状态转移过程中的约束条件。
02
动态规划的基本概念
最优化原理是动态规划的核心思想,它认为一个问题的最优解可以通过子问题的最优解来构建。在解决复杂问题时,将问题分解为若干个子问题,分别求解子问题的最优解,再利用子问题的最优解来求解原问题的最优解。
最优化原理的应用范围很广,包括计算机科学、运筹学、经济学等领域。通过将问题分解为子问题,可以降低问题的复杂度,提高求解效率。
自顶向下策略
自底向上策略
分支定界法:通过将问题分解为多个分支来解决问题,同时使用界限来排除不可能的解。与动态规划结合,可以更有效地处理具有大量状态和决策的问题。
THANK YOU
感谢各位观看
排班问题
如求解最优的排班方案,使得员工的工作计划合理且满足各种约束条件。
03
递推关系
建立子问题的解之间的递推关系,通过这种关系逐步求解更大规模的问题,直到达到原问题的解。
01
将原问题分解为子问题
将原问题分解为若干个子问题,这些子问题是原问题的较小规模或部分问题的解。
02
存储子问题的解
将已解决的子问题的解存储起来,以便在求解更大规模的问题时重复使用,避免重复计算。
03
动态规划的算法实现
状态空间法是动态规划的基本方法,通过构建状态转移方程来求解最优化问题。
状态转移方程描述了从状态转移至其他状态的过程,通过迭代更新状态变量的值,最终得到最优解。

动态规划求解方法

动态规划求解方法

动态规划求解方法动态规划(Dynamic Programming)是一种常见的求解优化问题的方法,它通过将问题分解成更小的子问题,并保存子问题的解来降低时间复杂度。

动态规划通常使用一个表格来记录子问题的解,然后根据递推关系计算出更大问题的解。

动态规划的求解方法一般包含以下几个步骤:1.定义问题:首先,需要明确要解决的问题是什么。

动态规划通常适用于求解具有最优子结构性质的问题,即原问题的最优解可以通过一系列子问题的最优解得到。

2.确定状态:接下来,需要确定动态规划的状态。

状态是问题中会变化的量,它包含了问题的关键信息。

在动态规划中,状态可以是一个或多个变量。

3.建立转移方程:然后,需要建立问题的转移方程。

转移方程描述了问题状态之间的关系,用来计算子问题的最优解。

转移方程可以通过观察问题的特点或者使用递推关系得到。

4.确定初始条件:接下来,需要确定边界条件或初始条件。

边界条件是问题中的一些特殊情况,它们通常是一些最小子问题的解。

初始条件是指将边界条件中的解赋值给表格中对应的位置。

5.使用递推关系计算:最后,使用递推关系将表格中的其他位置的解计算出来。

通常,可以使用自底向上的方法,从表格的第一个位置开始计算,依次填充整个表格。

动态规划的优点在于它可以将一个复杂的问题分解成多个子问题,然后通过记录子问题的解来减少重复计算。

这样,可以大大提高求解问题的效率。

动态规划通常适用于求解满足最优化原理和无后效性条件的问题。

最优化原理是指问题的最优解具有递归的结构,即解可以通过子问题的最优解得到。

无后效性条件是指问题的当前状态决定了未来的决策,与过去的决策无关。

动态规划在算法设计和实现中有很多经典的应用,例如最长公共子序列问题、0/1背包问题、最短路径问题等。

下面简要介绍其中的两个经典应用。

1.最长公共子序列问题:给定两个字符串s1和s2,求它们的最长公共子序列。

最长公共子序列是指在两个字符串中以相同的顺序出现的最长的子序列。

动态规划-1

动态规划-1
A1 ( 3, 1) = min{A 0( 3 ,1) , A 0( 3 ,1) +A 0( 1 ,1) }= 3
A1 ( 3, 2) = min{A 0( 3 ,2) , A 0( 3, 1) +A 0( 1 ,3) }= 3+4=7
Pr()是推导出最小成本路径的子函数:
pr() { int link; link=1; printf("1 ");
都是优化的,但最后结果不一定是最优的,则不能使用动 态规划方法。
优化问题给出约束条件和目标函数。所谓优化就是使
目标函数在给定的约束条件下达到最大或最小值。用动态 规划求解问题的步骤是:
1.将问题分解成若平个子问题,即将整个问题的最优 解与子问题的局部最优解用递推的等式联系起来。 2.找到边界条件。 3.将边界条件代入递推等式,逐步求得最优解。
main() { int b,z,e,f,k,m;
for (i=1;i<=12;i++) c[i]=0; v[1]=1;v[2]=4;v[3]=3;v[4]=3;v[5]=1;z=12;b=4; do { for (k=v[b];k>=1;k--) { e=z-k; m=99;
for (j=1;j<=v[b+1];j++) { f=z-1+j; if (g[e][f]==0) continue; if (g[e][f]+c[f]<m) {m=g[e][f]+c[f]; d[e]=f; } } c[e]=m; printf("e=%d c[e]=%d\n",e,c[e]);
printf("-%2d ",link); } printf("\n"); }

《动态规划》课件

《动态规划》课件
《动态规划》PPT课件
动态规划(Dynamic Programming)是一种用来解决复杂问题的算法思想。
什么是动态规划
动态规划是一种将问题拆分成子问题并进行最优解比较的算法,常用于求解最优化问题。
问题模型
状态
将问题抽象成能够描述当前情况的状态。
目标
定义问题的目标,通常是最小化或最大化某 个指标。
经典面试题:爬楼梯问题
爬楼梯问题是指给定楼梯的阶数,求解爬到楼顶的不同方式的数量。
经典面试题:硬币找零问题
硬币找零问题是指给定一定面值的硬币和一个金额,找到凑出该金额的最少 硬币数。
经典面试题:最长回文子串问题
最长回文子串问题是指找到给定字符串中最长的回文子串。
实用案例:机器人找出路
机器人找出路是指给定一个迷宫,找到从起点到终点的路径。
决策
根据状态作出选择或决策。
转移方程
根据子问题的最优解推导出整体问题的最优 解。
最优子结构和重叠子问题
1 最优子结构
问题的最优解包含了子问题的最优解。
2 重叠子问题
子问题之间存在重复的计算,可以利用记 忆化存储中间结果来优化。
动态规划三部曲
1
定义状态
明确问题的状导转移方程
国王游戏问题
国王游戏问题是指在一个棋盘上放置国王,使得它们无法互相攻击。
编辑距离问题
编辑距离问题是指计算两个字符串之间转换的最小操作次数,包括插入、删 除和替换操作。
矩阵连乘问题
矩阵连乘问题是指给定一系列矩阵,找到最佳的乘法顺序,使得计算乘法的总次数最小。
最长递增子序列问题
最长递增子序列问题是指找到给定序列中最长的递增子序列的长度。
斐波那契数列问题

动态规划(1)解析

动态规划(1)解析

例3(生产与存储问题)某工厂生产并销售某种产品。
已知今后四个月市场需求预测及每月生产j个单位
○1北0 京84
○8 ○9
河北
5 8 ○5 6 9○6 6 1○7
山西
10 9
○2
7
6 7
○3
8 3○4
2 4 ○1
3 甘肃
陕西
3、决策:当一个阶段的状态确定后,可以作出各种选
允许决 择从而演变到下一阶段的某个状态,这种选 策集合 择手段称为决策
决策变量 描述决策的变量 ,简称为决策
uk
sk
第k阶段处
2 4 ○1
3 甘肃
8 3○4
陕西
s4 第4阶段的状态变量 s4=8 第4阶段的状态○8
S3 ={s3}={5,6,7} S5 ={10}
注:n个阶段的决策过程有个n+1状态变量 sn+1,表示sn演变的结果
例3(生产与存储问题)某工厂生产并销售某种 产品。已知今四个月市场需求预测如下表,又 每月生产j个单位产品的费用为

状态s
时的决策
k


U k sk 决策变量uk (sk )允许取值的范围
○北10 京84
○8 ○9
河北
5 8 ○5 6 9○6 6 1○7
山西
10 9
○2
7
6 7
○3
8 3○4
2 4 ○1
3 甘肃
陕西
u2 3 第2阶段当状态为3时的决策变量
可取值为:5,6,7
u2 3 7
决策 3 7
U 2 3 ={5,6,7}
例4(投资决策问题)某公司现有资金Q万 元,在今后5年内决定给A、B、C、D四 个项目投资,这些项目的投资期限、回 报率均不相同,问应如何确定这些项目 每年的投资额,使到第5年末拥有资金的 本利总额最大。

动态规划

动态规划



状态 B1 在决策 u2 ( B1 ) 作用下的一个新的状态,记作u2 ( B1 ) C2 . 4、策略 策略是一个按顺序排列的决策组成的集合。由过程的第 k 阶段开始到 终止状态为止的过程,称为问题的后部子过程(或称为 k 子过程)。
返回 结束
动态规划
由每段的决策按照顺序排列组成的决策函数序列
k 1,2,, n.
对于动态规划模型的指标函数,应具有可分离性,并满足递推关系
Vk ,n k [ sk , uk ,Vk 1,n ( sk 1 ,, sn1 )]
在实际问题中指标函数都满足这个性质。 常见的指标函数有下列两种形式 (1)过程和任一子过程的指标是它所包含的各阶段指标的和,即
指标函数的最优值,称为最优值函数,记作 f k (sk ) 它表示从第 k 阶段 的状态 sk 开始到第 n 阶段的终止状态的过程,采取最优策略所得到的 指标函数值。即
f k ( sk ) opt Vk ,n ( sk , uk ,, sn1 )
uk ,,un
返回 结束
动态规划
在不同的问题中,指标函数的含义不同,它可能是距离,利润,成本 ,产品的产量,资源消耗等。 二、动态规划的基本思想和基本方程 结合最短路问题介绍动态规划的基本思想 。最短路线有一个重要特性,
这种递推关系式称为动态规划的基本方程。
返回
结束
动态规划
资源分配问题 某工业部门根据国家计划的安排,将某种高效率的设备 五台,分配给所属的甲、乙、丙三个工厂,各工厂若获得 这种设备之后,可以为国家提供盈利如表2-2所示。
问这五台设备应如何分配给工厂,才能使国家得到的 盈利最大。
返回
结束
动态规划
表2-2

动态规划(运筹学讲义).

动态规划(运筹学讲义).

)

min
d d
( (
E2 E2
, ,
F1) F2 )
f6 (F1) f6 (F2 )

min
5 2

4 3

5
u*5 (E2 )= F2
f5
(E3
)

min
d d
( (
E3 E3
, ,
F1) F2 )

f6 (F1) f6 (F2 )


min


fk
(sk
)

opt
uk Dk ( sk
)
vk (sk ,uk ) fk1(sk1)
fn1(sn1) 0
k=n, n 1, ,1
(8.4a) (8.4b)
Opt 可根据题意取 min 或 max
11
动态规划的基本思想如下:
(1)动态规划方法的关键在于正确写出基本递推关系式和恰当的边界条 件,因此必须将多阶段决策过程划分为n个相互联系的阶段,恰当地选取 状态变量、决策变量及定义最优指标函数,从而把问题化为一族同类型 的子问题,然后逐个求解 (2)求解时从边界条件开始,逆(或顺)过程逐段递推寻优。在每一个 子问题求解中,均利用了它前面子问题的最优结果,最后一个子问题的 最优解,就是这个问题的最优解。 (3)动态规划方法既把当前阶段与未来阶段分开,又把当前效益和未来 效率结合,因此每段的最优决策选取是从全局来考虑。 (4)在求这个问题的最优解时,由于初始状态是已知,而每阶段的决策 都是该段状态的函数,故最优策略所经过的各各阶段状态可逐次变换得 到,从而确定最优路线。
量最高。
决策
决策
决策
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-12-20 10
一、数塔问题
有形如下图所示的数塔,从顶部出发, 有形如下图所示的数塔,从顶部出发,在每 一结点可以选择向左走或是向右走,一直走到底 一结点可以选择向左走或是向右走, 层,要求找出一条路径,使路径上的值最大。 要求找出一条路径,使路径上的值最大。
2011-12-20
11
用暴力的方法,可以吗? 的方法,可以吗?
2011-12-20 29
三、动态规划问题的特征
动态规划算法的有效性依赖于问题本身所具 有的两个重要性质: 1、最优子结构:当问题的最优解包含了其子 问题的最优解时,称该问题具有最优子结构性质。 2、重叠子问题:在用递归算法自顶向下解问 题时,每次产生的子问题并不总是新问题,有些 子问题被反复计算多次。动态规划算法正是利用 了这种子问题的重叠性质,对每一个子问题只解 一次,而后将其解保存在一个表格中,在以后尽 可能多地利用这些子问题的解。
(1)找出最优解的性质,并刻画其结构特征。 )找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 )递归地定义最优值。 的方式计算出最优值。 (3)以自底向上的方式计算出最优值。 ) 自底向上的方式计算出最优值 (4)根据计算最优值时得到的信息,构造一个最优解。 )根据计算最优值时得到的信息,构造一个最优解。 其中( )-( )-(3)步是动态规划算法的基本步骤。 其中(1)-( )步是动态规划算法的基本步骤。在 只需要求出最优值的情形,步骤(4)可以省去。若需 只需要求出最优值的情形,步骤( )可以省去。 要求出问题的一个最优解,则必须执行步骤( )。 )。此 要求出问题的一个最优解,则必须执行步骤(4)。此 在步骤( )中计算最优值时, 时,在步骤(3)中计算最优值时,通常需记录更多的 信息,以便在步骤( ) 根据所记录的信息, 信息,以便在步骤(4)中,根据所记录的信息,快速 构造出一个最优解。 构造出一个最优解。
2011-12-20 8
重点分析——n的情况: 的情况: 重点分析 的情况
我们来分析加入第N条直线的情况(这里以N=4为例) 我们来分析加入第N条直线的情况(这里以N=4为例): N=4为例 分类方法:和第N条直线平行的在a 其余在b (分类方法:和第N条直线平行的在a组,其余在b组) 0+4*0+0=0; 1、第四条与其余直线全部平行 => 0+4*0+0=0; 第四条与其中两条平行,交点数为0+(n 0+(n2、第四条与其中两条平行,交点数为0+(n-1)*1+0=3; 第四条与其中一条平行, 3、第四条与其中一条平行,这两条平行直线和另外两点直线的交 点数为(n 2)*2=4,而另外两条直线既可能平行也可能相交 (n而另外两条直线既可能平行也可能相交, 点数为(n-2)*2=4,而另外两条直线既可能平行也可能相交,因此 可能交点数为: 可能交点数为: 0+( 0+(n0+(n-2)*2+0=4 或者 0+(n-2)*2+1=5 第四条直线不与任何一条直线平行,交点数为: 4、 第四条直线不与任何一条直线平行,交点数为: 0+(n(n(n0+(n-3)*3+0=3 或0+ (n-3)*3+2=5 或0+ (n-3)*3+3=6 n=4时 个不同交点数。 即n=4时,有0个,3个,4个,5个,6个不同交点数。
f 1 2 3 3 3 3
b 1 2 3 3 3 4
c 1 2 3 4 4 4
24
子结构特征: 子结构特征:
f(i,j)=
{
f(i-1,j-1)+1 (a[i]==b[j]) max(f(i-1,j),f(i,j-1)) (a[i]!=b[j])
由于f(i,j)只和f(i-1,j-1), f(i-1,j) f(i,j-1) f(i,j) f(i-1,j-1), f(i-1,j)和f(i,j-1)有关, 而在计 , 算f(i,j)时, 只要选择一个合适的顺序, 就可以保证这 三项都已经计算出来了, 这样就可以计算出f(i,j). 这 样一直推到f(len(a),len(b))就得到所要求的解了.
2011-12-20 15
二、思考题:最长有序子序列 思考题:
I 0 1 4 2 7 3 2 4 5 5 8 6 3 7 6 8 9
Num[I] 1
2011-12-20
16
解决方案: 解决方案:
I
Num[I]
0 1 1
1 4 2
2 7 3
3 2 2
4 5 3
5 8 4
6 3 3
7 6 4
8 9 5
2011-12-20
25
理论小结
2011-12-20
26
一、动态规划的基本思想
如果各个子问题不是独立的,不同的子问 题的个数只是多项式量级,如果我们能够 保存已经解决的子问题的答案,而在需要 的时候再找出已求得的答案,这样就可以 避免大量的重复计算。由此而来的基本思 路是,用一个表记录所有已解决的子问题 的答案,不管该问题以后是否被用到,只 要它被计算过,就将其结果填入表中。
F[I]
2011-12-20
17
三、1160 FatMouse's Speed
Sample Input 6008 6000 500 1000 1100 6000 8000 6000 2000
2011-12-20Fra bibliotek1300 2100 2000 4000 3000 2000 1400 1200 1900
2011-12-20 9
重点分析——n的情况: 的情况: 重点分析 的情况
从上述n=4的分析过程中,我们发现: 从上述n=4的分析过程中,我们发现: n=4的分析过程中 m条直线的交点方案数 条平行线与r =(m-r)条平行线与r条直线交叉的交点数 r条直线本身的交点方案 + r条直线本身的交点方案 r+r条之间本身的交点方案数 =(m-r)*r+r条之间本身的交点方案数 0<=r<m) (0<=r<m)
常规练习(包含以上作业) 二、常规练习(包含以上作业)
1003、 1003、1466 、 1087、1159、 1087、1159、 1176、1058、 1176、1058、 1069、2059、 1069、2059、 2084、 2084、2151
2011-12-20 34
Sample Input abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
2011-12-20
23
辅助空间变化示意图
a b f c a b
2011-12-20
a 1 1 1 1 1 1
b 1 2 2 2 2 2
c 1 2 2 3 3 3
2011-12-20
19
Qestion:
两个问题有本质 区别吗? 区别吗?
2011-12-20 20
思考(期末考试题): 思考(期末考试题):
Super Jumping! Jumping! Jumping!
2011-12-20
21
解题思路? 解题思路?
四、1159 Common Subsequence
2011-12-20
12
试想一下: 试想一下:
这道题如果用枚举法(暴力思想),在 数塔层数稍大的情况下(如31),则需 要列举出的路径条数将是一个非常庞大 的数目(2^30= 1024^3 > 10^9=10亿)。
2011-12-20
13
暴力, 和谐~ 拒绝暴力,倡导和谐~
2011-12-20
14
第六讲
动态规划(1) 动态规划(1)
(Dynamic programming) programming)
2011-12-20
1
先热身一下—— 先热身一下
2011-12-20
2
菲波那契数列
三种方法:
递归 递推 动态规划
2011-12-20
3
(1466)计算直线的交点数 计算直线的交点数
问题描述: 平面上有n条直线,且无三线共点,问这些直线能 有多少种不同交点数。 输入:n(n<=20) 输出:每个测试实例对应一行输出,从小到大列出所 有相交方案,其中每个数为可能的交点数。 样例输入 4 样例输出 0 3 4 5 6
2011-12-20
5
思考2分钟 如何解决 思考 分钟:如何解决 分钟 如何解决?
2011-12-20
6
分析思路—— 分析思路
首先,容易列举出N=1,2,3的情况: 首先,容易列举出N=1,2,3的情况: N=1,2,3的情况 0 0, 1 0 , 2 ,3 然后,假设<=n- 的情况都已经知道 然后,假设<=n-1的情况都已经知道—— <=n
2011-12-20
7
重点分析——n的情况: 的情况: 重点分析 的情况
先来看个统计的方法: 先来看个统计的方法: 假设一共有n=a+b n=a+b条直线 假设一共有n=a+b条直线 条直线分成2 分别为a条和b (即n条直线分成2组,分别为a条和b条) 则总的交点数= a内的交点数 则总的交点数= a内的交点数 +b内的交点数 +a,b之间的交点数
考虑一下: 考虑一下:
从顶点出发时到底向左走还是向右走应取决于是 从左走能取到最大值还是从右走能取到最大值, 从左走能取到最大值还是从右走能取到最大值,只要 左右两道路径上的最大值求出来了才能作出决策。 左右两道路径上的最大值求出来了才能作出决策。 同样, 同样,下一层的走向又要取决于再下一层上的最 大值是否已经求出才能决策。这样一层一层推下去, 大值是否已经求出才能决策。这样一层一层推下去, 直到倒数第二层时就非常明了。 直到倒数第二层时就非常明了。 如数字2,只要选择它下面较大值的结点19前进 如数字 ,只要选择它下面较大值的结点 前进 就可以了。所以实际求解时,可从底层开始, 就可以了。所以实际求解时,可从底层开始,层层递 最后得到最大值。 进,最后得到最大值。 结论:自顶向下的分析,自底向上的计算。 结论:自顶向下的分析,自底向上的计算。
相关文档
最新文档