最长公共子序列

✍ dations ◷ 2025-07-26 20:28:02 #算法,动态规划,组合数学,多项式时间问题,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

相关

  • 血液蛋白血浆蛋白(英语:plasma proteins)——又被称为血液蛋白(英语:blood proteins)——是血浆中的蛋白质,是血液中除了血红蛋白以外的蛋白质。有时也有人用血清蛋白来称呼它,但是血浆蛋白
  • 双峰骆驼双峰骆驼(学名:Camelus bactrianus),也叫双峰驼,是一个大型的偶蹄动物,与单峰骆驼不同,有双峰,主要栖息在中亚与土耳其。双峰驼因其耐寒,耐旱和对高海拔地区的适应力而于中亚长期驯养
  • 阿根廷人阿根廷人口4091万(2008年估计)。白人和印欧混血种人占95%,多属意大利和西班牙后裔。印第安人口60.03万,其中人口最多的少数民族为马普切人(Mapuche)(2005年印第安人口普查)。人口总
  • 法耶兹·萨拉杰法耶兹·萨拉杰(阿拉伯语:فائز السراج‎;1960年2月20日-),是一名利比亚政治人物、利比亚现任总统委员会主席(国家元首)兼任总理(政府首脑)和国防部长。2015年12月17日签署《
  • 鹰爪行动美国陆军中央情报局后勤支援:鹰爪行动(英语:Operation Eagle Claw),是美国政府于1980年4月24日,为解救伊朗人质危机事件中被伊朗政府扣押的53名人质而采取的一次军事行动。此次行
  • 男男性接触者男男性行为者(英文:men who have sex with men,缩写MSM,又称男男性接触者、男男性行为人群)是指与同性发生性关系的男性,而不管他们自我认定为何种性向。这个术语主要用于美国,用以
  • 北美白桦美国桦树()是一种原产于北美北部的桦树。美国桦树是加拿大萨斯喀彻温省的省树及美国新罕布什尔州的州树。美国桦树是一种落叶乔木,一般可成长至18米,最高可达40米。美国桦树的分
  • 港川人港川人,是日本冲绳县出土的史前人类遗骨,分别有两男两女,出土后估计年代是16000-14000年。它们也是现代智人的完整骨骼在东亚中最古老的。在1967年冲縄县岛尻郡具志头村港川海
  • 三聚丙烯三聚丙烯(英语:Tripropylene)也称为丙烯三聚体(英语:propylene trimer)是一种支链烯烃,化学式C9H18,是壬烯的同分异构体之一,系统名为“4,6-二甲基-1-庚烯”,由丙烯三聚化生成:在这一反
  • 小弯曲蛤小弯曲蛤(学名:,台湾称弓形寄生蛤)是帘蛤目寄生蛤科人字蛤属的一种。主要分布于中国大陆、台湾,常栖息在潮间带,寄生于贝类的壳内。