最长公共子序列(LCS)
Posted xiugeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长公共子序列(LCS)相关的知识,希望对你有一定的参考价值。
一、最长公共子序列介绍
一个序列的子序列是在该序列中删去若干元素后得到的序列。例如:“ABCD”和“BDF”都是“ABCDEFG”的子序列。
最长公共子序列(Longest Common Subsequence,简写LCS)问题:给定两个序列X和Y,求X和Y长度最大的公共子序列。例如:X=“ABBCBDE”, Y="DBBCDB", LCS(X,Y)="BBCD"
应用场景:字符串相似度比对、基因比对。
1、LCS的最优子结构原理
令X=<x1,x2,...,xm>和Y=<y1,y2,...,yn>为两个序列,Z=<z1,z2,...,zk>为X和Y的任意LCS。
1.如果xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个LCS。
2.如果xm≠yn,那么zk≠xm意味着Z是Xm-1和Y的一个LCS。
3.如果xm≠yn,那么zk≠yn意味着Z是X和Yn-1的一个LCS。
2、最优解的递推式
c[i,j]表示Xi和Yj的LCS长度。
二、示例及解析
例如:要求a="ABCBDAB"与b="BDCABA"的LCS:
由于最后一位"B"=?"A",因此LCS(a,b)应该来源于LCS(a[:-1],b)与LCS(a,b[:-1])中的一个。意思就是最后一位不一样,要不去除a的最后一位,要不去除b的最后一位。
以上是关于最长公共子序列(LCS)的主要内容,如果未能解决你的问题,请参考以下文章