动态规划的优化讲义
动态规划问题的基本要素和最优化原理ppt课件

k
k
k,n
u u , ,
k
n
k
k
n1
精品课程《运筹学》
§2.2 动态规划的基本思想
1、动态规划方法的关键在于正确地写出基本 的递推关系式和恰当的边界条件(简称基本方 程)。要做到这一点,就必须将问题的过程分 成几个相互联系的阶段,恰当的选取状态变量 和决策变量及定义最优值函数,从而把一个大 问题转化成一组同类型的子问题,然后逐个求 解。即从边界条件开始,逐段递推寻优,在每 一个子问题的求解中,均利用了它前面的子问 题的最优化结果,依次进行,最后一个子问题 所得的最优解,就是整个问题的最优解。
动态规划模型的指标函数,应具有可分离性,并满 精足品课递程推《关运筹系学。》
小结:
无后效性
动态规划本质上是多阶段决策过程;
概念 : 阶段变量k﹑状态变量sk﹑决策变量uk;
方程 :状态转移方程 sk1 Tk (sk , uk )
指标: Vk,n Vk,n (sk , uk , sk1, uk1, ,(sk)
opt V
uk, ,un
s k,n ( k
,uk ,
s, n1)
Vk,n (sk , uk , sk1, uk1, , sn1)
可递推
k [sk , uk ,Vk 1,n (sk 1, uk 1, , sn1 )]
指标函数形式: 和、 积
精品课程《运筹学》
解多阶段决策过程问题,求出 最优策略,即最优决策序列
状态变量的取值有一定的允许集合或范围,此 集合称为状态允许集合。
精品课程《运筹学》
3、决策:表示当过程处于某一阶段的某个状态时, 可以作出不同的决定,从而确定下一阶段的状态,这 种决定称为决策。
动态规划超级详细的讲义

动态规划入门1(2008-09-20 21:40:51)第一节动态规划基本概念一,动态规划三要素:阶段,状态,决策。
他们的概念到处都是,我就不多说了,我只说说我对他们的理解:如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。
显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。
每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。
下面举个例子:要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……,这样没个环节就可以看做是一个阶段;产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态变成固态=_=||)。
每个形态就是一个状态,那从液态变成固态经过了冰冻这一操作,这个操作就是一个决策。
一个状态经过一个决策变成了另外一个状态,这个过程就是状态转移,用来描述状态转移的方程就是状态转移方程。
经过这个例子相信大家对动态规划有所了解了吧。
下面在说说我对动态规划的另外一个理解:用图论知识理解动态规划:把动态规划中的状态抽象成一个点,在有直接关联的状态间连一条有向边,状态转移的代价就是边上的权。
这样就形成了一个有向无环图AOE网(为什么无环呢?往下看)。
对这个图进行拓扑排序,删除一个边后同时出现入度为0的状态在同一阶段。
这样对图求最优路径就是动态规划问题的求解。
二,动态规划的适用范围动态规划用于解决多阶段决策最优化问题,但是不是所有的最优化问题都可以用动态规划解答呢?一般在题目中出现求最优解的问题就要考虑动态规划了,但是否可以用还要满足两个条件:最优子结构(最优化原理)无后效性最优化原理在下面的最短路径问题中有详细的解答;什么是无后效性呢?就是说在状态i求解时用到状态j而状态j就解有用到状态k…..状态N。
动态规划专题讲义

