Все темы
127

KMP: поиск без перечитывания текста

Tier 1Закрыто

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

1. Задача

У простого поиска из шага 126 одна слабость. После несовпадения он сдвигает паттерн (образец) на одну позицию вправо и снова сравнивает символы текста, которые уже видел. Из-за этого он стоит O(n·m). KMP (алгоритм Кнута-Морриса-Пратта) устраняет именно это. Он идёт по тексту один раз, слева направо, и никогда не возвращается назад. Для этого ему нужна маленькая таблица. Её строят по одному паттерну ещё до поиска, и она говорит, куда передвинуться в паттерне при несовпадении. Итог O(n + m): линейно по длине текста плюс по длине паттерна.

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

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

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

На LeetCode

Задачи про префиксы строки, которые одновременно её суффиксы, и поиск, который должен уложиться в O(n + m) на длинных строках. Таблица LPS отвечает на оба вопроса, а поиск никогда не двигается по тексту назад.

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