2022年最长公共子序列问题.pdf
《2022年最长公共子序列问题.pdf》由会员分享,可在线阅读,更多相关《2022年最长公共子序列问题.pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验三最长公共子序列问题1. 实验环境本实验采用 java 语言编写实现,环境:,编译器: eclipse2. 实验目的通过最长公共子序列问题,巩固并详细分析动态规划思想和解题步骤。3. 设计思路最长公共子序列的定义为: 设有两个序列 S11.m和 S21.n,需要寻找它们之间的一个最长公共子序列。例如,假定有两个序列:S1:I N T H E B E G I N N I N GS2:A L L T H I N G S A R E L O S T则 S1和 S2的一个最长公共子序列为THING 。又比如:S1:A B C B D A BS2:B D C A B A则它们的一个最长公共子序列为B
2、CBA 。这里需要注意的是,一个子序列不一定必须是连续的,即中间可被其他字符分开,单它们的顺序必须是正确的。另外,最长公共子序列不一定只有一个,而我们需要寻找的是其中一个。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 9 页 - - - - - - - - - - 当然,如果要求子序列里面的元素必须连成一片也是可以的。实际上,连成一片的版本比这里实现的更容易。4. 过程我们可以通过蛮力策略解决这个问题,步骤如下:1. 检查 S11.m里面每一个子序列。2. 看看其是否也是S21.n里的子序列
3、。3. 在每一步记录当前找到的子序列里面最长的子序列。这种方法的效率十分低下。因此本实验采用动态规划的方法实现该算法。利用动态规划寻找最长公共子序列步骤如下:1. 寻找最长公共子序列的长度。2. 扩展寻找长度的算法来获取最长公共子序列。策略:考虑序列S1和 S2的前缀序列。设 ci,j = |LCS (S11.i,S21.j)| ,则有 cm,n = |LCS(S1 ,S2)|所以有c i 1 , j 1 + 1,如要 S1i = S2jci,j = max c i - 1 ,j ,c i ,j -1 ,如果 S1iS2j然后回溯输出最长公共子序列过程:精品资料 - - - 欢迎下载 - -
4、- - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 9 页 - - - - - - - - - - 5. 实现源代码package lcsimple;public class LCSImplem 断点调试及代码分析首先在 main 方法里定义两个字符串,如:对这两个字符串,使它们的第一个字符为空, 即初始化之后的 c的第一行第一列, 之所以要空出,是因为c代表的是两个字符串数组多少个, 0 的意思就是某个字符串的长度为0。然后将这两个字符串分割为 char 型数组:精品资料 - - - 欢迎下载 - - - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 最长 公共 序列 问题
限制150内