Хеширование n-грамм циклическими полиномами - реализация Java - PullRequest
2 голосов
/ 23 февраля 2011

Я решаю некоторую проблему, которая включает алгоритм поиска строки Рабина-Карпа. Этот алгоритм требует, чтобы скользящий хэш был быстрее, чем простой поиск. В этой статье описывается, как реализовать скользящий хэш. Я реализовал «скользящий хэш Рабина-Карпа» без проблем и нашел несколько реализаций реализаций , но в статье также упоминается сложность вычислений, и что предпочтение отдается хешированию n-грамм циклическими полиномами. Он ссылается на BuzHash реализацию такой методики, но мне интересно, как ее можно использовать для построения n-граммового хэша поверх него. Я хочу иметь что-то вроде this или

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

для Java.

Для людей, которые столкнутся с проблемами, связанными с поиском строк (например, я), есть несколько статей, которые я нашел полезными: 1 , 2 , 3

1 Ответ

4 голосов
/ 11 марта 2011

Я недавно опубликовал лицензированную Apache библиотеку Java, в которой реализованы несколько скользящих хеш-функций, включая Cyclic и Rabin-Karp:

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

https://github.com/lemire/rollinghashjava

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...