最长公共子序列(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)的主要内容,如果未能解决你的问题,请参考以下文章

最长公共子序列(LCS)

LeetCode(LCSி)最长公共子序列&变形应用

最长公共子序列(LCS)

1006 最长公共子序列Lcs

最长公共子序列(LCS)动态规划解题笔记

最长公共子序列(LCS)动态规划解题笔记