最长公共子序列

✍ dations ◷ 2025-09-11 00:34:14 #算法,动态规划,组合数学,多项式时间问题,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

相关

  • 西普里安塔修斯·凯斯利乌斯·西普里亚努斯(拉丁语:Thascius Caecilius Cyprianus),英语化后成为居普良(英语:Cyprian, 约200年-258年),圣公会译圣西浦廉,又译西普里安,迦太基教会主教,基督教会
  • 活性代谢物活性代谢产物(active metabolite)是药物经代谢后产出,具有生理活性的分子。药物分子经身体代谢,被修改后仍继续对身体造成影响者,即为活性代谢产物。 通常这些影响与原分子相似
  • 1号高速1号高速铁路(英语:High Speed 1),正式名称为英法海峡隧道连接铁路(英语:Channel Tunnel Rail Link,CTRL),是一条长约108公里的高速铁路,连接英国英法隧道出口至伦敦市区圣潘克拉斯车站
  • 苏联共产党中央书记处苏联主题苏联共产党中央委员会书记处(俄语:Секретариат ЦК КПСС),简称苏共中央书记处,是苏联共产党的一个重要机构。相对于负责制定政策的中央政治局,中央书记处
  • 纳帕纳帕(英语:Napa)位于美国加利福尼亚州中部纳帕河(英语:Napa River)畔,是纳帕县的最大城市及县治所在。
  • 上海虹桥上海虹桥可以指:
  • 伦敦及东北铁路4468号机车伦敦及东北铁路(LNER)4468号机车或英国铁路60022号机车,别称野鸭号,是伦敦及东北铁路A4型蒸汽机车中的一辆,于1938年唐卡斯特工厂(英语:Doncaster Works)制造。该机车曾创造了时速12
  • 2,4,6-吡啶三甲酰氯2,4,6-吡啶三甲酰氯是一种有机化合物,属于酰氯。将10 mol的蒸馏过的氯化亚砜以及一滴DMF加入至2 g 2,4,6-吡啶三甲酸中,回流5 h,蒸干过量的氯化亚砜,真空干燥,得到产物。
  • 沃尔维湖坐标:40°40′54″N 23°28′02″E / 40.68167°N 23.46722°E / 40.68167; 23.46722沃尔维湖(希腊语:Λίμνη Βόλβη)是希腊第二大湖泊,位于塞萨洛尼基州,长21.5公里、宽6
  • 西尔维亚努斯的戒指西尔维亚努斯的戒指(英语:Ring of Silvianus)或维农的戒指(英语:Vyne Ring)是一枚4世纪的古罗马金戒指,于1785年在英国出土。现今这枚戒指被认为可能是J·R·R·托尔金小说《魔戒》