Что решает
поиск в тексте
Статьи
DS
Структура данных
Бор (префиксное дерево)
Слова с общим началом идут общим путём: поиск слова и всех продолжений — за длину запроса.
O(L) на вставку и поиск слова длины L
2 задачи
STR
Алгоритм
Наивный поиск подстроки
Образец прикладывают к каждой позиции текста: n · m сравнений в худшем случае, около n — на обычном тексте.
O(n · m)
2 задачи
STR
Алгоритм
Префикс-функция и КМП
Все вхождения образца за O(n + m) без шагов назад по тексту; префикс-функция находит и период строки.
O(n + m)
2 задачи
STR
Алгоритм
Z-функция
Сколько букв от каждой позиции совпадает с началом строки — за O(n); поиск, периоды и повторы подряд.
O(n)
2 задачи
STR
Приём
Полиномиальный хеш
Хеш любого куска строки за O(1) из хешей начал: сравнение подстрок, окна, общие начала — с оценкой вероятности ошибки.
O(n) подготовка, O(1) хеш куска
2 задачи
STR
Алгоритм
Алгоритм Рабина — Карпа
Хеш окна катится по тексту, буквы сравниваются только при совпадении хеша; тысячи образцов — за один проход.
O(n + m) в среднем
1 задача
STR
Алгоритм
Алгоритм Ахо — Корасик
Все вхождения тысяч слов за один проход: бор из слов плюс ссылки отказа, как у префикс-функции.
O(n + Σ|wᵢ| + z)
1 задача
STR
Алгоритм
Бойер — Мур
Сравнивает справа налево и перепрыгивает буквы: на длинных образцах читает лишь малую часть текста.
O(n + m)
2 задачи
STR
Структура данных
Суффиксный массив
Отсортированные хвосты текста: поиск двоичным поиском, повторы и число разных кусков по соседям.
O(n log n)
2 задачи
STR
Структура данных
Суффиксный автомат
Все подстроки текста в графе из меньше чем 2n состояний: склейка фразы из кусков «Онегина» за один проход.
O(n)
2 задачи
STR
Алгоритм
Преобразование Барроуза — Уилера
Перестановка, которая сжимает текст и служит по нему указателем: обратный поиск, LF и выравнивание ридов.
O(m) на подсчёт образца, O(m + k·s) на k мест
2 задачи
STR
Алгоритм
Алгоритм Манакера
Все палиндромы строки за O(n): зеркало внутри самого правого палиндрома; фаги и палиндромы в их ДНК.
O(n)
2 задачи
STR
Структура данных
BK-дерево
Все пароли в одной-двух правках от данного: неравенство треугольника отрезает целые ветви — и где оно перестаёт помогать.
O(N · глубина) на построение
1 задача
Задачи
Скобки в рукописи
Звено повтора
Одинаковые куски
Праймер без двойников
Сайты на кольце
Сайты с буквой N
Сколько останется схем
Сколько прочтёт Хорспул
ДНК без участка рестрикции
Палиндром из букв
Палиндромы в ДНК
Самый длинный общий кусок
Склейка
Суффиксы генома по разрядам
Счёт по перестановке
Счётчик сравнений
Таблица хорошего суффикса
Эхо
Где начинается кольцо
Кольцевой геном
Куда легли риды
Сколько раз каждое слово
Фраза k раз
Фраза дважды
Часто рядом
классика 8 биоинформатика 7 олимпиады 7 в проде 6 редакторы текста 4 собеседования 4 безопасность 4 предподсчёт 4 сжатие 3 поисковики 3 амортизация 3 потоковая обработка 3