Где встречается
безопасность
Статьи
SRT
Алгоритм
Быстрая сортировка
Разбиение вокруг опорного: в среднем n log n на месте, в худшем n² — и как от худшего защищаются.
O(n log n)
2 задачи
SRT
Алгоритм
Перемешивание Фишера — Йетса
Честная случайная перестановка за O(n): каждая из n! — с вероятностью 1/n!, и почему «обмен с любым» нечестен.
O(n)
2 задачи
DS
Структура данных
Хеш-таблица
Поиск, вставка и удаление по ключу в среднем за O(1): ключ превращается в номер ячейки массива.
O(1) в среднем
2 задачи
DS
Структура данных
Фильтр Блума
Отвечает «точно нет» или «возможно, да» о членстве в множестве, тратя около 10 бит на элемент.
O(k)
2 задачи
STR
Алгоритм
Наивный поиск подстроки
Образец прикладывают к каждой позиции текста: n · m сравнений в худшем случае, около n — на обычном тексте.
O(n · m)
2 задачи
STR
Приём
Полиномиальный хеш
Хеш любого куска строки за O(1) из хешей начал: сравнение подстрок, окна, общие начала — с оценкой вероятности ошибки.
O(n) подготовка, O(1) хеш куска
2 задачи
STR
Алгоритм
Алгоритм Ахо — Корасик
Все вхождения тысяч слов за один проход: бор из слов плюс ссылки отказа, как у префикс-функции.
O(n + Σ|wᵢ| + z)
1 задача
STR
Структура данных
BK-дерево
Все пароли в одной-двух правках от данного: неравенство треугольника отрезает целые ветви — и где оно перестаёт помогать.
O(N · глубина) на построение
1 задача
DP
Алгоритм
Задача о рюкзаке
Лучший набор вещей под ограничение по весу: таблица n × W и путь по ней назад.
O(n·W)
3 задачи
PAR
Приём
Встреча посередине
Перебрать две половины по отдельности и встретиться в отсортированной таблице: 2·2^(n/2) шагов вместо 2ⁿ.
O(2^(n/2) · n)
2 задачи
NUM
Алгоритм
Алгоритм Евклида
Наибольший общий делитель двух чисел за O(log n) делений с остатком.
O(log min(a, b))
2 задачи
NUM
Алгоритм
Быстрое возведение в степень
aⁿ за O(log n) умножений: квадраты по битам показателя.
O(log n) умножений
2 задачи
NUM
Алгоритм
Решето Эратосфена
Все простые до n за O(n log log n): вычёркиваем кратные каждого простого, начиная с его квадрата.
O(n log log n)
2 задачи
NUM
Алгоритм
Тест Миллера — Рабина
Простота числа за k возведений в степень: основания-свидетели ловят составное, лжецов не больше четверти.
O(k log³ n)
2 задачи
NUM
Алгоритм
ρ-алгоритм Полларда
Делитель p числа n за ~√p шагов: цикл по модулю неизвестного p, черепаха и заяц, НОД.
O(√p) умножений по модулю n
1 задача
NUM
Алгоритм
Длинная арифметика
Числа длиннее машинного слова: цифры по основанию 10⁹ или 2³⁰, переносы, столбик и дорогая печать.
сложение O(n), умножение и деление столбиком O(n²), печать в десятичной записи O(n²) или O(M(n) log n)
2 задачи
NUM
Алгоритм
Теоретико-числовое преобразование
БПФ без округлений: корень из единицы — 17 по модулю 3329, и так ваш браузер умножает многочлены постквантового ключа.
O(n log n)
1 задача
NUM
Алгоритм
Генераторы псевдослучайных чисел
Откуда берутся «случайные» числа, почему плохой генератор видно по плоскостям и как его проверить.
O(1) на число
2 задачи
SYS
Структура данных
Дерево Меркла
Хеши хешей: отпечаток всего набора, поиск расхождений за несколько сравнений и доказательство из log n хешей.
O(n) на построение, O(log n) на доказательство и его проверку
2 задачи
Задачи
Часто рядом
классика 14 собеседования 10 в проде 10 теория чисел 8 олимпиады 8 разделяй и властвуй 4 случайность 4 массив 4 хеширование 4 поиск в тексте 4 базы данных 3 сортировка 2