2016 - 2024

感恩一路有你

java生成自增序列 最长公共连续子序列?

浏览量:1345 时间:2021-03-30 02:38:10 作者:admin

最长公共连续子序列?

最长公共子序列(LCS)是在一组序列(通常是两个序列)中查找最长子序列的问题。这与寻找最长公共子串的问题不同:子串不需要占据原始序列中的连续位置。最长公共子序列问题是一个经典的计算机科学问题,也是数据比较程序(如diff工具)和生物信息学应用的基础。它还广泛用于版本控制,例如git,以协调文件之间的更改。

连续子序列什么意思?什么是连续子序列?最大连续子序列又是什么?

最大子序列和也称为序列的连续最大和。顾名思义,就是在长度为n的序列{an}中找到I和J(1<=I<=J<=n),因此序列{an}中从第I个元素到第J个元素的所有元素之和最大。例如,当:-2,11,-4,13,-5,-2时,答案是20(11-413)]~],最长公共suB序列:LCS)

有两个序列a[1。。。M] 和B[1。。。N] ,分为子序列a[1]a[1。。2] a[1。。3]... A[1。。M

B[1]B[1。。2] B[1。。3] B[1。。n

依次计算a中的每个子序列(从a[1]开始)和B中每个子序列的最长公共子序列,并记录在数组C[M][n]中。C[i][J]表示a[1。。一] 和B[1。。J] 是的。

递推公式如下:

①C[i][J]=0,i=0或J=0

②C[i][J]=C[i-1][J-1]1,i!=0和j!=0和a[i]=B[J

]③C[i][J]=max{C[i-1][J],C[i][J-1]}i!=0和j!=0和[i

]路径记录:如何获得C[i][J]。根据递推公式,C[i][J]来自三个来源:C[i-1][J-1],C[i][J-1][J],C[i][J-1]。如果它是从C[I-1][J-1]导出的,那么a[I]=B[J]是最长公共子序列中的一个元素。

您可以设置数组P[M][n]来记录当前C[i][J]的获取方式。P[M][n]只有三个值,分别是1、2和3。

构造最长公共子序列:

递归检查P[i][J],初始i=m,J=n

如果P[i][J]=1,记录C[i][J],递归处理P[i-1][J-1

]如果P[i][J]=2,不记录,递归处理P[i-1][J

]如果P[i][J]=3,不记录,递归处理P[i][J-1

]直到i=0或J=0

时间复杂度:O(MN)

java生成自增序列 java最长不重复子串 找java出一个数字最长的字符串

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。