最长公共子串

✍ dations ◷ 2025-01-31 14:09:14 #算法,动态规划,组合数学

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

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

相关

  • 布列敦森林体系布雷顿森林体系(英语:Bretton Woods system)是1944年7月至1973年间,世界上大部分国家加入以美元作为国际货币中心的货币体系。布雷顿森林协定对各国就货币的兑换、国际收支的调
  • 辅音音素文字辅音音素文字(Abjad)是一种文字的书写系统,其特点是每个符号都代表辅音,辅音音素文字的字母表只有辅音字母,没有元音字母,所以朗读文章时口中须补上适当的元音才能读出。典型的辅
  • 阿弥陀佛阿弥陀佛(梵语:अमिताभ,Amitābha),意为无量光佛,另名无量寿佛(梵语:अमितायूस्,Amitāyus),又称为无量清净佛、甘露王如来(梵语:Amṛta-rāja),在华人地区习惯作弥陀佛、弥陀
  • 缩排缩进(缩排)是指书写一段文字时在某些行(通常是段落的第一行)的开头插入的一个或几个空格。在汉语中,一般首行缩进两个空格。计算机编程语言也使用缩进来表明代码块的逻辑结构。段
  • 北京正负电子对撞机北京正负电子对撞机(英语:Beijing Electron Positron Collider,缩写:BEPC)是中国第一台高能粒子加速器,始建于1984年,位于北京西郊八宝山东侧。2004年至2009年间是重大的改造工程(称
  • 席田郡 (岐阜县)席田郡(日语:席田郡/むしろだぐん  */?)是日本美浓国(岐阜县)辖下的一个郡,下辖9村,已于1896年4月18日因与本巢郡、方县郡及大野郡合并为本巢郡而废除郡建置。现今的“席田用水”
  • 刘易斯·托马斯刘易斯·托马斯(1913年11月25日-1993年12月3日)是美国医师、诗人、语源学家、散文家、行政人员、教育家、政策顾问和研究员。托马斯出生于纽约法拉盛,曾就读于普林斯顿大学和哈
  • 美国榆美国榆(学名:),或译美洲榆,为榆科榆属下的一种原产于北美洲东部的乔木。这种树特别耐寒,可忍受低至零下42摄氏度的低温,而其寿命也可达数百年。
  • 十五年战争1931年九一八事件经过八年抗战到1945年波茨坦宣言后日本无条件投降,这段历经大约15年的期间,被称作十五年战争,也有称作十五年抗战(特别指中国)。十五年战争这名词被认为是在1956
  • 松井咲子松井咲子(日语:松井 咲子,1990年12月10日-)是日本女艺人暨钢琴演奏家,为女子偶像团体AKB48前成员。出身于埼玉县蕨市,东京音乐大学中途退学,后就读于桐朋学园艺术短期大学艺术科专攻