什么是DNA模式匹配中最快的算法

时间:2013-12-04 20:55:49

标签: c++ algorithm pattern-matching

假设我们有一个长度为数百万的字符串S.字符串只包含'a''t''g''c',我们有一个长度大约为20的模式W.在C ++中,在S中找到所有W的最快算法是什么?看来KMP还不够快。

2 个答案:

答案 0 :(得分:3)

KMP在S + W中是线性的。你不可能比这更快。

您至少需要读取数据,这也是线性的。因此,即使您的算法是即时的,您仍然无法比KMP做得更好。

我怀疑你读取数据或以破坏缓存的方式遍历数据时出错了。

答案 1 :(得分:2)

你可以试试Suffix Tree但是,如果你只处理一次,那么树需要O(n log n)来创建,所以KMP对单次检查来说更快。因此,如果您有多个不同的'W'可以找到,那么我会使用后缀树,否则KMP可能是您最好的选择。

来自维基百科的文章:

  

字符串的后缀数组可用作快速定位的索引   字符串S中每次出现子串模式P.查找   模式的每次出现都等同于查找每个后缀   以子字符串开头。感谢词典   在排序时,这些后缀将在后缀数组中组合在一起   并且可以通过两次二进制搜索有效地找到。