DEV//UNIT

Ахо-Корасик

Много образцов одним проходом: автомат из Trie + fail-ссылок.

время O(n + m + вхождения)память O(образцы)уровень: продвинутый
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function ahoCorasick(text: string, patterns: string[]): Array<[string, number]> {
2 // 1. Trie из образцов; 2. fail-ссылки BFS; 3. один проход по тексту
3 const root = buildTrie(patterns)
4 linkFails(root)
5
6 const hits: Array<[string, number]> = []
7 let node = root
8 for (let i = 0; i < text.length; i++) {
9 while (node !== root && !node.children.has(text[i]!)) node = node.fail!
10 node = node.children.get(text[i]!) ?? root
11 for (const word of output(node)) {
12 hits.push([word, i - word.length + 1])
13 }
14 }
15
16 return hits
17}

Проблема

Много образцов одним проходом: автомат из Trie + fail-ссылок.

Что вы видите

Дерево образцов с пунктирными fail-переходами: буква не подошла — прыжок по fail, текст не откатывается.

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

Строим Trie всех образцов, BFS-ом прокидываем fail-ссылки (самый длинный суффикс, являющийся префиксом другого образца). Сканируем текст по одному символу; вхождения собираем по fail-цепочкам.

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

  1. 01

    Trie

    Все образцы одним деревом.

  2. 02

    Fail-ссылки

    Суффикс = чужой префикс.

  3. 03

    Сканирование

    Буква за буквой, без откатов.

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

time
O(n + m + вхождения)
space
O(образцы)

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

Edge cases

  • Пустой вход

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

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

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

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

IDS

Мульти-сигнатурный анализ трафика.

Цензура

Фильтры слов в чатах.

Биоинформатика

Поиск наборов последовательностей в ДНК.

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

Shorts

«1000 образцов — один проход по тексту»

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

Shorts 9:16

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

1000 образцов — один проход по тексту
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/aho-corasick