动态规划中的最长公共子序列

上传人:hs****ma 文档编号:574588230 上传时间:2024-08-16 格式:PPT 页数:16 大小:166.50KB
返回 下载 相关 举报
动态规划中的最长公共子序列_第1页
第1页 / 共16页
动态规划中的最长公共子序列_第2页
第2页 / 共16页
动态规划中的最长公共子序列_第3页
第3页 / 共16页
动态规划中的最长公共子序列_第4页
第4页 / 共16页
动态规划中的最长公共子序列_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《动态规划中的最长公共子序列》由会员分享,可在线阅读,更多相关《动态规划中的最长公共子序列(16页珍藏版)》请在金锄头文库上搜索。

1、3.3 最长公共子序列最长公共子序列n定义:一个给定序列的定义:一个给定序列的子序列子序列是在该序是在该序列中删去若干元素后得到的序列。列中删去若干元素后得到的序列。找出找出A, B, C, D的所有子序列的所有子序列思考:有思考:有n个元素的序列至多有多少个子序个元素的序列至多有多少个子序列?列?2n(包括空)包括空)说说“至多至多”是因为子序列可能相等(但具是因为子序列可能相等(但具有不同下标序列)有不同下标序列)2021/8/141公共子序列公共子序列n定义:如果序列定义:如果序列Z既是序列既是序列X的子序列又的子序列又是序列是序列Y的子序列,则称的子序列,则称Z是是X和和Y的公共的公共

2、子序列。子序列。n找出找出X = (A, B, C, D, A, B), Y = (B, D, C, A, B, A)的所有公共子序列。的所有公共子序列。2021/8/142最长公共子序列最长公共子序列n找出找出X和和Y的最长公共子序列。的最长公共子序列。n对于任意给定的对于任意给定的X和和Y,它们的最长公共,它们的最长公共子序列唯一吗?举例说明。子序列唯一吗?举例说明。n不一定。如不一定。如A, B与与B, An本节的问题是只找出一个最长公共子序本节的问题是只找出一个最长公共子序列。列。2021/8/143最长公共子序列的结构最长公共子序列的结构设序列设序列X=x1, x2, , xm, Y

3、=y1, y2, , yn, Z=z1, z2, , zk,则则(1) 若若xm = yn, 则则Zk - 1 是是Xm 1和和Yn 1的的最长公共子序列;最长公共子序列;如:如:X = , C, Y = , C, 则则Z = , C2021/8/144最长公共子序列的结构最长公共子序列的结构(续续)(2)若若xm yn, 且且zk xm,则,则Z是是Xm 1和和Y的最长公共子序列;的最长公共子序列;如:如:X = , C, Y = , B, zk C, 则则在计算最长公共子序列时,可不考虑在计算最长公共子序列时,可不考虑X的最后一个元素的最后一个元素C2021/8/145最长公共子序列的结构

4、最长公共子序列的结构(续续)(3)若若xm yn, 且且zk yn,则,则Z是是X和和Yn 1的最长公共子序列的最长公共子序列如:如:X = , C, Y = , B, zk B, 则则在计算最长公共子序列时,可不考在计算最长公共子序列时,可不考虑虑Y的最后一个元素的最后一个元素B2021/8/146最长公共子序列的结构最长公共子序列的结构(续续)n两个序列的最长公共子序列包含了两个序列的最长公共子序列包含了这两个序列的前缀的最长公共子序这两个序列的前缀的最长公共子序列,因此,最长公共子序列问题具列,因此,最长公共子序列问题具有最优子结构性质。有最优子结构性质。2021/8/147讨论讨论可否

5、根据序列的第可否根据序列的第1个元素来重述本问个元素来重述本问题?这样做有什么优缺点?题?这样做有什么优缺点?可以。这样做不利于描述,如前面可以。这样做不利于描述,如前面Xm1可以方便地表示可以方便地表示X前前m 1 个元素,改个元素,改后就比较麻烦。从递归的角度来看,后就比较麻烦。从递归的角度来看,一般也是从后面增减元素。一般也是从后面增减元素。2021/8/148n当当xm = yn时,有一个子问题,即时,有一个子问题,即 :找出:找出Xm 1和和Yn 1的最长公共子序列的最长公共子序列n当当xm yn时,有两个子问题,即时,有两个子问题,即 (1)找出找出Xm 1和和Y的最长公共子序列,

6、的最长公共子序列, (2)找出找出X和和Yn 1的的最长公共子序列。而这两个子问题都包含了最长公共子序列。而这两个子问题都包含了同一个子问题同一个子问题(Xm 1, Yn1) 。 因此,本问题因此,本问题满足子问题重叠性质。满足子问题重叠性质。问题分析问题分析2021/8/149令令cij记录记录Xi和和Yj的最长公共子序列的长度,的最长公共子序列的长度,则有则有 0 i = 0, j = 0cij = ci - 1j - 1 + 1 xi = yj maxcij - 1 , ci - 1j xi yj问题分析问题分析(续续)2021/8/1410n显然不应以递归方式(自顶向下,即先考虑显然不

7、应以递归方式(自顶向下,即先考虑最后一个字符)设计算法,而应设计动态规最后一个字符)设计算法,而应设计动态规划算法,即从第一个字符开始考虑。划算法,即从第一个字符开始考虑。问题分析问题分析(续续)2021/8/1411计算最优值计算最优值程序跟踪程序跟踪X = A C B D Y = A B D A c b00000011110111101222012330000001331022220213302213ijxi=yjci-1j=cij-111Y2N3N4Y21NY2NY2021/8/1412补充习题补充习题n1. X=B, C, A, D Y=C, A, B, D,求X与Y的最长公共子序列,

8、并画出数组c与b. c b00000000110111101222012230000002213013220213302221i:j:2021/8/1413补充习题补充习题(答案答案)n1. X=B, C, A, D Y=C, A, B, D,求X与Y的最长公共子序列,并画出数组c与b. c b00000000110111101222012230000002213013220213302221i: 1 2 3j: 1 2 3 4 1 2 3 4 1 2 3 42021/8/1414讨论讨论结构化与面向对象程序设计的联系与区别?结构化与面向对象程序设计的联系与区别?面向对象的局部来看是结构化的。面向对象的局部来看是结构化的。结构化的基本思想是结构化的基本思想是“自顶向下,逐步求精自顶向下,逐步求精”,面向对象的基本意图是提高软件模块的复面向对象的基本意图是提高软件模块的复用性。用性。纯结构化的程序编译后基本上没有多余的代纯结构化的程序编译后基本上没有多余的代码,而面向对象的程序有许多。码,而面向对象的程序有许多。面向对象以机器的运行复杂度换取编程人员面向对象以机器的运行复杂度换取编程人员的编写复杂度。的编写复杂度。2021/8/1415部分资料从网络收集整理而来,供大家参考,感谢您的关注!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号