最长公共子序列

✍ dations ◷ 2025-12-04 05:03: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

相关

  • 多枝霉草多枝霉草(学名:Sciaphila ramosa)为霉草科喜荫草属下的一个种。
  • 新桥恋人《新桥恋人》(Les Amants du Pont-Neuf)是一部1991年的法国电影,莱奥·卡拉克斯导演,朱丽叶·比诺什、德尼·拉旺主演。影片讲述了一个富家女和一名流浪汉的爱情故事。本片是当
  • 布尔可满足性问题可满足性(英语:Satisfiability)是用来解决给定的真值方程式,是否存在一组变量赋值,使问题为可满足。布尔可满足性问题(Boolean satisfiability problem;SAT))属于决定性问题,也是第一
  • 加拿大皇家海军皇家加拿大海军(英语:Royal Canadian Navy、RCN;法语:Marine royale canadienne、MRC)是加拿大的海军部队。截止2017年,皇家加拿大海军有8,500名现役军人、5,100名主要预备役(英语:P
  • 百万年前年,或称地球年、太阳年,是与地球在轨道上绕太阳公转有关事件再现之间的时间单位。将之扩展,可以适用于任何一颗行星:例如,一“火星年”是火星自己完整的运行绕太阳轨道一圈的时间
  • 卢顿卢顿(英语:Luton,国际音标:/.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Gent
  • 倍赏千惠子倍赏千惠子(1941年6月29日-)出生于日本东京都,女性演员、歌手,自1961年于《旅馆花嫁》(のれんと花嫁)开始,担纲演出多部电影,曾出过唱片《倍赏千恵子 抒情歌全集》、《GOLDEN☆BEST/
  • 白冠带鹀白冠带鹀(学名:),以昆虫为食。成年的白冠带鹀身长约18公分,头部有黑色和白色的条纹,尾巴很长。翅膀是褐色,鸟喙是粉红色或黄色。白冠带鹀外观类似白喉麻雀,但没有白喉咙的标记。成年
  • 钱浩梁钱浩梁(1934年-),京剧演员,工生行,曾用艺名钱正伦、浩亮(不带姓)。出身民办新式科班上海戏校正字科,1950年考进中国戏曲实验学校(现在的中国戏曲学院附中),师从李少春,1956年毕业,1962年到
  • 2-羟氨基乙酸2-羟氨基乙酸(也称N-羟基甘氨酸)是一种有机化合物,化学式为C2H5NO3。它可由2-溴乙酸和羟胺在乙醇中于室温反应得到。它和丙烯酸在三乙胺的存在下于甲醇中反应,得到N-羧甲基-N-羟