最长公共子串

✍ dations ◷ 2025-12-07 21:51:33 #算法,动态规划,组合数学

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

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

相关

  • 厕刷厕刷是一种可以用来清洗厕所的刷子,通常置于厕所的便器旁,一般来说会搭配厕所清洁剂或漂白剂来使用。不过,厕刷既不能用来清洗存水弯(因为构不到)也不能用来清洗马桶座圈。最早制
  • 四大满贯可以指:
  • 麝香猫麝猫(civet),又名麝香猫,是灵猫科的大部分物种。它们的身体细小及柔软,大部分栖息在树上。一般外表像猫,但鼻端较长及甚至是尖的,有点像水獭或獴。麝猫的长度不一,不计算尾巴约有0
  • 1981年 布加勒斯特第十一届夏季世界大学生运动会于1981年7月19日至7月30日在罗马尼亚布加勒斯特举行,这是罗马尼亚首次主办夏季世界大学生运动会。该届比赛共设10个大项,共有来自86个国家和地区
  • 宫野真守宫野真守(1983年6月8日-)为日本男性声优、歌手、演员,经纪公司为向日葵剧团、唱片公司为King Records。埼玉县埼玉市出身,血型为B型,身高182cm,体重71kg。其声优代表作有《死亡笔记
  • 哈斯克尔县 (堪萨斯州)哈斯克尔县(Haskell County, Kansas,简称HS)位美国堪萨斯州西南部的一个县。面积1,496平方公里。根据美国2000年人口普查,共有人口4,171人。县治萨布莱特(Sublette)。成立于1887年
  • 饮弹饮弹 ,又称吞枪,是人类自杀方法的一种,办法是向自己的头部开枪。最有效的饮弹方式应该要把枪口放进嘴里,然后向上颚方向轰击。这样子弹会通过脑干,确保快速而必然的死亡。有些电
  • 中国人民解放军长沙工程兵学院中国人民解放军长沙工程兵学院,是解放军工程兵一所初级指挥院校。1999年并入国防科技大学。1978年7月在长沙组建中国人民解放军工程兵学校。1986年6月更名中国人民解放军长沙
  • 我们活在当下《我们活在当下》(日语:僕らは今のなかで  ?),又译作《如今的我们》,是μ's的单曲,2013年1月23日由Lantis发行,同时也是电视动画《LoveLive!》第一期的片头曲。本曲为电视动画《L
  • 沈璿沈璿(1899年11月15日-1983年11月30日,拼音:Shěn Xuán),字义舫,中国数学家,国立台湾大学史上第2位理学院院长兼数学系主任,历经罗宗洛、陆志鸿、庄长恭、杜聪明、傅斯年校长。原籍江