我使用以下字母表生成了一个字符串:{A,C,G,T}
。我的字符串包含超过10000个字符。我正在其中搜索以下模式:
- ATGGA
- TGGAC
- CCGT
我被要求使用一个具有O(m+n)
运行时间的字符串匹配算法。
m = pattern length
n = text length
KMP算法
和Rabin-Karp算法
的运行时间都相同。在这种情况下,哪个算法(Rabin-Karp和KMP)最合适?
我使用以下字母表生成了一个字符串:{A,C,G,T}
。我的字符串包含超过10000个字符。我正在其中搜索以下模式:
我被要求使用一个具有O(m+n)
运行时间的字符串匹配算法。
m = pattern length
n = text length
KMP算法
和Rabin-Karp算法
的运行时间都相同。在这种情况下,哪个算法(Rabin-Karp和KMP)最合适?
如果你想搜索多个模式,通常使用的正确选择是Aho-Corasick,这有点是KMP的一般化。现在在你的情况下,你只搜索三个模式,所以KMP可能并不会慢太多(最多三倍),但这是一般的方法。
Rabin-Karp更容易实现,如果我们假设冲突永远不会发生,但如果你遇到的问题是典型的字符串搜索,无论输入是什么,KMP都会更稳定。但是,Rabin-Karp有许多其他应用,而KMP则不是一个选择。