最长公共子串

✍ dations ◷ 2025-11-06 15:51:00 #算法,动态规划,组合数学

在计算机科学中,最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。

字符串"ABABC","BABCA"以及"ABCBA"的最长公共子串是"ABC"。其他的公共子串包括"A"、"AB"、"B"、"BA"、"BC"以及"C"。

  ABABC    |||   BABCA    |||    ABCBA

问题定义

给定两个字符串,长度为 m {\displaystyle m} 的字符串 S {\displaystyle S} 以及长度为 n {\displaystyle n} 的字符串 T {\displaystyle T} ,求最长的子串 x {\displaystyle x} 同时是 S {\displaystyle S} 以及 T {\displaystyle T} 的连续子串。

问题可以一般化为k-公共子串问题——给定字符串的集合 S = { S 1 , . . . , S K } {\displaystyle {\displaystyle S=\{S_{1},...,S_{K}\}}} ,其中 | S i | = n i {\displaystyle |S_{i}|=n_{i}} Σ n i = N {\displaystyle \Sigma n_{i}=N} .。对于满足 2 k K {\displaystyle 2\leq k\leq K} k {\displaystyle k} ,找出至少是 S {\displaystyle S} k {\displaystyle k} 个字符串的公共子串的最长串。

利用广义后缀树,我们可以在 Θ ( n + m ) {\displaystyle \Theta (n+m)} 的时间复杂度内求出 S {\displaystyle S} T {\displaystyle T} 的最长公共子串的长度和他们的起始位置。而如果利用动态规划求解,则时间复杂度为 Θ ( n m ) {\displaystyle \Theta (nm)} 。而对于一般化的公共子串问题,使用动态规划的求解的时间复杂度为 Θ ( n 1 {\displaystyle \Theta (n_{1}} ·...· n K ) {\displaystyle n_{K})} ,利用广义后缀树则需 Θ ( N K ) {\displaystyle \Theta (N*K)} 的时间复杂度。

字符串集合的最长公共子串可以通过构造一棵广义后缀树, 然后去查找拥有来自所有集合中字符串的叶节点的最深的内部节点来得到。右图展示了字符串“ABAB”,“BABA”和“ABBA”对应的广义后缀树。为了方便后缀树的构造和区分字符串,每个串的结尾都添加了终结符“$”和字符串编号,分别变成了“ABAB$0”,“BABA$1”和 “ABBA$2”。如图所示,串“A”,“B”,“AB”和“BA”的节点对应的子树都包含来自所有字符串的叶节点。

假定字母表的大小是常数,构造这样的一颗后缀树的时间复杂度为 Θ ( N ) {\displaystyle \Theta (N)} 。这样,如果将整个树自底向上遍历,并在每个节点通过一个位向量标记每个节点的子树中出现过的所有字符串的,则k-公共子串问题可以以 Θ ( N K ) {\displaystyle \Theta (NK)} 的时间复杂度来解决。特别地,如果后缀树为常数时间的最近公共祖先检索做了优化,那么问题将可以在 Θ ( N ) {\displaystyle \Theta (N)} 的时间复杂度内解决.

相关

  • 高胰岛素血症高胰岛素血症 (hyperinsulinemia)是指血中胰岛素相对葡萄糖的浓度过高,是早期的第二型糖尿病常见的症状之一, 症状也出现在施打过多胰岛素的第一型糖尿病患者,以及先天高胰岛素血
  • 昂布瓦斯城堡昂布瓦斯城堡(法语:Château d'Amboise)是位于法国卢瓦尔河的昂布瓦斯的一座法式城堡。昂布瓦斯城堡的始建年份已经不可考究,只知道城堡的雏型可追溯至罗马时代。14世纪起,瓦卢瓦
  • 中台湾中台湾是台湾中部的简称。其为台湾西部平原的起始地带,是台湾的农业重镇,同时也是台湾中小企业与精密机械最重要的聚集地,巨大机械(捷安特)、台中精机、宝成集团、汉翔航空工业等
  • 产业组成这里列出各国国内生产总值中各产业所占成分。此表根据的是美国中央情报局的《世界概况》中提供的国内生产总值(按国际汇率和购买力平价计算)和各产业所占比重进行估算,即按官方
  • 黄家驷黄家驷(1906年7月14日-1984年5月14日),江西玉山人,中国医学家、医学教育家,中国胸外科学的奠基人之一,也是中国生物医学工程学的奠基人之一。黄家驷是江西省玉山县冰溪镇人。1930年
  • Kell血型系统Kell血型系统是一组人类红细胞表面的抗原,它在血型的确定上有重要的作用,它也是溶血疾病的攻击目标。 Kell血型系统有K、k和 Kp三种不同的抗原。
  • 李牧华李牧华(1923年10月10日-2005年10月),原名李实,笔名李明诚,是知名小说家及翻译家,原籍甘肃省清水县。他以自修的方式学习语文,译有《莎冈小说集》、《基度山恩仇记》、《少年维特之烦
  • 叠字符号؋ ​₳ ​฿ ​₿ ​₵ ​¢ ​₡ ​₢(英语:Brazilian cruzeiro) ​$ ​₫ ​₯ ​֏ ​₠ ​€ ​ƒ(英语:Florin sign) ​₣ ​₲ ​₴(英语:Hryvnia sign) ​₭ ​₺ ​₾ ​₼
  • 万州第二高级中学重庆市万州第二高级中学(Wanzhou NO.2 Senior High School),位于重庆市万州区,系原四川省首批办好的重点中学、重庆市直辖后首批市级重点中学。重庆市万州第二高级中学,创办于193
  • 金带蓝子鱼金带蓝子鱼为辐鳍鱼纲鲈形目刺尾鱼亚目蓝子鱼科的其中一种,分布于西印度洋区,包括红海、东非等海域,栖息深度可达30米,本鱼上体灰色,绿色或褐色,下体银色;虹膜虹彩银或金色,棘细长