我使用以下字母生成了一个字符串。
{A,C,G,T}
。我的字符串包含超过10000个字符。我在其中搜索以下模式。
我已经要求使用具有O(m+n)
运行时间的字符串匹配算法。
m = pattern length
n = text length
KMP and Rabin-Karp algorithms
都有这个运行时间。在这种情况下,最合适的算法(Rabin-Carp和KMP之间)是什么?
答案 0 :(得分:18)
当您想要搜索多个模式时,通常正确的选择是使用Aho-Corasick,这有点概括为KMP。现在在你的情况下你只搜索3个模式,所以可能是KMP的速度不是那么慢(最多三次),但这是一般的方法。
如果我们假设碰撞永远不会发生,那么Rabin-Karp更容易实现,但如果您遇到的问题是典型的字符串搜索,那么无论您输入什么,KMP都会更稳定。然而,Rabin-Karp有许多其他应用,其中KMP不是一种选择。