拦截导弹
问题描述: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹 拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每 一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,由于 该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹的枚数和导弹依次飞来的高度(雷达给出的高度数据是不大于 30000的正整数,每个数据之间有一个空格),计算这套系统最多能拦截多少 导弹?如果要拦截所有导弹最少要配备多少套这种导弹拦截系统? 样例输入: 8 389 207 155 300 299 170 158 65 样例输出: 6(最多能拦截的导弹数) 2(要拦截所有导弹最少要配备的系统数)
“拦截导弹”问题分析 先讨论第一问:假设a[i]表示拦截的最后一枚导弹是第i枚时, 系统能拦得的最大导弹数。例如,样例中的a[5]=3,表示:如果 系统拦截的最后一枚导弹是高度为299的话,最多可以拦截第1枚 (389)、第4枚(300)、第5枚(299)三枚导弹。 显然,a[1]~a[8]中的最大值就是第一问的答案。关键是怎样 求得a[1]~a[8]? 我们换一个角度,假设现在已经求得a[1]~a[7](注:在动 态规划中,这样的假设往往是很必要的),那么怎样求a[8]呢?
根据上述递归式已经可以递归地求出最优解了。 用递归来完成搜索,算法设计如下: function make( i {处理到第i件物品} , j{剩余的空间为 j}:integer) :integer; {初始时i=m , j=背包总容量 } begin if (i=0)or(j=0) then begin make:=0;exit;end; if j>=wi then (背包剩余空间可以放下物品 i ) r1:=make(i-1,j-wi)+v[i]; (第i件物品放入所能得到的价值 ) r2:=make(i-1,j) (第i件物品不放所能得到的价值 ) make:=max{r1,r2} end;
第二节最讲义优化原理与动态规划

3 B3 3
C1 3 T
4 C2
2.状态(state)、状态变量和可能状态集 (1)状态与状态变量。表示每个阶段开始所 处的自然状况或客观条件。
2 Q4
3
A1 7 4
6 4 A2 2 4
4 2
A3 5
B1 1 4
6 B2
3
3 B3 3
C1 3 T
4 C2
(2)动态规划维数。 (3)可能状态集:用S(sk)表示。
所取决策必是Q→ A1→ B2→ C2→T,全程长度
是13。
A1 7
B1 1
2
4 6
4
C1 3
Q4 3
4 A2 2
4
4 2
6 B2
3 3
T 4 C2
A3 5
B3 3
◆全枚举法计算工作量将会十分庞大。 ◆局部最优求出的解不一定是最优解。
3.动态规划方法就是从终点逐段向始点方向寻 找最短路线的方法。解题步骤如下: ●把问题划分为几个阶段。 ●按阶段顺序首先考虑最后阶段如第四阶段 的最优决策,也就是走哪条路线最短。 ●按阶段顺序依次考虑第三、第二,第一阶 段的最优决策,为此只需确定每一阶段上 各初始点的最优决策即可。
表示某种运算,可为加、减、乘、除、开方等。
◆常见有:
n
Vk,n vi (si , xi ) ik
和
n
Vk,n vi (si, xi ) ik
7.最优指标函数:fk(sk)
fk(sk)op V k,nt,k1 ,2,,n
相应的子策略称为sk状态下的最优子策略, 记为pk*(sk) ;而构成该子策略的各段决策称 为该过程上的最优决策,记为
从上阶段的某一状态值到下阶段某一状态值 的转移规律成为状态转移律
动态规划讲义

第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)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。
动态规划的优化

