最长公共子序列

✍ dations ◷ 2025-11-25 18:05:20 #算法,动态规划,组合数学,多项式时间问题,NP完全问题

最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置 。最长公共子序列问题是一个经典的计算机科学问题,也是数据比较(英语:data comparison)程序,比如Diff工具,和生物信息学应用的基础。它也被广泛地应用在版本控制,比如Git用来调和文件之间的改变。

一个数列 S {\displaystyle S} ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S {\displaystyle S} 称为已知序列的最长公共子序列。

对于一般性的LCS问题(即任意数量的序列)是属于NP-hard。但当序列的数量确定时,问题可以使用动态规划(Dynamic Programming)在多项式时间内解决。

最长公共子序列问题存在最优子结构:这个问题可以分解成更小,更简单的“子问题”,这个子问题可以分成更多的子问题,因此整个问题就变得简单了。最长公共子序列问题的子问题的解是可以重复使用的,也就是说,更高级别的子问题通常会重用低级子问题的解。拥有这个两个属性的问题可以使用动态规划算法来解决,这样子问题的解就可以被储存起来,而不用重复计算。这个过程需要在一个表中储存同一级别的子问题的解,因此这个解可以被更高级的子问题使用。

动态规划的一个计算最长公共子序列的方法如下,以两个序列 X {\displaystyle X} Y {\displaystyle Y} 为例子:

设有二维数组 f {\displaystyle f} 表示 X {\displaystyle X} i {\displaystyle i} 位和 Y {\displaystyle Y} j {\displaystyle j} 位之前的最长公共子序列的长度,则有:

其中, s a m e ( a , b ) {\displaystyle same(a,b)} X {\displaystyle X} 的第 a {\displaystyle a} 位与 Y {\displaystyle Y} 的第 b {\displaystyle b} 位完全相同时为“1”,否则为“0”。

此时, f {\displaystyle f} 中最大的数便是 X {\displaystyle X} Y {\displaystyle Y} 的最长公共子序列的长度,依据该数组回溯,便可找出最长公共子序列。

该算法的空间、时间复杂度均为 O ( n 2 ) {\displaystyle O(n^{2})} ,经过优化后,空间复杂度可为 O ( n ) {\displaystyle O(n)}


下面算法计算了所有子问题的最长公共子序列长度C

相关

  • Collin College科林学院(英语:Collin College),又名柯林郡社区学院(Collin County Community College),是位于美国德州科林县的一所社区学院,其总部位于麦金尼的科林高等教育中心(CHEC)。 科林
  • 乌头乌头属又名附子属(学名:Aconitum)是一种属于毛茛科的开花植物的属,这个属有250多个种。又名.mw-parser-output ruby.zy{text-align:justify;text-justify:none}.mw-parser-outpu
  • 时间箭头物理学在微观的层次几乎完全是时间对称的,这意味着物理学定律在时间流易的方向倒转之后仍然保持为真。但是在宏观层次却显得并不是那么回事:时间存在着明显的方向性。时间箭头
  • 1262年亚洲
  • 童中白童中白(女,1961年-),祖籍中国浙江杭州,出生于台湾台北市。1984年进入中国电视公司新闻部,担任过《中视晚间新闻》主播,主持过台湾第一个夜间谈话性质的节目《今夜》,之后赴美国求学。
  • ICAO代码国际民航组织机场代码(International Civil Aviation Organization Airport Code,缩写:ICAO code),是国际民航组织为世界上所有机场所订定的识别代码,由4个英文字母组成。ICAO机场
  • 包身工《包身工》,中国现代作家夏衍所著的报告文学作品,写于1935年。《包身工》一文以报告文学的形式叙述了上海等地包身工遭遇的种种非人的待遇,以及带工老板等人对他们残忍的压榨。
  • 水族饲养水族饲养是指在家中水族箱或池塘饲养鱼类,水母,乌龟等水族的一种爱好。其相关产业作为农业的一个分支,目前十分壮大。水族饲养通常分为淡水、半淡水以及咸水三大类。
  • 大花蒺藜大花蒺藜(学名:)为蒺藜科蒺藜属下的一个种。
  • 中冶京诚工程技术中冶京诚工程技术有限公司(英语:MCC Capital Engineering & Research Incorporation Limited,简称中冶京诚、CERI),成立于2003年11月28日,是由创建于1951年的中冶集团北京钢铁设计