Ахо-Корасик
Много образцов одним проходом: автомат из Trie + fail-ссылок.
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 = root8 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]!) ?? root11 for (const word of output(node)) {12 hits.push([word, i - word.length + 1])13 }14 }15 16 return hits17}Проблема
Много образцов одним проходом: автомат из Trie + fail-ссылок.
Что вы видите
Дерево образцов с пунктирными fail-переходами: буква не подошла — прыжок по fail, текст не откатывается.
Как это работает
Строим Trie всех образцов, BFS-ом прокидываем fail-ссылки (самый длинный суффикс, являющийся префиксом другого образца). Сканируем текст по одному символу; вхождения собираем по fail-цепочкам.
Пошаговый разбор
- 01
Trie
Все образцы одним деревом.
- 02
Fail-ссылки
Суффикс = чужой префикс.
- 03
Сканирование
Буква за буквой, без откатов.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
IDS
Мульти-сигнатурный анализ трафика.
Цензура
Фильтры слов в чатах.
Биоинформатика
Поиск наборов последовательностей в ДНК.
Связанные алгоритмы
«1000 образцов — один проход по тексту»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.