【最长公共子序列】

最长公共子序列是指在两个字符串中,保留字符次序不变的情况下,最长的相同字符序列。例如,字符串X='ABCBDAB'和Y='BDCABA'的最长公共子序列为'BCDA'。子序列可以通过删除给定序列的部分字符获得,公共子序列则是同时存在于两个序列中的子序列。常用的求解方法包括穷举法、备忘录法和自底向上法,其中备忘录法和自底向上法在效率上优于穷举法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在两个字符串中,有些字符会一样,可以形成的子序列也有可能相等,因此,长度最长的相等子序列便是两者间的最长公共字序列。例如序列X=''ABCBDAB''与 序列Y =''BDCABA'',最长公共子序列为“BCDA”.

基本概念:

        子序列(subsequence): 一个特定序列的子序列就是将给定序列中零个或多个元素去掉后得到的结果(不改变元素间相对次序)。例如序列<A,B,C,B,D,A,B>的子序列有:<A,B>、<B,C,A>、<A,B,C,D,A>等。

         公共子序列(common subsequence): 给定序列X和Y,序列Z是X的子序列,也是Y的子序列,则Z是X和Y的公共子序列。例如X=[A,B,C,B,D,A,B],Y=[B,D,C,A,B,A[,那么序列Z=[B,C,A]为X和Y的公共子序列,其长度为3。但Z不是X和Y的最长公共子序列,而序列[B,C,B,A]和[B,D,A,B]也均为X和Y的最长公共子序列,长度为4,而X和Y不存在长度大于等于5的公共子序列。对于序列[A,B,C]和序列[E,F,G]的公共子序列只有空序列[]。

        最长公共子序列:给定序列X和Y,从它们的所有公共子序列中选出长度最长的那一个或几个。

通常求公共子序列有三种方法 : 穷举法 、 备忘录法 、自底向上法。

 穷举法:

          穷举法是最容易想到的算法。对于X的所有序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公共子序列。并且在检查中记录最长公共子序列。因此,共有2^m个子序列,从而穷举法需要时间指数。但时间复杂度和空间复杂度过高,不建议使用。

备忘录法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值