何时使用Rabin-Karp或KMP算法?

时间:2014-04-28 09:03:15

标签: string algorithm matching knuth-morris-pratt rabin-karp

我使用以下字母生成了一个字符串。 {A,C,G,T}。我的字符串包含超过10000个字符。我在其中搜索以下模式。

  • ATGGA
  • TGGAC
  • CCGT

我已经要求使用具有O(m+n)运行时间的字符串匹配算法。

m = pattern length
n = text length

KMP and Rabin-Karp algorithms都有这个运行时间。在这种情况下,最合适的算法(Rabin-Carp和KMP之间)是什么?

1 个答案:

答案 0 :(得分:18)

当您想要搜索多个模式时,通常正确的选择是使用Aho-Corasick,这有点概括为KMP。现在在你的情况下你只搜索3个模式,所以可能是KMP的速度不是那么慢(最多三次),但这是一般的方法。

如果我们假设碰撞永远不会发生,那么

Rabin-Karp更容易实现,但如果您遇到的问题是典型的字符串搜索,那么无论您输入什么,KMP都会更稳定。然而,Rabin-Karp有许多其他应用,其中KMP不是一种选择。