火 车 票
由于n最大可以为 由于 最大可以为10000,如果要在规定时间内出解,算法的时 最大可以为 ,如果要在规定时间内出解, 间复杂度必须严格控制在n^2以内,这就使我们想到了动态规划. 以内, 间复杂度必须严格控制在 以内 这就使我们想到了动态规划. 表示从起点站( 的最少费用. 表示某一站 表示某一站J与 设f[I]表示从起点站(站A)到站 的最少费用.X表示某一站 与 表示从起点站 )到站I的最少费用 的间距离. 站I的间距离. 的间距离 F[I] = min{f[j] + cost(I,j)} (a <= j < I) c1 (0<X<=L1) Cost(I, j) = c2 (L1<X<=L2) c3 (L2<X<=L3) ∞ (L3<X) 边界: 边界:f[a] = 0 该算法的空间复杂度为O(n),时间复杂度为 该算法的空间复杂度为 ,时间复杂度为O(n^2).当 . n=10000时,程序的运行速度就很慢了,很难在规定时间内出 时 程序的运行速度就很慢了, 看来优化算法是必要的. 解,看来优化算法是必要的.
状态表示为: m[i,j],1≤i≤j≤n,表示合并d[i..j]所得到 的最小得分,则状态转移方程和边界条 件为: m[i,j]=0 i=j j m[i, j ] = min{m[i, k 1] + m[k , j ] + ∑ d [l ]} i<j i<,j]=∑ d [l ] l =i '] 当函数w[i,j]满足w[i, j ] + w[i' , j ' ] ≤ w[i ' , j ] + w[i, j时, 称w满足四边形不等式. 当函数w[i,j]满足w[i',j]≤w[i,j'] , i ≤ i' ≤ j ≤ j ' 时称w关于区间包含关系单调
动态规划专题讲义解读课件

02
动态规划基本问题
最短路径问题
总结词
最短路径问题是动态规划中常见的问题类型,主要解决在给定图 中从起点到终点的最短路径问题。
详细描述
最短路径问题可以分为单源最短路径问题和多源最短路径问题。 单源最短路径问题是指给定一个起点和一组终点,求起点到每个 终点的最短路径。多源最短路径问题则是给定一组起点和终点, 求每对起点和终点之间的最短路径。
问题规模限制
对于大规模问题,动态规划算法可能 会面临性能瓶颈,因为其时间复杂度 是指数级的。
适用性问题
并非所有问题都适合使用动态规划算 法,对于一些问题,其他算法可能更 有效。
06
动态规划的未来发展展望
动态规划与其他算法的结合使用
动态规划与机器学习算法 结合
利用动态规划优化机器学习模型的训练过程 ,提高模型的预测精度和泛化能力。
动态规划理论研究的深入和创新
深入研究动态规划算法的数学基础和 理论基础,探索其更广泛的应用领域 。
创新动态规划算法的设计和应用,解 决现实生活中的复杂问题,推动科学 技术的发展。
THANK YOU
感谢聆听
动态规划与人工智能算法 结合
将动态规划应用于人工智能领域,如强化学 习、自然语言处理等,以解决更复杂的问题
。
动态规划在大数据和云计算领域的应用前景
大数据处理
利用动态规划处理大规模数据集,提 高数据处理效率,降低计算成本。
云计算优化
通过动态规划算法优化云计算资源的 分配和管理,提高资源利用率和系统 性能。
动态规划专题讲义解读课件
目
CONTENCT
录
• 动态规划概述 • 动态规划的基本问题 • 动态规划的算法实现 • 动态规划的应用场景 • 动态规划的优缺点分析 • 动态规划的未来发展展望
动态规划及其优化

(6).最长递增子序列(LIS)
G[i]记录长度为i的递增子序列的最后一个 考虑:A[i] >= A[j] 且 F[j] >= F[i] 元素, i不会比j更优,决策i是可以被舍弃的。 通过二分查找可以在O(logN)内维护F、G。 对于:F[i1] < F[i2] < ... < F[ik] 必有:A[i1] < A[i2] < ... < A[ik] 总复杂度为O(NlogN)。 因此保证A[j] < A[i],在满足上述条件下A[j] 尽量大,则j必定是i的最优决策。
动态规划在空间上的优化
当然,滚动数组还可以用位运算的 and来实现。这里不再赘述。 另外,大部分的时间上的优化就会伴 随着空间的优化,而单纯在空间复杂度 优化的方式除了滚动数组来说是比较少 见的。
动态规划在时间效率上的优化
时间复杂度= 状态总数* 每个状态转移的状态数* 每次状态转移的时间
for k=2.. n*2 for r1=1..n for r2=1..n for r3=1..n c1=k-r1; c2=k-r2; c3=k-r3; ... ... end
(4)过河 (noip2005)
题目大意:一个坐标轴有C个点被标记,给定 一只青蛙的跳跃区间,问从0跳到L最少踩到 几个标记的点。 (1<=L<=10^9) (1<=M<=100)
(6).最长递增子序列(LIS)
Ans=0 for i=1..n read(x); l=1; r=ans; while l<=r do mid=(l+r)/2; if a>G[mid] then mid:=l+1 else r=r-1; G[l]=a; if l>ans then ans:=l;
动态规划的优化

动态规划的优化本⽂讲解⼏种动态规划的优化⽅式。
滚动数组⼀类显然的恒等变形优化就咕了)逃导论DP 有两个重要的概念:状态与状态转移。
⽽ DP 过程的时间复杂度也可以由 O(DP)= 涉及到的状态总数 × 转移决策数量 × 处理状态转移的时间。
所以我们就有三个⼤⽅向:减少涉及的状态总数我们可以试图减少涉及到的状态的总数。
可以试图改变状态定义粗暴地达到这⼀点。
减少寻找决策的时间我们可以优化寻找最优状决策点的时间,撒⼤⽹会浪费很多时间。
类似单调队列优化的算法就是让寻找最优决策点的时间⼤⼤减少的算法。
当然这个东西有时候与状态本⾝的定义与组织⽅式也有关系。
减少计算状态转移的时间通常来讲,我们的状态转移⽅程是⼀个递推式,复杂度很低。
但有时候某些状态转移不能 O(1) 计算,我们可以在状态计算⽅⾯下点⽂章。
矩阵优化这本质上是⼀种优化状态转移计算时间的⽅法。
⾸先要了解⼀点矩阵的基础知识矩阵在数学中,矩阵(Matrix)是⼀个按照长⽅阵列排列的复数或实数集合 ,最早来⾃于⽅程组的系数及常数所构成的⽅阵。
这⼀概念由19世纪英国数学家凯利⾸先提出。
—来⾃度娘。
举个例⼦:1001这就是⼀个矩阵。
矩阵的运算矩阵的加法令 A i,j 表⽰矩阵 A 的第 i ⾏第 j 列。
那么矩阵加法是:对于两个 N×N 的矩阵 A,B,若 C=A+B 则C i,j=A i,j+B i,j。
C 也是⼀个 N×N 的矩阵加法满⾜交换律和结合律。
矩阵的乘法两个矩阵 A,B 之间的乘法当且仅当 A 的⾏数与 B 的列数相等的时候才有定义。
若 A 是⼀个 N×K 的矩阵 ,B 是⼀个 K×M 的矩阵,令矩阵 C=A×B ,则 C 是⼀个 N×M 的矩阵。
并且:C i,j=N∑x=1A i,k B k,j矩阵乘法满⾜结合律与分配律不满⾜交换律 特殊情况不作考虑。
矩阵优化讲了这么多,这玩意能⼲啥?我们从最简单的例题看起:已知:a i=p⋅a i−1+q⋅a i−2 (i>2)给定 p,q,a1,a2,n,m,求 a n mod m。
动态规划与优化问题

