1、1算法设计与分析第 3章 动态规划(2)2学习要点 理解动态规划算法的概念。 掌握动态规划算法的基本要素( 1)最优子结构性质( 2)重叠子问题性质 掌握设计动态规划算法的步骤。( 1)找出最优解的性质,并刻划其结构特征。( 2)递归地定义最优值。( 3)以自底向上的方式计算出最优值。( 4)根据计算最优值时得到的信息,构造最优解。3学习要点 通过应用范例学习动态规划算法设计策略。( 1)矩阵连乘问题;( 2)最长公共子序列;( 3)凸多边形最优三角剖分;( 4) 0/1背包问题;( 5)最优二叉搜索树。4凸多边形最优三角剖分 应用 Catalan数 多边形三角剖分是数字城市研究许多工作的前提
2、 城市景观三维重建中的三角剖分算法 基于图像特征和三角剖分的水印算法 基于三角剖分的小脑模型在增强学习中的应用 传感网中的动态 Delauanay三角剖分算法 5凸多边形最优三角剖分 多边形的三角剖分是将多边形分割成互不相交的三角形的弦的集合 T。 输入 :给定 凸多边形 P,以及定义在由多边形的边和弦组成的三角形上的权函数 w。 输出 :要求确定该凸多边形的三角剖分,使得即该三角剖分中诸三角形上 权之和为最小。6凸多边形最优三角剖分 用多边形顶点的 逆时针序列 表示凸多边形,即 P=v0,v1,vn-1表示具有 n条边的凸多边形。 若 vi与 vj是多边形上不相邻的 2个顶点,则线段 viv
3、j称为多边形的一条 弦 。 弦将多边形分割成 2个多边形 vi,vi+1,vj和 vj,vj+1,vi。7三角剖分的结构及其相关问题 一个表达式的完全加括号方式相应于一棵 完全二叉树 ,称为表达式的语法树。 叶结点 : 表达式中一个原子 例如,完全加括号的矩阵连乘积(A1(A2A3)(A4(A5A6) 相应的语法树为 叶结点 : 一个矩阵8除v0v6外的各边叶子节点三角剖分的弦内节点边v0v6根节点凸多边形语法树三角剖分的结构及其相关问题 凸多边形 v0,v1,vn-1的三角剖分也可以用语法树表示 ,如图。 一个凸 n多边形的三角剖分对应一棵有 n-1个叶结点的语法树 与矩阵连乘积问题的比较
4、(P59) 每个矩阵 Ai对应于凸 (n+1)边形中的一条边 vi-1vi 矩阵连乘积 Ai+1:j对应于三角剖分中的一条弦vivj, i0, wi0, vi0, 1 in9 输出:(x1, x2, , xn), xi0, 1, 满足 nixi 1,1,00-1背包问题150-1背包问题最优子结构性质 0-1背包问题具有最优子结构性质 设 是所给问题的一个最优解 ,则 是下面相应 子问题 的一个最优解 : 反证法证明),.,( 2,1 nyyy)y,.,y( n2=ni2,1,0xywcxwxvmaxin2i11iin2iii160-1背包问题递归关系 设所给 0-1背包问题的 子问题的最优值
5、为 m(i, j),即 m(i, j)是背包容量为 j,可选择物品为 i, i+1, , n时 0-1背包问题的最优值。 由 0-1背包问题的最优子结构性质,可以建立计算 m(i, j)的递归式如下。=nikkkxvmax=nkixjxwknikkk,1,0iiiiwjwjjimvwjimjimjim2n时,算法需要 (n2n)计算时间。n个物品C最大容量0-1背包问题18 例 n =5, c=10, w=2,2,6,5,4, v=6,3,5,4,6 当 i=5时 当 i=4时 ?40406),5(=jjjm0-1背包问题算法改进19 分析: 由 m(i,j)的递归式容易证明,在一般情况下,对
6、每一个确定的 i(1 i n),函数 m(i,j)是关于变量j的 阶梯状单调不减函数 。跳跃点是这一类函数的描述特征。 表示:跳跃点坐标 (s,t)=(j, m(i,j) 在一般情况下,函数 m(i,j)由其全部跳跃点唯一确定。 j是 连续变量 时,对每一个确定的 i(1 i n),用一个 表 pi存储函数 m(i, j)的全部跳跃点。i: 第i个可选择物品0-1背包问题算法改进200-1背包问题算法改进 跳跃点的递归计算式的推导 初始时 pn+1=(0, 0)。 表 pi可根据计算 m(i, j)的递归式递归地由表 pi+1计算物重为0,价值为021 函数 m(i,j) = MAX( m(i
7、+1,j), m(i+1,j-wi)+vi) 函数 m(i,j)的全部跳跃点 pi = pi+1 qi+1 pi+1是函数 m(i+1, j)的跳跃点集 qi+1是函数 m(i+1, j-wi)+vi的跳跃点集 (s,t)qi+1当且仅当 wisc且 (s-wi,t-vi) pi+1。因此,容易由 pi+1确定跳跃点集 qi+1, qi+1=pi+1(wi,vi)=(j+wi,m(i,j)+vi)|(j,m(i,j)pi+1 控制点 设 (a, b)和 (c, d)是 pi+1qi+1中的 2个跳跃点,则当 ca且 db时, (c, d)受控于 (a, b),从而 (c, d)不是 pi中的跳
8、跃点。意义:装载量多,价值却少,肯定不是最优解0-1背包问题算法改进(容量,最优值)220-1背包问题算法改进 pi= pi+1 qi+1 控制点 在递归地由表 pi+1计算表 pi时 先由 pi+1计算出 qi+1 然后合并表 pi+1和表 qi+1 清除其中的受控跳跃点得到表 pi。 qi+1=pi+1(wi,vi)=(j+wi,m(i,j)+vi)|(j,m(i,j)pi+1 pn+1=(0, 0)。23 n=5, c=10, w=2, 2, 6, 5, 4, v=6, 3, 5, 4, 6。 qi+1=pi+1(wi,vi)=(j+wi,m(i,j)+vi)|(j,m(i,j)pi+1
9、设(a,b)和(c,d)是pi+1qi+1中的2个跳跃点,则当ca且db时,(c,d)受控于(a,b) 初始, p6=(0,0), (w5,v5)=(4,6)。因此, q6=p6(w5,v5)=(4,6)。 p5=(0,0),(4,6), q5=p5(w4,v4)=(5,4),(9,10)p5q5=(0,0),(4,6),(5,4),(9,10)跳跃点 (5,4)受控于跳跃点 (4,6),将受控跳跃点 (5,4)清除 p4=(0,0),(4,6),(9,10)q4=p4(6,5)=(6,5),(10,11)0-1背包问题举例24 n=5, c=10, w=2, 2, 6, 5, 4, v=6,
10、 3, 5, 4, 6。 qi+1=pi+1(wi,vi)=(j+wi,m(i,j)+vi)|(j,m(i,j)pi+1设(a,b)和(c,d)是pi+1qi+1中的2个跳跃点,则当ca且db时,(c,d)受控于(a,b) p3=(0, 0), (4, 6), (9, 10), (10, 11)q3=p3(2, 3)=(2, 3), (6, 9) p2=(0, 0), (2, 3), (4, 6), (6, 9), (9, 10), (10, 11)q2=p2(2, 6)=(2, 6), (4, 9), (6, 12), (8, 15) p1=(0, 0), (2, 6), (4, 9), (
11、6, 12), (8, 15) p1的最后的那个跳跃点 (8,15)给出所求的最优值为m(1,c)=15。0-1背包问题举例25n=3, c=6, w=4, 3, 2, v=5, 2, 1。x(0,0)m(4,x)x(2,1)m(4,x-2)+1x(0,0)(2,1)m(3,x)(3,2)xm(3,x-3)+2(5,3)x(0,0)(2,1)m(2,x)(3,2)(5,3)xm(2,x-4)+5(4,5)(6,6)(7,7)(9,8)x(0, 0)(2, 1)m(1,x)(3,2)(5,3)(4,5)(6,6)(7,7)(9,8)x(0,0)(2,1)m(3,x)x(0,0)(2,1)m(2,
12、x)(3,2)(5,3)26 从跳跃点集 pi的定义可以看出, pi中的跳跃点相应于 xi,xn的 0/1赋值。因此, pi中跳跃点个数不超过 2n-i+1。由此可见,算法计算跳跃点集 pi所花费的计算时间为0-1背包问题算法复杂度分析 计算量在于计算跳跃点集 pi(1 i n) 由于 qi+1=pi+1(wi, vi),故计算 qi+1需要 O(|pi+1|)计算时间。 合并 pi+1和 qi+1并清除受控跳跃点也需要 O(|pi+1|)计算时间。270-1背包问题算法复杂度分析 当所给物品的重量是整数时, (|pi|) c+1, 1 i n) 改进后算法的计算时间复杂性为O(minnc,2
13、n)28krappeear出现didi-1djsearch搜索最优二叉搜索树 设计程序将英文文档翻译成中文 例如自动翻译机29生词表字段 1 字段 2aggregate analysis综合分析 ;总体分析amortized 分期 ,分摊arbitrary 任意的 , 武断的 , 独裁的 , 专断的auxiliary 辅助的 , 补助的binomial 二项的 , 二项式的bog 沼泽 , 陷于泥沼contemporary 当代的 , 同时代的convention 归约 , 常规crucial 至关紧要的disjoint 不相交的 ,不相接的 ,分离的distinct 清楚的 , 明显的 ,
14、截然不同的 , 独特的最优二叉搜索树 自动翻译机 使用线性表操作每次运行需要 O(n)搜索时间30krappeear出现didi-1djsearch搜索生词表字段 1 字段 2aggregate analysis 综合分析 ;总体分析amortized 分期 ,分摊arbitrary 任意的 , 武断的 , 独裁的 , 专断的auxiliary 辅助的 , 补助的binomial 二项的 , 二项式的 最优二叉搜索树 查找操作 : build a BST with n English words as keys Chineses equivalents as satellite data (从属数据) 对于课文中出现的每个单词,都需要搜索该二叉树,如何使得总的搜索次数最少? 对于任何一个单词的搜索,使用二分搜索法的时间为O(lg n) However, Words appear with different frequencies?