第八讲 动态规划与最短路径(1)_901303623

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

事实上不能用动态规划解,是NP完全的。
11
动态规划设计
由一系列的状态来组成,由子问题的最优 解组合出原始问题的最优解(已经减少了 解的空间):
可以从前往后看,或者从后往前看 最终定义为一般形式的递归表达式。
由递归表达式转化成表格(进一步减少因 为重叠子问题引起的重复计算)
具体问题具体分析,动态规划是一种设计 思想。
15.1 装配线调度 -通过工 厂最快路线的结构
动态规划的第一个步骤是描述最优解的结构的 特征。 考虑底盘从起始到装配站S1,j的最快可能路线 如果j=1,则底盘能走的只有一条路线,所以 很容易就可以确定它到装配站S1,j花费了多少 时间。 对于j=2,3,…,n,则有两种选择:
这个底盘可能从装配站S1,j-1直接到装配站S1,j,在 相同的装配线上,从装配站j-1到j的时间是可以忽 略的。 或者,这个底盘可能来自装配站S2,j-1,然后再移 动到装配站S1,j,移动的代价是t2,j-1 。我们将分别 考虑这两种可能性,后面可以看到,他们之间其 实是有很多共性的。
21
15.1 装配线调度 –一个递 归的解
22
15.1装配线调度 -计算最 快时间
此时,写出一个递归算法来计算通过工厂的最 快路线是一件简单的事情。这种递归算法有一 个问题:它的执行时间是关于n的指数形式。令 ri(j)为整个递归算法中引用fi[j]的次数。由公式 f*=min(f1[n]+ x1, f2[n]+ x2) (15.1)有 r1(n)= r2(n)=1 由递归式(15.6)和式(15.7)得到 r1(j)= r2(j)=r1(j+1)+ r2(j+1) 其中j=1,2,…,n-1。这样,单是f1[1]就被引用了 2n-1次,引用所有fi[j]值的总次数为Θ(2n) ----与之前分析的可能序列为2n不同,为什么?
8
最优子结构
无权最短路径问题具有如下的最优子结构: 假设u ≠ v,因此这个问题是非平凡的。这样任 意从u到v的路径p必定包含一个中间顶点,譬如 v 分解 w。(可能是u或v)。于是可以将路径 u w v 。显然,p上边的数目等 为子路径 u 于p1上边的数目加上p2上边的数目。 我们断言,如果p是从u到v的最短路径,那么p1 必定是从u到w的一条最短路径。
第八讲:动态规划与最短路径(1)
《算法与算法复杂性》2011年春季 赵颖
Tentative Schedule
Date 2月23 3月2 3月9 3月16 3月23 3月30 4月6 4月13 4月20 4月27 5月4 5月11 5月18 5月25 6月1 6月8 Content Category HW HW(i)在布置HW(i+1) 课程基本情况+引言 基本设计与分析 算法入门+函数增长 基本设计与分析 HW1 那周交,过期不候; 分治策略 +递归分析 基本设计与分析 HW2 9次作业取成绩最好的6 排序和顺序统计学 基本设计与分析 HW3 次; 图的基本算法 基本设计与分析 HW4 上机题额外加分。 概率分析+随机算法 高级分析技术 HW5 平摊分析+优先队列 高级分析技术 HW6 动态规划 高级设计技术 动态规划 高级设计技术 HW7 bonus(上机题,考前交) 最短路径+贪心算法 高级设计技术 //////////////////////// /////////////// /////////////////// 贪心算法+图上复杂算法 高级设计技术 贪心算法+图上复杂算法 高级设计技术 HW8 NP复杂性问题 专题 近似算法 专题 HW9 review 过期的作业统一保存在FIT 3-126,大家随时可以去取。
5
最优化问题
我们已经见过很多解决最优化问题的策略 :分治、分支定界 有些最优化问题是NP完全的。 动态规划可以解决的最优化问题:
问题的解法可以看成是做出一系列的选择。 例如:最短路径问题,在有向图G上求解从i 到j的最短路径,选择从i出发的第2个点、第3 个点… 如果当前做的最优选择一定包含在最优解里 —贪心
20
Βιβλιοθήκη Baidu
15.1 装配线调度 –一个递归的解
如果j 1 e1 a1,1 f1[ j ] (15.6) min( f1[ j 1] a1, j , f 2 [ j 1] t2, j 1 a1, j ) 如果j 2 如果j 1 e2 a2,1 f2[ j] (15.7) min( f 2 [ j 1] a2, j , f1[ j 1] t1, j 1 a2, j ) 如果j 2
寻找通过任一条装配线上的装配站j的最快路线,转化为 寻找通过任一条装配线上的装配站j-1的最快路线。 所以,对于装配线调度问题,通过建立子问题的最优解, 就可以建立原问题某个实例的一个最优解。
18
15.1 装配线调度 –一个递 归的解
在动态规划方法中,第二个步骤是利用子问题的最优解 来递归定义一个最优解的值。对于装配线的调度问题, 我们选择在两条装配线上通过装配站j的最快路线的问 题来作为子问题,j=1,2,…,n。令fi[j]表示一个底盘 从起点到装配站Si,j的最快可能时间。 我们的最终目标是确定底盘通过工厂的所有路线的最快 时间,记为f*。底盘必须一路经由装配线1或2通过装配 站n,然后到达工厂的出口。由于这些路线的较快者就 是通过整个工厂的最快路线,有: f*=min(f1[n]+ x1, f2[n]+ x2) (15.1) 要对f1[1]和f2[1]进行推理也是很容易的。不管在哪一条 装配线上通过装配站1,底盘都是直接到达该装配站的。 于是f1[1]= e1 + a1,1,f2[1]= e2+ a2,1
如果给定一个序列,在装配线1上使用哪 些站,在装配线2上使用哪些站,则可以 在Θ(n)时间内计算出一个底盘通过工厂装 备线要花的时间。 但是:选择装配站的可能方式有2n种:可 以把装配线1内使用的装配站集合看做 {1,2,…,n},并注意到有2n个这样的子集。 因此,要通过穷举所有可能的方式、然后 计算每种方式花费的时间来确定最快通过 工厂的路线,需要Ω(2n)。
‘ p 1
p2
10
最优子结构
对无权最长简单路径的问题,假设它具有最优 子结构 反例:见下图。考虑路径q→r→t,这是从q到t 的一条最长简单路径。但q→r不是q到r的一条最 长简单路径,因为q→s→t→r是一条更长的路径; 但r→t不是r到t的一条最长简单路径,因为 r→q→s→t是一条更长的路径
7
最优子结构
考虑下面两个问题:已知一个有向图G=(V,E)和 结点u, v∈V
无权最短路径:找出一条从u到v的包含最少边数的 路径。这样的一条路径必须是简单路径,因为从路 径中去掉一个回路后,会产生边数更少的路径。 无权最长简单路径:找出一条从u到v的包含最多边 数的简单路径。我们需要加入简单性的要求。否则, 就可以随意地遍历一个回路任意多次,来得到有任 意多的边数的路径
16
15.1 装配线调度 -通过工 厂最快路线的结构
是否具有最优子结构?
首先,假设通过装配站S1,j的最快路线通过了S1,j-1。 这个底盘必定是利用了最快的路线从开始点到装配 站S1,j-1的(如果存在一条更快的路线通过S1,j-1,我们 就可以采用这条更快的路线,从而得到通过装配站 S1,j的更快的路线)。 类似地,假设通过装配站S1,j的最快路线就是通过装 配站S2,j-1。这个底盘必定是利用了最快的路线从开 始点到装配站S2,j-1的。同理可证。 为什么?(装配站经过了就经过了,无后效性)
更一般地,一个问题的最优解包含了子问题的 一个最优解,我们称这个性质为最优子结构。
17
15.1 装配线调度 -通过工 厂最快路线的结构
可以利用子问题的最优解来构造原问题的一个最优解,
如果不满足最优子结构呢?
观察一条通过装配线S1,j的最快路线,会发现它必定是 经过装配线1或2上的装配站j-1。
通过装配站S1,j的最快路线只能是以下二者之一: 通过装配站S1,j-1的最快路线,然后直接通过装配站S1,j; 通过装配站S2,j-1的最快路线,移动到装配线1,然后通过装 配站S1,j。 利用对称的推理思想,通过装配站S2,j的最快路线也是类似的。
12
15.1 装配线调度
Colonel汽车公司有两条装配线的工厂内 生产汽车,如下图所示。
13
每个装配线有n 个装配站(按顺序编号j=1~n)在 底盘上安装部件 把装配线i上的第j个装配站表示为Sij ,在Sij花的 时间记为aij。两个装配线对应的装配站执行相 同的功能,但所用的时间可能不同。 底盘进入第i条流水线的时间成为ei,离开的时 间记为xi 。从第i条流水线的第j 个装配站移到第 j+1个装配站的时间可以忽略,而移到另外一个 流水线的下一个装配站则需要一定的时间tij。 现在已知装配时间aij 和转移时间tij ,要求输出 装配一辆汽车所需要的最短时间。
p p1 p2
9
最优子结构
论证:如果有另一条路径,例如p'1 ,从u到w有 比p1更少的边,那么就可以剪下然后p1贴上p'1 , w v , 以构造比p有更少边的一条路径 u 而这与p是最优的相矛盾。 对应的, p2必定是从w到v的一条最短路径。所 以,通过考虑所有的中间顶点w,找出从u到w 的一条最短路径和从w到v的一条最短路径,然 后选择一个会产生整体最短路径的中间顶点w, 来找出从u到v的一条最短路径。
fi[j]的值就是子问题最优解的值。为了有助于跟踪最优解 的构造过程,用li[j]记录取了哪条路线,即为装配线的 编号(1或2),其中的装配站j-1被通过装配站Si,j的最快路 线所使用。这里,i=1,2且j=2,3,…,n。此外,还 定义l*记录最后一步的选择,即哪条装配线上的装配站 n被通过整个工厂的最快路线所使用。 li[j]的值可以帮助 找到一个最快的路线。 下图表示了前面例子计算出的fi[j]值
动态规划方法介绍
动态规划(tabular method)的重要特征:
动态规划算法对每个子问题只求解一次,将 其结果保存在一张表中,从而避免每次遇到 各个子问题时重新计算答案。
设计一个动态程序算法的过程为:
刻划最优解的结构(是否可使用?) 递归定义最优解的值(动态规划设计) 按自底向上的方式计算最优解的值(总是这 样吗?) 由计算出的结果构造一个最优解(可省略)
19
15.1 装配线调度 –一个递 归的解
现在来考虑如何计算fi[j],其中j=2,3,…,n(i=1,2)。先来 看f1[n],前面说过,通过装配站S1,j的最快路线或者是通 过装配站S1,j-1,然后直接通过装配站S1,j的最快路线, 或者是通过S2,j-1,从装配线2移动到装配线1,然后通过 装配线S1,j的最快路线。在第一种情况中,f1[j] = f1[j - 1] + a1,j,而在后一种情况中,f1[j] = f2[j - 1] + t2,j-1 + a1,j。 所以 其中j=2,3,…,n。对称地,有: 其中j= 2,3,…,n。合并公式,得
6
最优化问题
动态规划可以解决的最优化问题:
如果当前做的最优选择不一定包含在最优解里,例如 :从i开始选第2个点。 把所有可能的选择序列都尝试一次?例如有n步选择, 每步有d种可能的选择,共dn个序列。 如果满足性质:一次选择之后,剩下的选择必须在子 问题上也是最优解。 贪心是产生一个选择序列;动态规划是产生多条选择 序列,但不会产生含非最优子问题解的序列。 问题的解法可以看成是做出一系列的选择,并且满足 最优子结构。
2
第十五章 动态规划
本章主要内容: 动态规划介绍 装配线调度问题 矩阵链相乘问题 动态规划问题关键特征 背包问题(补充) 最长公共子序列 最优二叉查找树 每对顶点间的最短路径(第25章)
3
动态规划方法介绍
Dynamic Programming
Bellman,“tabular method”
和分治法一样,动态规划是通过组合子问题的 解而解决整个问题的。 但动态规划与分治法有很多的不同:其中一个 鲜明的特点是动态规划求解子问题时,会求解 重叠的子子问题。 动态规划设计主要应用于最优化问题。这类问 题会有很多种可行解,每个解都有一个值,而 我们的希望是找出具有最优(最大或最小)值的解。 我们称这样的解为该问题的一个最优解。
相关文档
最新文档