1.动态规划的优点在于可以将复杂问题分解为简单的子问题,避免重复计算,提高 计算效率。 2.动态规划可以求得全局最优解,而非局部最优解。 3.动态规划的缺点在于需要大量的内存空间来存储子问题的解,因此对于大规模问 题可能会受到限制。
动态规划基本概念
▪ 动态规划与分治法的区别
1.分治法将问题分解为独立的子问题,而动态规划将问题分解 为重叠的子问题。 2.分治法的子问题之间没有联系,而动态规划的子问题之间通 过状态转移方程联系起来。 3.分治法的时间复杂度通常高于动态规划。
1.递推关系描述了问题各阶段状态之间的关系,是动态规划数 学模型的核心。 2.通过递推关系,可以将一个复杂的问题转化为一系列简单的 子问题进行求解。 3.建立递推关系需要明确问题的状态和决策,以及它们之间的 转移关系和代价。
▪ 动态规划的边界条件和初始条件
1.边界条件和初始条件是动态规划数学模型中的重要组成部分 ,它们定义了问题的起始状态和结束状态。 2.确定边界条件和初始条件需要考虑问题的实际情况和目标要 求。 3.合适的边界条件和初始条件可以简化计算过程,提高求解效 率。
动态规划与优化问题
目录页
Contents Page
1. 动态规划基本概念 2. 动态规划原理与步骤 3. 优化问题与动态规划 4. 常见优化问题实例 5. 动态规划数学模型 6. 动态规划算法实现 7. 动态规划应用领域 8. 总结与未来研究方向
动态规划与优化问题
动态规划基本概念
动态规划基本概念
常见优化问题实例
▪ 最短路径问题
1.最短路径问题是指在图中寻找从起点到终点的最短路径的问 题。 2.该问题可以采用动态规划的方法求解,通过逐步更新起点到 各个节点的最短路径来求解最优解。 3.最短路径问题在交通规划、网络优化等领域有着广泛的应用 。
动态规划的优化及应用

动态规划的优化及应用广东北江中学卢彦丞关键词:动态规划优化应用目录序 (2)[一]动态规划的优化和特殊技巧 (3)1.改变状态表示 (3)2.预处理,必要时进行两次动态规划 (7)3.针对“双向问题”的优化 (8)4.其他优化 (12)5.按特殊顺序进行动态规划 (15)6.把最优值问题转化为判定问题 (16)[二]动态规划的应用 (18)1.计数 (18)2.一些图论问题 (21)3.求第K优解 (21)[三]后记 (24)序:说起动态规划,大家一定不会陌生。
这是因为自从21世纪伊始,各类信息学竞赛中的动态规划逐渐成为了主要题型之一。
但是,越来越多的证据表明,动态规划并不是一件容易的事。
而本文主要论的就是动态规划如何优化,以及它在一些什么地方有用武之地。
也就是说,这篇论文讲的是关于“动态规划进阶”的。
至于动态规划的基础知识,可以查阅有关资料,这里不再赘述。
注:在本文,例题列出状态转移方程后不再附标程,因为对于动态规划题来说,知道了状态转移方程后就可以自己写出程序了。
[一]动态规划的优化和特殊技巧也许大家会问,“动态规划算法是一种非常优的多项式时间算法,用得着优化吗?”“搜索需要优化,动态规划也需要吗?”差矣。
虽然动态规划是一种多项式时间、多项式空间的算法,但是弄不好也会超时、爆空间。
如,一道动态规划题,规模是1<=n<=1000,如果你写出个O(n3)的状态转移方程,不超时才怪呢!而如果把它优化成O(n2)的话,就基本上不会超时了。
如果方程正确的话,你就能通过这道题了!1.改变状态表示众所周知,动态规划的核心是状态转移方程,而状态转移方程的关键是阶段的划分和状态的表示。
所以说,状态表示得好不好,会决定着动态规划的其他一切因素,正可谓“牵一发,动全身”。
有时候,改变一下状态表示,就可以在状态转移时,只让O(1)个状态转移到该状态,从而使时、空复杂度都减少一维。
下面举几个例子:[例1]花店橱窗布置(IOI99)题目简述:有V个花瓶按顺序排成一行,最左边是1号,最右是V号。
最优化理论_动态规划讲解

§1 动态规划问题实例
例1 给定一个线路网络, 要从A向F铺设一条输油管道, 各点间连线上的数字表示距离,问应选择什么路线,可使总 距离最短?
2
C1
5
8
B1 3
4
D1
3
4
6
C2 5
5E14来自6A5
8 7
3
C3 4
B2
7
8
C4 4
D2 2
1
D3
3
3
E2
F
动态规划是解决多阶段决策问题的一种方法。所谓多阶段 决策问题是指这样的决策问题:其过程可分为若干个相互联 系的阶段,每一阶段都对应着一组可供选择的决策,每一决
(
sk
,
uk
)
f k 1 ( sk 1 )}
k 5,4,3,2,1
f6 (s6 ) 0
动态规划最优化原理:
不管该最优策略上某状态以前的状态和决策如何,对
最
该状态而言,余下的诸决策必定构成最优子策略。即
优
最优策略的任意后部子策略也是最优的。
性
原
C
理
B
fk (sk ) opt Fkn (sk , xk , sk1, xk1, , sn , xn )
最优指标函数:表示从第k阶段状态为 sk 时采用最佳策略 pk*n 到过程终止时的最佳效益。记为
fk (sk ) Vkn (sk , pk*n ) opt Vkn (sk , pkn )
pknDkn ( sk )
其中 opt 可根据具体情况取max 或min。
基本方程:此为逐段递推求和的依据,一般为:
4
A
5
2
B1 3
动态规划讲义

动态规划(一)动态规划的基本思想一、动态规划含义:在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都要做出决策,从而使整个过程达到最好的活动效果。
因此,各个阶段决策确定后,组成一个决策序列,因而也就确定了整个过程的一条活动路线。
这种把一个问题看作是一个前后关联具有链状结构的多阶段过程,就称为多阶段决策过程,这种问题称为多阶段决策问题。
在多阶段决策问题中,各个阶段采取的决策,一般来说是和时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,我们称这种解决多阶段决策最优化的过程为动态规划。
动态规划算法通常用于求解具有某种最优性质的问题。
在这类问题中,可能会有许多可行解。
每一个解都对应于一个值,我们希望找到具有最优值的解。
动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。
若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。
如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。
我们可以用一个表来记录所有已解的子问题的答案。
不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。
这就是动态规划法的基本思路。
具体的动态规划算法多种多样,但它们具有相同的填表格式。
二、设计动态规划法的步骤:1、找出最优解的性质,并刻画其结构特征;2、递归地定义最优值(写出动态规划方程);3、以自底向上的方式计算出最优值;4、根据计算最优值时得到的信息,构造一个最优解。
步骤1-3是动态规划算法的基本步骤。
在只需要求出最优值的情形,步骤4可以省略,步骤3中记录的信息也较少;若需要求出问题的一个最优解,则必须执行步骤4,步骤3中记录的信息必须足够多以便构造最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态规划的优化一、时间上的优化花店橱窗布置问题(IOI99试题)。
假设想以最美观的方式布置花店的橱窗,有F束花,每束花的品种都不一样,同时,至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,并从左到右,从1到V顺序编号,V是花瓶的数目,编号为1的花瓶在最左边,编号为V的花瓶在最右边,花束可以移动,并且每束花用1到F的整数唯一标识,标识花束的整数决定了花束在花瓶中列的顺序,即如果I<J,则花束I必须放在花束J左边的花瓶中。
例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有的花束在放入花瓶时必须保持其标识数的顺序,即:杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中。
如果花瓶的数目大于花束的数目,则多余的花瓶必须空,即每个花瓶中只能放一束花。
每一个花瓶的形状和颜色也不相同,因此,当各个花瓶中放入不同的花束时,会产生不同的美学效果,并以美学值(一个整数)来表示,空置花瓶的美学值为0。
在上述例子中,花瓶与花束的不同搭配所具有的美学值,可以用如下表格表示:根据表格,杜鹃花放在花瓶2中,会显得非常好看,但若放在花瓶4中则显得很难看。
为取得最佳美学效果,必须在保持花束顺序的前提下,使花的摆放取得最大的美学值,如果具有最大美学值的摆放方式不止一种,则输出任何一种方案即可。
题中数据满足下面条件:1≤F≤100,F≤V ≤100,-50≤A IJ≤50,其中A IJ是花束I摆放在花瓶J中的美学值。
输入整数F,V和矩阵(A IJ),输出最大美学值和每束花摆放在各个花瓶中的花瓶编号。
【分析】问题实际就是给定F束花和V个花瓶,以及各束花放到不同花瓶中的美学值,需要你找出一种摆放的方案,使得在满足编号小的花放进编号小的花瓶中的条件下,美学值达到最大。
(1)将问题进行转化,找出问题的原型。
首先,看一下上述题目的样例数据表格。
将摆放方案的要求用表格表现出来,则摆放方案需要满足:每行选且只选一个数(花瓶);摆放方案的相邻两行中,下面一行的花瓶编号要大于上面一行的花瓶编号两个条件。
这时可将问题转化为:给定一个数字表格,要求编程计算从顶行至底行的一条路径,使得这条路径所经过的数字总和最大(要求每行选且仅选一个数字)。
同时,路径中相邻两行的数字,必须保证下一行数字的列数大于上一行数字的列数。
看到经过转化后的问题,发现问题与例题4-5的数字三角形问题十分相似,数字三角形问题的题意是:给定一个数字三角形,要求编程计算从顶至底的一条路径,使得路径所经过的数字总和最大(要求每行选且仅选一个数字)。
同时,路径中相邻两行的数字,必须保证下一行数字的列数,与上一行数字的列数相等或者等于上一行数字的列数加1。
上例中已经知道:数字三角形中的经过数字之和最大的最佳路径,路径的每个中间点到最底层的路径必然也是最优的,可以用动态规划方法求解,对于“花店橱窗布置”问题经过转化后,也可采取同样的方法得出本题同样符合最优性原理。
因此,可以对此题采用动态规划的方法。
(2)对问题原型动态规划方法的修改。
“数字三角形”问题的动态规划方法为:已知它是用行数来划分阶段。
假设用a[i,j]表示三角形第i行的第j个数字,用p[i,j]表示从最底层到a[i,j]这个数字的最佳路径(路径经过的数字总和最大)的数字和,易得问题的动态转移方程为:p[n+1,j]=0 (1≤j≤n+1) p[i,j]=max{p[i+1,j],p[i+1,j+1]}+a[i,j] (1≤j≤i≤n,其中n为总行数)分析两题的不同之处,就在于对路径的要求上。
如果用path[i]表示路径中第i行的数字编号,那么两题对路径的要求就是:“数字三角形”要求path[i]≤path[i+1]≤path[i]+1,而本题则要求path[i+1]>path[i]。
在明确两题的不同之后,就可以对动态规划方程进行修改了。
假设用b[i,j]表示美学值表格中第i行的第j个数字,用q[i,j]表示从表格最底层到b[i,j]这个数字的最佳路径(路径经过的数字总和最大)的数字和,修改后的动态规划转移方程为:q[i,V+1]= -∞(1≤i≤F+1)q[F,j]=b[F,j] (1≤j≤V)q[i,j]=max{q[i+1,k] (j<k≤V+1)}+b[i,j] (1≤i≤F,1≤j≤V)这样,得出的max{q[1,j]}(1≤j≤V)就是最大的美学值,算法的时间复杂度为O(FV2)。
(3)对算法时间效率的改进。
先来看一下这样两个状态的求解方法:q[i,j]=max{q[i+1,k](j<k≤V+1)}+b[i,j] (1≤i≤F,1≤j≤V) q[i,j+1]=max{q[i+1,k] (j+1<k≤V+1)}+b[i,j+1] (1≤i≤F,1≤j+1≤V)上面两状态中求max{q[i+1,k]}的过程进行了大量重复的比较。
此时对状态的表示稍作修改,用数组t[i,j]=max{q[i,k](j≤k≤V+1)} (1≤i ≤F,1≤j≤V)表示新的状态。
经过修改后,因为q[i,j]=t[i+1,j+1]+a[i,j],而t[i,j]=max{t[i,j+1],q[i,j]} (1≤i≤F,1≤j≤V),所以得出新的状态转移方程:t[i,V+1]=-∞(1≤i≤F+1)t[F,j]=max{t[F,j+1],b[F,j]} (1≤j≤V)t[i,j]=max{t[i,j+1],t[i+1,j+1]+a[i,j]} (1≤i≤F,1≤j≤V)这样,得出的最大美学值为t[1,1],新算法的时间复杂度为O(F×V),而空间复杂度也为O(F×V),完全可以满足1≤F≤V≤100的要求.分析二:,我们不妨设F[I,J]表示在前J个花瓶中插前I朵花的最高美学值,那么我们的方程可以变为:F[I,j]=max{f[I-1,j-1]+f[I,j], {第I朵花插在第j花瓶里}F[I,j-1]} {第I朵花插在前j花瓶里} 这么以来,时间复杂度就降为了O(N*N),这么一来,对于所有数据都可以在瞬间出解了。
股票问题。
假设你有非凡的能力,能预测出今后D天中每天的股价(设每天股价不变,第i天的为vi)。
第一天前,你有1元。
以后每一天你可以用现有的资金购买股票,或将现有的股票抛出换资金,当然也可什么都不干。
求D天后你能获得的最大收入。
输入文件的第一行为D(1<=D<=100000)。
下面有D个实数,依次为今后D天的股票价格。
输出仅为一个精确到0.0001的实数,即D天后的理想收入。
输入与输出样例:【分析】动态规划算法的核心就是它的状态转移方程。
一个好的方程,可以尽量避免冗余的产生,同时因为状态转移方程也会牵涉到保存决策的状态数组,所以一些时候它同样可以节省空间。
设f(i)为第I天收盘时能达到的最高收入,则有状态转移方程一:f(i)=max{f(j)*vt/vk} (0<=j<k<t<=i)f(0)=1其含义为:第I天收盘时能达到的最高收入来源于第j天收盘后的收入,全部用于购入第k天的股票,再在第t天将所得的股票全部抛出后所得的收入。
这样,F(D)就是问题的答案。
按照这一状态方程,我们可以得到以下的算法描述:Proc s1(D,v[1..D]);F[0]:=1;For I=1 to D[f[I]:=0for j=0 to Ifor k=j+1 to Ifor t:=k+1 to Iif f[j]*v[t]/v[k]>f[I] then f[I]=f[j]*v[t]/v[k]]显然,本算法的时间复杂度为O(D4),空间复杂度为O(D),时间效率十分低下。
如果仔细分析,我们会发现,如果第I天的收入是由第t天的抛出所得的,这就意味着从第t天后直到第I天一直在休息,即f(I)=f(t)成立。
如果我们让f(I-1)的值能传给f(i),那么f(t)的值就能传给f(i)。
于是可以得到下面的状态转移方程二:f(i)=max{f(I-1),f(j)*vi/vk} (0<=j<k<=I )f(0)=1这一状态转移方程的含义为:如果第I天休息,则前I天所能获得的最大收入f(i)就是前I-1天所能获得的最大收入f(I-1),否则第I 天不休息,那么为了尽量增加收入,必然将股票全部抛出,就是将前j天所得的收入在第k天全部用来购入,再在第I天抛出。
对应的算法描述如下:Proc s2(D,v[1..D]);F[0]:=1For I=1 to D[f[I]:=f[I-1]for j=0 to I-1for k=j+1 to Iif f[j]*v[i]/v[k]>f[I] then f[I]=f[j]*v[i]/v[k]]通过进一步分析,我们可以发现,如果将前j天所得的收入在第k天全部用来购入,这就意味着从前第j天后直到第k天前一直在休息,f(j)=f(k-1)成立。
于是状态转移方程改写成如下形式的状态方程三:f(i)=max{f(I-1),f(j)*vi/v(j+1)} (0<=j<I)f(0)=1其对应的算法描述变为:Proc s3(D,v[1..D]);F[0]:=1For I=1 to D[f[I]:=f[I-1]for j=0 to I-1if f[j]*v[i]/v[j+1]>f[I] then f[I]=f[j]*v[i]/v[j+1]]endp上述算法的时间复杂度已降为O(D2),空间复杂度为O(D)。
算法效率已明显得到了提高了。
再进一步观察状态方程三,由于f(i)来源于f(I-1)和f(j)*vi/v(j+1),后者可写成vi*f(j)/v(j+1),其中vi是固定的,f(j)/v(j+1)是待寻找的,而算法s3的最后一个循环实际上是在找最大的f(j)/v(j+1),于是,方程三可化为:f(I)=max{f(i-1),vi*max{f(j)/v(j+1)}}(0<=j<I)=max{f(I-1),vi*g(i)}其中g(i)=max{f(j-1)/vj}(0<j<=I)于是,状态转移方程变成了两个函数f、g的相互赋值。
要进一步优化方程,必须从优化g(i)入手。
让g(I-1)的值传给g(i),我们有:g(i)=max{g(I-1),f(I-1)/vi}状态转移方程写成了以下的第四种形式:f(i)=max{f(I-1),vi*g(i)}g(i)=max{g(I-1),f(I-1)/vi}现在,f(i)与g(i)都成为了只和f(I-1)与g(I-1)有关的递推函数,实现算法时,f(I-2),f(I-3),……,f(0)与g(I-2),g(I-3),……,g(0)不必保留。