2016 - 2024

感恩一路有你

动态规划最长公共子序列 最长公共连续子序列?

浏览量:1652 时间:2021-04-01 01:59:49 作者:admin

最长公共连续子序列?

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

公共子序列推导公式?

,最长的普通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 最大公约数 分治法合并排序

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