Кнут-Моррис-Пратт (KMP)
Префикс-функция запоминает, где образец совпадает сам с собой, — текст сканируется без откатов.
1function buildPrefixFunction(p: string): number[] {2 const pi = [0]3 let k = 04 5 for (let i = 1; i < p.length; i++) {6 while (k > 0 && p[i] !== p[k]) k = pi[k - 1]!7 if (p[i] === p[k]) k++8 pi[i] = k9 }10 11 return pi12}13 14function kmpSearch(text: string, p: string): number[] {15 const pi = buildPrefixFunction(p)16 const found: number[] = []17 let k = 018 19 for (let i = 0; i < text.length; i++) {20 while (k > 0 && text[i] !== p[k]) k = pi[k - 1]!21 if (text[i] === p[k]) k++22 if (k === p.length) {23 found.push(i - p.length + 1)24 k = pi[k - 1]!25 }26 }27 28 return found29}Проблема
Префикс-функция запоминает, где образец совпадает сам с собой, — текст сканируется без откатов.
Что вы видите
Сначала π-массив образца: длины совпадающих префикс/суффикс. Затем по тексту: несовпадение прыгает по π, а не в начало.
Как это работает
Наивный поиск откатывает позицию в тексте; KMP — никогда. π[k] говорит: после несовпадения образец уже совпал первыми π символами — продолжай с них. Ровно один проход, O(n + m).
Пошаговый разбор
- 01
π-функция
Где образец совпадает сам с собой.
- 02
Сканирование
Несовпадение → прыжок по π.
- 03
Один проход
i по тексту только вперёд.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Ctrl+F
Быстрый поиск в редакторах и логах.
Биоинформатика
Поиск мотивов в ДНК-последовательностях.
IDS/антивирусы
Сканирование трафика по сигнатурам без откатов.
Связанные алгоритмы
«Поиск, который никогда не откатывается»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.