通过循环多项式散列n-gram - java实现

时间:2011-02-23 04:09:28

标签: java algorithm hash string-matching rabin-karp

我正在解决一些涉及Rabin-Karp字符串搜索算法的问题。该算法要求滚动哈希比原始搜索更快。 This article 描述了如何实现滚动哈希。我没有问题地实现了“Rabin-Karp滚动哈希”并且发现了很少的实现implementations,但文章也提到了计算复杂性,并且优选使用循环多项式散列n-gram。它链接到BuzHash这种技术的实现,但我想知道它是如何用它来构建n-gram哈希的。我想要this

之类的东西
CPHash cp = new CPHash("efghijk");
cp.shiftRight('l') // now we got hash of "fghijki"
cp.shiftLeft('d') // "defghi"

for java。

对于会遇到与字符串搜索相关问题的人(比如我),我发现有些文章很有用:123

1 个答案:

答案 0 :(得分:4)

我最近发布了一个Apache许可的Java库,它实现了几个滚动哈希函数,包括Cyclic和Rabin-Karp:

http://code.google.com/p/rollinghashjava/

https://github.com/lemire/rollinghashjava