Все темы
128

Рабин-Карп: поиск по скользящему хешу

Tier 1Закрыто

Где применяется

1. Задача

KMP (шаг 127) при несовпадении прыгает по таблице, которую заранее построил по образцу. Рабин-Карп устроен по-другому. Он превращает каждое окно текста (кусок длиной в образец) в одно число и сравнивает числа вместо символов. Сравнить два числа можно за одну операцию, поэтому большинство позиций отсеивается сразу. Посимвольная проверка нужна, только когда числа совпали. Этот приём переносится на поиск сразу многих образцов одной длины и на поиск маленькой картинки внутри большой. Именно там он особенно выгоден.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

На LeetCode

Задачи, где сравнивают много подстрок одной длины, например ищут повторы или самый длинный повторяющийся кусок. Скользящий хеш обновляет каждое окно за O(1), а настоящее сравнение нужно только при равенстве хешей.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности