DEV//UNIT

Бойер-Мур

Сравниваем справа налево, сдвигаем по таблице последнего символа — часто быстрее длины текста.

время O(n + m) в среднемпамять O(алфавит)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function boyerMoore(text: string, p: string): number[] {
2 // таблица плохого символа: крайний правый индекс буквы в образце
3 const bad = new Map<string, number>()
4 ;[...p].forEach((ch, i) => bad.set(ch, i))
5
6 const found: number[] = []
7 let i = 0
8 while (i + p.length <= text.length) {
9 let j = p.length - 1
10 while (j >= 0 && text[i + j] === p[j]) j-- // справа налево!
11 if (j < 0) {
12 found.push(i)
13 i++
14 } else {
15 // сдвиг по несовпавшей букве окна
16 const shift = Math.max(1, j - (bad.get(text[i + j]) ?? -1))
17 i += shift
18 }
19 }
20
21 return found
22}

Проблема

Сравниваем справа налево, сдвигаем по таблице последнего символа — часто быстрее длины текста.

Что вы видите

Окно смотрит последней буквой; несовпавший символ говорит, насколько прыгать.

Как это работает

Эвристика плохого символа: если буква окна отсутствует в образце — сдвиг на всю длину образца. На больших алфавитах Бойер-Мур читает малую часть текста.

Пошаговый разбор

  1. 01

    Справа

    Сравнение с последней буквы.

  2. 02

    Таблица

    Где каждая буква в образце.

  3. 03

    Прыжок

    Сдвиг по несовпавшей букве.

Complexity и ограничения

time
O(n + m) в среднем
space
O(алфавит)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

grep

Реализация в GNU grep.

Антивирусы

Сканирование файлов по сигнатурам.

Редакторы

Search в больших файлах.

Связанные алгоритмы

Shorts

«Поиск, который читает текст через слово»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Поиск, который читает текст через слово
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/boyer-moore