一尘不染

在N个字符串中查找公共子字符串的算法

algorithm

我熟悉2个字符串的LCS算法。寻找有关在2..N字符串中查找常见子字符串的建议。每对中可能有多个公共子字符串。字符串子集中可以有不同的公共子字符串。

字符串: (ABCDEFGHIJKL) (DEF) (ABCDEF) (BIJKL) (FGH)

常用字符串:

1/2 (DEF)
1/3 (ABCDEF)
1/4 (IJKL)
1/5 (FGH)
2/3 (DEF)

最长的通用字符串:

1/3 (ABCDEF)

最常见的字符串:

1/2/3 (DEF)

阅读 187

收藏
2020-07-28

共1个答案

一尘不染

这种事情在DNA序列分析中一直都在做。您可以找到各种算法。这里列出一个合理的集合。

还有一种蛮力的方法来制作 每个 子字符串的表(如果您只对短的子字符串感兴趣):在每个级别上形成一个N元树(N =
26表示字母,256表示ASCII),并存储直方图每个节点的计数。如果修剪掉很少使用的节点(以保持合理的内存要求),最终会得到一种算法,该算法以N * M
^ 2 * log(M)的时间来查找长度最大为M的所有子序列,以输入长度N.如果您将其拆分为K个单独的字符串,则可以构建树结构,并且只需遍历树就可以读出答案。

2020-07-28