最长公共子串

✍ dations ◷ 2025-08-17 20:05:31 #算法,动态规划,组合数学

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

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

相关

  • Rbsub2/subS硫化铷是一种无机化合物、无机盐类,其化学式为Rb2S。常温下为无色易朝解固体,它的性质都与同族硫化物:硫化锂、硫化钠和硫化钾类似。可将硫化氢溶解在氢氧化铷水溶液,会先生成
  • 天体力学天体力学是天文学的一个分支,涉及天体的运动和万有引力的作用,是应用物理学,特别是牛顿力学,研究天体的力学运动和形状。研究对象是太阳系内天体与成员不多的恒星系统。以牛顿、
  • 燕雀类燕雀(学名:Fringilla montifringilla)为燕雀科燕雀属的鸟类,俗名虎皮雀、花鸡,台湾称花雀。身体长约16厘米;黄色嘴,尖端微黑;黑色尾羽,最外侧的一对部分带有白色;黑色翼羽;体羽下部为白
  • 壹善堂壹善堂是一座位于台中市南屯区的龙华派斋教土角木造寺堂,其主祀神尊为观世音菩萨,创建于光绪八年(1882年)旧历八月十五日。光绪初年,廖勃独资创建“中和堂”于彰化过沟仔。后来
  • 尼尔逊(权力一元化机构)尼尔逊(毛利语:Whakatū,英语:Nelson),地理位置在新西兰的中心,南岛的北端,是新西兰 17 个地方行政区面积最小的一个。尼尔逊市为尼尔逊地区的行政中心,也是该区发展艺
  • 奥克兰 (加利福尼亚州)奥克兰(英语:Oakland;意为“橡树之地”)是美国加利福尼亚州北部旧金山湾沿岸的主要城市,也是阿拉米达县县治所在。俗称“奥克城”(Oaktown),当地华人及粤语社群则常称“屋仑”。其与
  • 2010年6月逝世人物列表2010年6月逝世人物列表,是用于汇总2010年6月期间逝世人物的列表。
  • 弗朗西斯科·卡尔沃·塞拉列尔弗朗西斯科·卡尔沃·塞拉列尔(西班牙语:Francisco Calvo Serraller,1948年4月19日-2018年11月16日),西班牙历史学家。卡尔沃·塞拉列尔1948年出生于马德里。他在康普顿斯大学获得
  • 伽利略定位系统伽利略定位系统(意大利语:Galileo),是一个正在建造中的卫星定位系统,该系统由欧盟通过欧洲空间局和欧洲导航卫星系统管理局(英语:European GNSS Agency)建造,总部设在捷克共和国的布
  • 超级飞侠《超级飞侠》(英语:,港澳译《超级飞侠》,台湾译《Super Wings》,韩语:《출동! 슈퍼윙스》)是韩国、中华人民共和国、美国播出的电视动画影集。《超级飞侠》是奥飞动漫历经三年制作