最长公共子串

✍ dations ◷ 2025-09-09 23:58:45 #算法,动态规划,组合数学

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

字符串"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)} 的时间复杂度内解决.

相关

  • 祠祭祠祭是在宗族祠堂祭祀祖先,又称族祭。闽南裔台湾人的祭祀时间除了祖先或亲人忌日外(一般“对年”之后就不拜生日,除非视为神明),常在除、清、盂、九等节庆:客家裔台湾人通常在公厅
  • 欧洲环境署本文是 欧洲联盟的政治与政府 系列条目之一欧洲环境署是欧洲联盟建立的一个监测和分析欧洲环境的机构,总部设在丹麦首都哥本哈根。它由欧共体条例 1210/1990 所建立而成,并经
  • 粉笔粉笔是日常生活中广为使用的文具,一般用于书写在黑板上。粉笔一般呈长型圆柱体,颜色包括白色和多种彩色。粉笔最早的记录是在中世纪时,人们开始发现用石灰加水,可以做成块状的物
  • 木卫一木卫一也称为“艾奥”或“伊俄”(发音为/ˈaɪ.oʊ/, 或是希腊 Ἰώ),是木星的四颗伽利略卫星中最靠近木星的一颗卫星,直径为3,642公里,是太阳系第四大卫星。名字来自众神之王宙
  • 万安水库万安水库位于中国江西省吉安市和赣州市之间的赣江中游,坝址位于吉安市万安县城南2km,距赣州90km,距南昌320km。万安水库控制流域面积36900km2,占赣江全流域面积的44%。是目前江
  • 各国劳动力人数列表这是一个各国劳动力人数列表,大部分数据基于世界概况。
  • 贝塔以色列贝塔-以色列人(希伯来语:.mw-parser-output .script-hebrew,.mw-parser-output .script-Hebr{font-size:1.15em;font-family:"Ezra SIL","Ezra SIL SR","Keter Aram Tsova","T
  • 胆固醇侧链裂合酶n/an/an/an/an/an/an/an/an/an/a胆固醇侧链裂合酶(英语:Cholesterol side-chain cleavage enzyme,CYP11A1或P450scc,其中“scc”是“side-chain 侧链”“cleavage 裂解”的缩写)
  • 亚当·科科斯卡亚当·科科斯卡(波兰语:Adam Kokoszka;1986年10月6日-)是一位波兰足球运动员。在场上的位置是中后卫。他现在效力于俄罗斯足球超级联赛球队莫斯科鱼雷足球俱乐部。他也代表波兰国
  • 石虎建武:335年-348年 赵武帝石虎(295年-349年5月26日),字季龙,上党武乡(今山西榆社)人。中国五胡十六国时代中,后赵的第三位皇帝。庙号太祖,谥号武帝。石虎是后赵开国君主石勒的侄儿。石