На чём держится
граф
Статьи
DS
Структура данных
Хеширование кукушки
Два гнезда на ключ, поиск — не больше двух проб; вставка выселяет жильцов. Работает до заполнения 1/2, с корзинами — до 98 %.
поиск — не больше d проб в худшем; вставка — O(1) в среднем ниже порога
1 задача
GRA
Приём
Как хранить граф
Матрица, списки, массив рёбер и CSR: память, скорость и какие вопросы каждая запись задаёт дёшево.
соседи вершины: O(n) у матрицы, O(deg) у списков и CSR; есть ли ребро: O(1) у матрицы, O(deg) у списков
2 задачи
GRA
Алгоритм
Поиск в ширину
Обходит граф слоями и находит пути с наименьшим числом рёбер за O(V + E).
O(V + E)
2 задачи
GRA
Алгоритм
Поиск в глубину
Идёт вглубь, отмечает вход и выход каждой вершины и по ним находит циклы за O(V + E).
O(V + E)
2 задачи
GRA
Алгоритм
Топологическая сортировка
Выстраивает вершины графа без циклов так, чтобы все рёбра смотрели вперёд, за O(V + E).
O(V + E)
2 задачи
GRA
Алгоритм
Компоненты сильной связности
Группы вершин, где из любой можно дойти до любой: Тарьян за один обход, Косараю за два, O(V + E).
O(V + E)
2 задачи
GRA
Алгоритм
2-SAT
Условия «a или b»: граф следствий, компоненты сильной связности и ответ за O(n + m); на настоящих нотах.
O(n + m)
1 задача
GRA
Алгоритм
Мосты и точки сочленения
Улицы и перекрёстки, без которых граф распадается: один поиск в глубину с числами tin и low, O(V + E).
O(V + E)
2 задачи
GRA
Алгоритм
Алгоритм Дейкстры
Кратчайшие пути от одной вершины во взвешенном графе без отрицательных рёбер.
O((V + E) log V)
3 задачи
GRA
Алгоритм
A*
Дейкстра с подсказкой «сколько ещё до финиша»: волна тянется к цели, а путь остаётся кратчайшим.
O((V + E) log V)
2 задачи
GRA
Алгоритм
Двунаправленный поиск
Две волны Дейкстры навстречу друг другу: где остановиться, сколько экономится и как подружить с A*.
O((V + E) log V)
2 задачи
GRA
Алгоритм
Алгоритм Беллмана — Форда
Кратчайшие пути с отрицательными рёбрами и поиск отрицательного цикла: V раундов по всем рёбрам.
O(V · E)
2 задачи
GRA
Алгоритм
Алгоритм Флойда — Уоршелла
Кратчайшие пути между всеми парами вершин за O(n³): динамика по разрешённым пересадкам.
O(n³)
2 задачи
GRA
Алгоритм
Иерархии сжатия
Предподсчёт навигаторов: сжимаем неважные перекрёстки в ярлыки и ищем путь двумя волнами вверх.
O((V + E′) log V)
1 задача
GRA
Алгоритм
Минимальное остовное дерево
Самая дешёвая сеть, связывающая все вершины: Борувка, Краскал и Прим — три способа применить одну лемму.
O(E log V)
2 задачи
GRA
Алгоритм
Максимальный поток
Наибольший поток из истока в сток и узкое место сети: Форд — Фалкерсон, Эдмондс — Карп, теорема о разрезе.
O(V E²)
2 задачи
GRA
Алгоритм
Алгоритм Диница
Наибольший поток фазами: слоистая сеть, блокирующий поток, указатели; O(V²E), а в единичных сетях O(E√V).
O(V² E)
2 задачи
GRA
Алгоритм
Минимальный разрез
Самая дешёвая граница в графе: вырезает предмет на фотографии и находит слабое место сети.
O(m n² |C|)
2 задачи
GRA
Алгоритм
Раскраска графа
Соседям — разные цвета: жадный способ, порядок «наименьший последним», DSatur и точный перебор на картах и расписаниях.
O(V + E) — жадно в данном порядке и «наименьший последним»; O((V + E) log V) — DSatur с кучей
2 задачи
GRA
Алгоритм
Паросочетания в двудольном графе
Наибольшее число пар в двудольном графе: Кун, Хопкрофт — Карп, теоремы Кёнига и Холла.
O(E √V)
2 задачи
GRA
Алгоритм
Поток наименьшей стоимости
Поток с наименьшей суммарной ценой: круги отрицательной стоимости, кратчайшие пути с потенциалами, транспортная задача 1930 года.
O(F · E log V)
2 задачи
GRA
Алгоритм
Эйлеров путь
Пройти каждое ребро ровно раз: правило нечётных вершин и алгоритм Хирхольцера за O(E).
O(V + E)
3 задачи
GRA
Алгоритм
Наименьший общий предок
Общий предок двух вершин дерева: двоичный подъём за O(log n), обход Эйлера за O(1), Тарьян офлайн.
O(log n) на запрос
2 задачи
GRA
Алгоритм
Тяжёлые пути
Запросы на путях дерева: тяжёлые пути режут любой путь на O(log n) отрезков массива под деревом отрезков.
O(log² n) на запрос
1 задача
GRA
Алгоритм
Центроидная декомпозиция
Делим дерево центроидами: log₂ n уровней, и ближайшая отмеченная вершина — за O(log n) после каждой отметки.
O(log n) на отметку и на вопрос
1 задача
GRA
Алгоритм
Задача коммивояжёра
Кратчайший объезд всех точек: ближайший сосед, 2-opt со списками соседей, Or-opt, оценка Хелда — Карпа.
NP-трудна; точно O(2ⁿ · n²)
2 задачи
GRA
Алгоритм
PageRank
Важность страниц по ссылкам: случайный читатель, степенной метод и коэффициент затухания.
O((V + E) · log(1/ε) / log(1/d))
1 задача
STR
Алгоритм
Diff Майерса
Кратчайший сценарий удалений и вставок строк за O((N + M) · D): волны по числу правок. Так работает git diff.
O((N + M) · D)
1 задача
PAR
Приём
Ветви и границы
38 аэропортов, где из каждого прямой рейс в каждый: оценка раскраской сжимает перебор с миллиона узлов до 242.
экспоненциальное в худшем случае
1 задача
NUM
Алгоритм
Китайская теорема об остатках
Число по остаткам от нескольких модулей: алгоритм Гарнера и точные вычисления по многим простым.
O(k²) операций с машинными числами
2 задачи
NUM
Алгоритм
Матрицы и рекуррентности
Степень матрицы: пути длины k в графе, линейные рекуррентности, матрица переноса и цепи Маркова.
O(m³ log k) для A^k размера m × m
2 задачи
NUM
Алгоритм
Метод Гаусса
Линейная система исключением: ведущий элемент, LU, обусловленность, разреженные матрицы и заполнение.
O(n³): около n³/3 умножений на прямой ход
2 задачи
SYS
Алгоритм
Часы Лэмпорта и векторные часы
Логические часы: одно число Лэмпорта согласовано с «случилось раньше», вектор по процессам отличает «раньше» от «параллельно».
O(1) на событие у Лэмпорта, O(n) у векторных
2 задачи
RND
Приём
Случайные блуждания
Шаг наугад на каждом перекрёстке: √t, время до цели, «кто первый» и 2-SAT случайным блужданием.
O(1) на шаг
2 задачи
Задачи
Есть ли такой участок
Векторные отметки
Дуплеты Кэрролла
Журнал сравнений
Коробки в архиве
Маршруты без шагов назад
Мозаика из доминошек
Ночные перекрытия
Разъезд со стадиона
Сопротивление цепи
Цикл импортов
Что читать дальше
Все остовные деревья
Выгодный круг обменов
Гнёзда кукушки
Две руки
Две ячейки
Забытый код
Заявки и мастера
Каналы без помех
Коды городов
Кольцо из кусков
Лавина повторов
Ленивый турист
Маршруты без общих перекрёстков
Недостающие улицы
Перекрытия улиц
Перекрёсток на ремонте
Пересадки
План перевозок
Слабое место сети
Треугольники импортов
Цепочки рейсов
Частоты для вышек
Что прочитать
Дни экзаменов
Запасной маршрут
Кратчайшие маршруты без общих пересадок
Описанный родственник
Паводок
Подписи сёл на карте
Прямые рейсы
Снегоуборщик
Таблица между станциями
Часто рядом
классика 29 олимпиады 14 карты и навигация 13 собеседования 13 взвешенный граф 10 кратчайший путь 9 связность 7 сети 7 матрица 6 обход 5 куча 5 эвристика 5