Rabin Karp算法
在介绍Rabin Karp算法前,先看看简单文本搜索算法。
简单文本搜索
遍历文本,如果模式的第一个字母匹配,则检查模式的所有字母是否都与文本匹配。
如果 m 是要搜索的字母数,n 是被搜索文本中的字母数,则该算法的时间复杂度为 O(m(n-m + 1))。
public static int simpleTextSearch(char[] pattern, char[] text) {
int patternSize = pattern.length;
int textSize = text.length;
int i = 0;
while ((i + patternSize) <= textSize) {
int j = 0;
while (text[i + j] == pattern[j]) {
j += 1;
if (j >= patternSize)
return i;
}
i += 1;
}
return -1;
}
当模式很长并且模式中有很多重复元素时,简单文本搜索算法效率非常低。、
Rabin Karp算法
Rabin Karp 算法的想法是使用哈希来查找文本中的模式。在算法开始时,我们需要计算模式的哈希值,该哈希值稍后在算法中使用。这个过程叫做指纹计算。
预处理步骤的重要之处在于其时间复杂度为 O(m),通过文本迭代将需要 O(n),从而给出整个算法的时间复杂度 O(m+n)。
1 | public static int RabinKarpMethod(char[] pattern, char[] text) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Web304030!
