`
gaofen100
  • 浏览: 1227901 次
文章分类
社区版块
存档分类
最新评论

Java实现最长公共子序列

 
阅读更多

最长公共子序列(LCS)定义:

一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。比如数列A = “abcdef”, B = “adefcb”. 那么两个数列的公共子序列是"adef".

最长公共子序列和最长公共子字符串是有区别的,公共子序列里的元素可以不相邻,但是公共子字符串必须是连接在一起的。比如A和B的公共子字符串是“def”。

求解最长公共子序列要用到动态规划的概念。我们用c[i][j]记录X[i]与Y[j] 的LCS 的长度,那么在计算c[i,j]之前,c[i-1][j-1],c[i-1][j]与c[i][j-1]均已计算出来。此时我们根据X[i] = Y[j]还是X[i] != Y[j],就可以计算出c[i][j]。问题的递归式写成:

在经典的算法导论那本书里,文章使用了b[][]来记录c[i,j] 选自于哪一个(从递归式里,我们知道有三个不同的选择),但是,我们可以不借助于数组b而借助于数组c本身临时判断c[i,j]的值是由c[i-1,j-1],c[i-1,j]和c[i,j-1]中哪一个数值元素所确定,原理是通过我们如何选取c[i,j]来决定的。 在代码里面,我们可以看得出,代码行14,15对应打印的代码行31,32, 代码行17对应打印打印行的36到40。

代码如下:





分享到:
评论

相关推荐

    最长公共子序列LCS算法

    最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在文本编辑、生物信息学、数据挖掘等领域有着广泛的应用。LCS问题的基本目标是...

    最长公共子序列(java实现)

    总的来说,通过理解LCS的概念、动态规划的原理以及Java代码的实现,我们可以有效地解决两个序列的最长公共子序列问题,并将其应用于序列比对、文本编辑距离计算等多个领域。学习和掌握这种算法对于提升编程能力和...

    实验5--最长公共子序列 JAVA

    由此函数,把序列X={x1,x2….xm}和Y={y1,y2…ym}的最长公共子序列的搜索分为M个阶段,第1阶段,按照式1计算X1和Yj的最长公共子序列长度L[1][j](1),第2阶段,按照2式计算X2和Yj的最长公共子序列长度L[2][j](1),...

    java算法分析与设计之最长公共子序列问题源代码

    java算法分析与设计之最长公共子序列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的...

    LCS 最长公共子序列 JAVA

    最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一种经典的问题,主要出现在序列比对、文本编辑距离等领域。在两个给定的字符串中,LCS是指不考虑字符顺序的最长子串,它同时存在于这两个字符...

    最长公共子序列

    【最长公共子序列】(Longest Common Subsequence, LCS) 是一种在计算机科学中常见的字符串比较问题,主要涉及序列和动态规划。这个问题的目标是找到两个给定字符串的最长子序列,这个子序列不必连续,但必须保持原...

    java解决动态规划最长公共子序列问题

    最长公共子序列(Longest Common Subsequence,LCS)是计算机科学中的一种经典问题,尤其在算法和数据结构领域有着广泛的应用。这个问题涉及到比较两个序列,找出它们的最长的子序列,这个子序列不需要在原序列中...

    Java基于动态规划法实现求最长公共子序列及最长公共子字符串示例

    Java中的动态规划法被广泛应用于解决复杂的问题,如求解最长公共子序列(Longest Common Subsequence, LCS)和最长公共子字符串(Longest Common Substring, LSS)。这两个概念在计算机科学中尤其是在字符串处理和...

    最长公共子序列(LCS)算法源代码和实验报告

    最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在文本编辑、生物信息学、数据挖掘等领域有着广泛的应用。LCS的基本思想是寻找两...

    最长公共子序列问题

    此段Java代码实现了对两个字符数组`a`和`b`的最长公共子序列的计算,并将结果输出到控制台。具体步骤如下: 1. **初始化**:创建一个`(n+1)×(m+1)`的二维数组`L`用于存储最长公共子序列的长度;同样大小的数组`S`...

    找出所有最长公共子序列算法代码

    所有最长公共子序列(LCS)——动态规划——Java---所有!!!所有!!!所有!!!

    Java最长公共子序列示例

    本文介绍了Java最长公共子序列的定义和示例代码,并提供了一个使用动态规划法实现的Java代码示例,希望对大家有所帮助。 知识点: * 最长公共子序列的定义和概念 * Java中实现最长公共子序列的算法 * 动态规划法的...

    LcsLength.rar_最长 公共子序列 算法_最长公共子序列

    最长公共子序列(Longest Common Subsequence,LCS)算法是一种经典的计算机科学问题,主要应用于比较和分析两个或多个序列的相似性。在本实验作业中,我们将关注两个字符串之间的LCS,这是一个基础且重要的算法,它...

    使用Java实现的计算两字符串相似度+最长公共子序列.zip

    总结起来,这个Java项目提供了计算两个字符串相似度的方法,主要利用了最长公共子序列的概念和动态规划算法。通过理解并实现这个项目,开发者可以增强对字符串处理、动态规划以及相似度计算的理解,这对进行文本分析...

    求解最长公共子序列问题的可视化界面实现源码

    总结,"求解最长公共子序列问题的可视化界面实现源码"是一个结合了算法理论与图形用户界面设计的项目。通过这样的实现,学习者不仅可以深入理解LCS算法,还能提升编程和交互式设计的能力。压缩包中的"LCS"文件可能...

    基于java实现动态规划求解最长公共子序列问题

    最长公共子序列(Longest Common Subsequence,LCS)问题是一个经典的计算机科学问题,主要涉及字符串处理和算法设计。在两个或多个字符串中找到最长的序列,该序列不一定是连续的,但存在于每个字符串中,这就是LCS...

    算法设计实验快速排序01背包问题活动安排最长公共子序列

    在实际应用中,快速排序广泛用于数据处理和数据库系统,0-1背包问题常见于资源分配和任务调度,贪心算法在日常的优化问题中大有作为,而最长公共子序列则在文本处理、生物信息学等领域有重要应用。掌握这些算法,...

    基于 java计算两字符串相似度和最长公共子序列

    【作品名称】:基于 java计算两字符串相似度和最长公共子序列 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 ...

    Java动态规划求解最长公共子序列问题.zip

    在Java中实现这个算法,你可以创建一个方法,接收两个字符串作为参数,返回最长公共子序列的长度和实际子序列。同时,为了提高代码可读性和可维护性,可以将填充dp数组的逻辑封装在单独的函数里。 以下是Java代码...

Global site tag (gtag.js) - Google Analytics