最长公共子序列

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

相关

  • 血红蛋白浓度血红蛋白浓度,又名血红蛋白含量(,简写Hb),指每升全血中红细胞的血红蛋白的含量,单位为g/L。血红蛋白为血液携带氧气的运载工具,故此值可用于衡量贫血的程度。因年龄和性别而异:见
  • 麦克·摩尔迈克尔·肯尼思·穆尔(英语:Michael Kenneth Moore,1949年1月28日-2020年2月2日),新西兰工党籍政治家,1972年当选为新西兰国会议员进入政界。曾担任新西兰外交部长、工党领袖并于19
  • 人口素质人口素质亦称人口质素、人口质量',是包括了国家或地区人口的身体质素、文化质素及思想及道德质素的三个方面,涉及人口学及社会科学等的范畴。人口素质含有不同观点,在不同认识
  • 瞿折罗-普腊蒂哈腊瞿折罗-普腊蒂哈腊王朝(英语:Gurjara-Pratihara Dynasty),又称普腊蒂哈腊王朝(Pratihara dynasty),或译瞿折罗-波罗提诃罗王朝,是由瞿折罗族建立的一个印度教王朝,支配印度的西北部,大
  • 阿图罗·弗隆迪西阿图罗·弗朗迪西·埃尔克里(西班牙语:Arturo Frondizi Ercoli;1908年10月28日-1995年3月18日),是阿根廷总统,执政期间推动国有企业部分私有化,大力发展基础工业,并对外开放吸收外资
  • 布氏硬度试验布氏硬度试验(Brinell scale)是压入硬度试验之一种,其测量值用HB或BHN表示。该试验最初由瑞典工程师 Johan August Brinell(1849年-1925年)于1900年提出。布氏硬度是第一个被广泛
  • 前列腺特异抗原n/an/an/an/an/an/an/an/an/an/a前列腺特异抗原(英语:Prostate Specific Antigen、PSA)血浆前列腺特异抗原浓度升高是提示前列腺癌的敏感监测指标;但不能作为确诊指标。由于前列
  • 自行自行是恒星相对于太阳系的质量中心,随着时间变化的推移所显示出在位置在角度上的改变,它的测量是以角秒/年为单位(3600角秒等同于角度的1度)。反之,径向速度是在视线方向上天体接
  • 商标注册用商品和服务国际分类商标注册用商品和服务国际分类又称尼斯分类(International (Nice) Classification of Goods and Services(英语:International (Nice) Classification of Goods and Services)),由
  • 南开科技大学南开科技大学是位于台湾南投县草屯镇的一所私立科技大学,与暨南国际大学为南投县惟二的两间大学。原名南开技术学院,2008年改名为南开科技大学,招收研究所、四技、五专的学生。