Найпопулярніші алгоритми
Добірка алгоритмів, які покривають левову частку задач на контестах. Якщо не знаєш, з чого почати розв'язок — переглянь колонку «Коли застосовувати»: часто сама умова задачі підказує інструмент.
Основи
| Алгоритм | Складність | Коли застосовувати |
|---|---|---|
| Бінарний пошук | Відсортований масив або монотонний предикат («якщо відповідь підходить, то і все більше за підходить») — половина задач типу «знайди мінімальне/максимальне » | |
| Бінарне піднесення до степеня | Великі степені за модулем (), швидке множення матриць, -те число Фібоначчі | |
| Алгоритм Евкліда | НСД/НСК двох чисел; розширена версія — діофантові рівняння й обернений елемент за модулем | |
| Решето Ератосфена | Усі прості числа до , найменші прості дільники, передобчислення для факторизації | |
| Тернарний пошук | Максимум/мінімум унімодальної функції (спершу зростає, потім спадає) |
Структури даних
| Алгоритм | Складність | Коли застосовувати |
|---|---|---|
| Дерево відрізків | на запит | Суми/мінімуми/максимуми на відрізку з оновленнями елементів; найуніверсальніша структура — якщо сумніваєшся, бери її |
| Дерево Фенвіка | на запит | Префіксні суми з оновленнями — простіше й швидше за дерево відрізків, коли операція оборотна (сума, XOR) |
| СНМ | ~ на запит | Динамічна зв'язність: «чи в одній компоненті та ?» після серії об'єднань; основа алгоритму Крускала |
| Розріджена таблиця | на запит | Мінімум/максимум/НСД на відрізку без оновлень — передобчислив раз, відповідаєш миттєво |
Графи
| Алгоритм | Складність | Коли застосовувати |
|---|---|---|
| BFS | Найкоротші шляхи в незваженому графі; «мінімальна кількість кроків» у сітках і головоломках | |
| DFS | Компоненти зв'язності, пошук циклів, топологічне сортування, часи входу/виходу | |
| Дейкстра | Найкоротші шляхи з однієї вершини, ваги невід'ємні (версія з купою для розріджених графів) | |
| Беллман-Форд | Найкоротші шляхи з від'ємними вагами; детекція від'ємних циклів | |
| Флойд-Воршелл | Найкоротші шляхи між усіма парами, коли — три вкладені цикли і готово | |
| Топологічне сортування | Порядок виконання із залежностями (DAG): збірка проєкту, переліки курсів, ДП на графі | |
| Крускал / Прим | Мінімальне кістякове дерево: з'єднати все мінімальною сумарною вартістю | |
| LCA через binary lifting | на запит | Найнижчий спільний предок у дереві; відстані між вершинами дерева, підйом на предків |
| Потік Дініца | Максимальний потік / мінімальний розріз; задачі про пропускні здатності й розбиття на дві множини | |
| Алгоритм Куна | Максимальне парування у дводольному графі: «розподіли працівників по задачах» |
Динамічне програмування
| Алгоритм | Складність | Коли застосовувати |
|---|---|---|
| Рюкзак | Вибір підмножини предметів з обмеженням на сумарну вагу/вартість — і десятки замаскованих варіацій | |
| НЗП | Найдовша зростаюча підпослідовність; задачі про «вкладені» об'єкти, мінімум ланцюгів покриття | |
| ДП за профілем | Замощення/розфарбування вузької сітки (): стан — бітова маска стовпця |
Рядки
| Алгоритм | Складність | Коли застосовувати |
|---|---|---|
| Префікс-функція (КМП) | Пошук підрядка в рядку, періоди й бордери рядка, підрахунок входжень | |
| Z-функція | Ті самі задачі, що й КМП, але часто простіша в міркуваннях: — довжина збігу з префіксом | |
| Хешування рядків | порівняння | Порівняння будь-яких підрядків за після передобчислення; кількість різних підрядків; коли суфіксні структури — overkill |
| Ахо-Корасік | Пошук багатьох патернів у тексті одночасно (словник у боро + суфіксні посилання) | |
| Суфіксний масив | Лексикографічні задачі на суфіксах: -тий підрядок, найдовший спільний підрядок, кількість різних підрядків |
Геометрія та інше
| Алгоритм | Складність | Коли застосовувати |
|---|---|---|
| Опукла оболонка | Мінімальний опуклий многокутник навколо точок; перший крок багатьох геометричних задач | |
| Замітаюча пряма | «Чи перетинається хоч одна пара відрізків» та інші задачі, де події обробляються зліва направо | |
| Бінарне сортування пар / СНМ-офлайн | Офлайн-відповіді на запити LCA, коли всі запити відомі заздалегідь | |
| Числа Каталана | Підрахунок: правильні дужкові послідовності, бінарні дерева, тріангуляції — якщо відповідь 1, 2, 5, 14, 42 — це вони | |
| Біноміальні коефіцієнти за модулем | після | Будь-який комбінаторний підрахунок за модулем — передобчисли факторіали й обернені |
Не знайшов потрібного? Повний каталог зі ~160 статей — у бічній панелі, а маршрут для новачків — на головній.