最长公共子串

✍ dations ◷ 2025-11-27 18:03: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)} 的时间复杂度内解决.

相关

  • 基辅罗斯基辅罗斯,正式名称为罗斯(古东斯拉夫语:Рѹ́сьскаѧ землѧ,Рѹ́сь,希腊语:Ῥωσία,拉丁语:Rus(s)ia, Ruscia, Ruzzia, Rut(h)enia,俄语:Киевская Русь
  • 玉部,为汉字索引中的部首之一,康熙字典214个部首中的第九十六个(五划的则为第二个)。俗称王字旁。就繁体中文中,玉部归于五划部首;简体中文拆分为玉部与王部。玉部通常是从下、左
  • 尖峰流速计尖峰流速计(英语:Spirometer)是一个用来测量肺的流通空气的体积,简单来说就是测量进出肺部的空气之体积,尖峰流速计可用来量测呼气流量峰值。尖峰流速图表(Spirogram)能判断出两种
  • span class=nowrapSmClsub3/sub/span92.4 g/100 mL,10 °C氯化钐(III)(化学式:SmCl3),是稀土金属钐(III)的氯化物。它是一种淡黄色的固体。若将之暴露在潮湿的空气中,它会迅速的吸收水分子形成六水合物,SmCl3·6H2O。
  • 威廉·皮克威廉·皮克(Wilhelm Pieck;1876年1月3日-1960年9月7日),东德共产主义政治家,曾任德国统一社会党主席和德意志民主共和国总统。威廉·皮克1876年出生于古本的一个贫苦工人家庭,当过
  • 社会保守主义社会保守主义相信社会建立在一个脆弱的关系网络之上,这种关系网络需要通过责任、传统价值观和既定制度来维护。这可能包括道德问题。社会保守主义通常对社会变迁持怀疑态度,并
  • 末罗瑜末罗瑜(Melayu)或末罗游为古代(大约4世纪-13世纪)苏门答腊岛上一个信奉婆罗门教的古国(现改为占碑),后来末罗瑜被苏门答腊岛上的另一个著名古国三佛齐所并吞。 唐代以后又出现了木剌
  • 射频烧灼术射频烧灼术(Radiofrequency ablation,RFA),又称射频消融术。是使用中频率交流电流(350-500 kHz)产生热量,以烧灼心脏电传导系统 , 肿瘤或其他不正常的组织。经由导管(英语:catheter)进
  • 克里斯·范霍伦小克里斯托弗·“克里斯”·范霍伦(英语:Christopher "Chris" Van Hollen, Jr.;1959年1月10日-)是美国民主党的政治人物。自2003年开始,他是马里兰州第8选举区选出的美国众议院议
  • 泉镜花泉镜花(1873年11月4日-1939年9月7日),活跃于明治后期-昭和初期的日本小说家,出生于日本石川县金泽市。本名镜太郎。1895年,泉镜花发表的《夜间巡警》、《外科室》,被视为“观念小说