- Скидки и обозначения
- Нужно сдать 19 задач. Это обязательно. Это ДОПУСК.
- В некоторых билетах есть пометка "bonus:". Все, что следует после нее, НЕ нужно рассказывать тем, кто сдал >= 25 задач.
- Запись [O(n), O(logn)] означает, что время, требуемое на предподсчет, = O(n), после предподсчета на 1 запрос мы умеем отвечать за O(logn).
- Графы - база
- dfs (время работы, реализация, док-во корректности)
- bfs (время работы, реализация, док-во корректности)
- ford-bellman, реализация тремя циклами, реализация с break-ом, реализация с очередью (время работы, реализация, bonus: док-во корректности последней реализации)
- floyd (время работы, реализация, bonus: док-во корректности)
- поиск отрицательного цикла (любой из двух вариантов - или через Флойда, или через Форда-Беллмана, bonus: док-во корректности)
- MST (Прим, Краскал) (время работы, bonus: док-во корректности)
- Игры
- Игры на ацикличных графах = динамическое программирование. O(E). LOSE/WIN, максимизировать/минимизировать число ходов.
- Ретроанализ, игры на графах с циклами. O(E). LOSE/WIN/DRAW, максимизировать/минимизировать число ходов.
- Функция Гранди. Способ подсчета за O(E). Применение. Доказательство LOSE/WIN. bonus: Доказательство XOR-а.
- Функция Смита. Способ подсчета за O(EsqrtE). Доказательство LOSE/WIN/DRAW. bonus: Доказательство XOR-а.
- Перебор
- Метод ветвей и границ. Отсечение по ответу. Меморизация состояний.
- Меморизация: проблемы в случае решения задачи "поиск кратчайшего по весу пути". Решение проблемы.
- Связь перебора и жадности. Что лушче? Сортировка ребер в переборе. Выбор первых K ребер. Вещественное K. Зачем это нужно (идея с первыми K ребрами)?
- Iterative Deepening. Связь dfs-а и bfs-а. Почему dfs + Iterative Deepening работает не дольше bfs-а?
- Автоматический подбор параметров. Iterative Increasing K в билете выше "Выбор первых K ребер".
- Приближенные методы
- Локальные оптимизации. Оптимизация произвольной функции f : AnySpace → R. Оптимизация для задачи коммивояжера.
- Отжиг. Сам процесс. Отличие от локальных оптимизаций. На примере f : R → R. bonus: На примере задачи "ограничить на плоскости max число точек веревкой длины L".
- bonus: Генетический алгоритм (мутации, скрещивание, отличие от Отжига и Локальных оптимизаций)
- Вероятностыне алгоритмы
- Las-Vegas (про самое часто встречающееся число, про подобные прямоугольники, про арифметическую прогрессию + bonus: во всех трех задач оценка и док-во времени работы)
- Monte-Karlo (собственно метод, bonus: оценка относительной и абсолютной погрешности)
- Каргер-Штейн (собственно метод, оценка времени работы O(N4*log), улучшение, bonus: оценка времени работы O(N2*log2))
- Коммивояжер
- Док-во невозможности r-приближения задачи коммивояжера в графе, в котором не выполняется неравенство треугольника при P != NP (сведение к задаче про гамильтонов цикл)
- MST x 2, объянение, почему на практике погрешность меньше теор. оценок, bonus: MST x 3/2 (алгоритм Кристофилдса)
- Nearest (просто описание аллгоритма). bonus: док-во того, что Nearest не хуже построения MST Примом.
- Локальные оптимизации для Коммивояжера (собственно хотя бы 2 локальных оптимизации, док-во конечности процесса, поиск очередной оптимизации за O(N))
- Двудольные графы
- Паросочетание, контролирующее множество, независимое множество (определения, как соотносятся их размеры)
- Лемма о дополняющем пути (и алгоритм поиска паросочетания за O(VE), который из нее следует).
- Лемма Холла (лемма о девушках). Формулировка. bonus: Док-во.
- Алгоритм Куна (отличие от базого алгоритма, bonus: док-во).
- Алгоритм Хопкрофта-Карпа за O(EsqrtV), bonus: док-во времени работы
- Раскраска ребер двудольного графа в max Degee цветов.
- Покрытие ацикличного графа min числом цепей (сведение к паросочетанию в двудольном графе).
- Теорема Дилворта. Формулировка. bonus: Док-во неравенств в обе стороны.
- Раскраски
- Теорема Брукса (про вершины, формулировка, док-во)
- Теорема Визинга (про ребра, только формулировка)
- Алгоритм раскраски вершин планарного графа в 6 цветов.
- Потоки
- Поток, разрез (определение,)
- Теорема Форда-Фалкерсона (max F = min C)
- Алгоритм Эдмондса (поиск в ширину, bonus: док-во времени работы O(VE2))
- Алгоритм Масштабирования потока (bonus: док-во времени работы O(E2log))
- Алгоритм Диница (bonus: док-во времени работы O(VE2))
- Вершинные поток и разрез. Поток и разрез (реберные и вершинные) в неорграфе.
- MinCost поток. Отсутствие отрицательных циклов.
- Лемма о дополняющем пути для MinCost потока.
- Дейкстра с потенциалами.
- Задача о назначениях, транспортная задача (формулировки задач, сведение их к mincost потоку)
- [L,R] потоки (решение mincost потоком, решение обычным потоком)
- Алгоритм Штор-Вагнера (собственно алгоритм, док-во времени работы O(V3), BigBonus: док-во корректности)
- Декартовы деревья
- Дерево по явному ключу. Операции Split и Merge.
- Операции с деревом по явному ключу: Insert, Delete, K-th, Add(L, R), GetSum(L, R) (1) Выразить эти операции через Split и Merge (2) реализовать их независимо.
- Дерево по неявному ключу. Add(L, R), GetSum(L, R), Reverse(L, R), Insert(i), Delete(i) (что из этого умеет дерево отрезков, что нет?)
- Построение за O(N) дерева по неявному ключу
- RSQ, RMQ, Деревья отрезков
- RSQ: Неменяющийся массив [O(n), O(1)]
- RMQ: Неменяющийся массив [O(n), O(logn)], Sparse table [O(nlogn), O(1)]
- RSQ: Меняющийся массив, дерево Фенвика [O(n), O(logn)], собственно дерево, преимущество над деревом отрезков, bonus: док-во корректности
- RSQ, RMQ: Меняющийся массив, дерево отрезков [O(n), O(logn)], преимущество над деревом Фенвика.
- Прибавление и присваивание на отрезке (в дереве отрезков, время на 1 операцию = O(logn)).
- RSQ и RMQ на неменяющейся матрице [O(n2), O(1)] для RSQ и [O(n2log2n), O(1)] для RMQ.
- RSQ и RMQ на меняющейся матрице, 2D деревья отрезков и Фенвика [O(n2), O(log2n)].
- Квадродерево на матрице [O(n2), O(n)]. Преимущество над 2D деревом отрезков, bonus: док-во времени работы.
- 2D-запросы и деревья
- 2D дерево отрезков (дерево строится на N точках, [O(NlogN), O(log2N)]. Использует O(NlogN) памяти
- КД-дерево [O(NlogN), O(sqrtN)], использует O(N) памяти. Преимущество над 2D деревом отрезков (не память). bonus: Док-во времени работы.
- Дерево отрезков декартовых деревьев (на примере задачи "сколько чисел на отрезке [i,j] имеют величину от L до R").
- LCA, Функции на путях дерева
- Разбиение путия дерева через LCA на 2 вертикальных, Offline и Online задачи.
- Offline поиск LCA (алгоритм Тарьяна, O(n*), собственно алгоритм, рассказ про СНМ, bonus: док-во корректности работы)
- 2 метода Online поиска LCA (двоичный подъем [O(nlogn), O(logn)] и Эйлеров обход дерева [O(n), O(logn)] а также [O(nlogn), O(1)] с помощью SparseTable)
- Веса ребер дерева не меняются, RSQ и RMQ (RSQ = [O(n), O(1)] + LCA, RMQ = [O(n), O(logn)] + LCA).
- Веса ребер дерева меняется, RSQ за [O(n), O(logn)] (Эйлеров обход + фишечка)
- Покрытие дерева путями, сведение запроса на пути к 2D запросу. Решение задач RMQ и RSQ за [O(n), O(log2n)]
- Численные методы
- Бинарный поиск (поиск корней функции, поиск числа в массиве)
- Троичный поиск (связь с двоичным поиском и производной)
- Градиентный спуск, случайный поиск, метод Ньютона (в R, в Rn). Выбор направления, выбор расстояния.
- Усовершенствованные поиски для f : R → R (2 варианта, основная мысль = разделить отрезок на ~100 частей )
- Поиск вещественных корней многочлена. Время работы = O(N2log)
- Теория чисел
- Решето Эратосфена = O(NloglogN), описание алгоритма. bonus: док-во времени работы.
- Тест Ферма, тест Миллера-Рабина. O(logN). Док-во корректности отсечений.
- Эвристика Полларда. O(N1/4). bonus: Док-во времени работы.
- Cтроки
- Полиномиальный хэш от строки. А также подсчет хэша от подстроки, как суммы на отрезке.
- Хэштаблицы со списками и с открытой адресацией. Добавление. Удаление. Поиск.
- bonus: Коллизии у полиномиальных хэшей и хэш-таблицы. Оценка вероятности коллизий сверху.
- Задачи: Поиск слов в тексте, наибольшая общая подстрока, наибольший подпалиндром (все они решаются хэшами за O(NlogN)).
- Суффиксный массив хэшами за O(Nlog2N), сравнение хэшами строк на больше меньше. LCP за O(NlogN).
- Суффиксный массив цифровой сортировкой за O(N2)
- LCP для суффиксного массива за O(N). Алгоритм Касаи для суффиксов. bonus: Случай циклических сдвигов.
- Бор. Суф.дерево. Способы хранения бора (массив, список, дерево поиска, хэш-таблица, общая хэш-таблица для всех вершин).
- Сжатый бор, сжатое суффиксное дерево, получение из суф.массива с LCP за O(N)
- Алгоритм Укконена за O(N). Сам алгоритм. bonus: док-во времени работы.
- Алгоритм Ахо-Корасика. Сам алгоритм. (1) построение полного автомата next[vertex, char] (2) версия с линейной памятью, bonus: док-во времени работы в (2).
- Паросочетания в произвольном графе
- Лемма Татта-Берджа. Формулировка. bonus:. Док-во.
- Теорема о дополняющем чередующемся пути. bonus:. Док-во.
- Алгоритм Эдмондса (сжатие соцветий). Реализация за O(V4). bonus: док-во корректности работы.
- Рандомизированный алгоритм (на основе алгоритма построения паросочетания в двудольном графе)
- Матроиды
- Определение. Алгоритм Радо-Эдмондса. bonus: Док-во.
- Графовый матроид (определение, док-во того, что это матроид, алгоритм, который из этого следует)
- Трансверсальный матроид (паросочетания) (определение, док-во того, что это матроид, алгоритм, который из этого следует)
- Векторный матроид (определение, док-во того, что это матроид, алгоритм, который из этого следует)
- Планарные графы
- Теорема Эйлера
- Укладка в R3, на сфере
- Док-во того, что K3,3 и K5 не планарны. Теорема Куратовского (только формулировка)
- Алгоритм Демукрона. Собственно алгоритм, bonus: разбор всех крайних случаев и док-во времени работы O(N2).
- Алгоритм разбиение графа на грани за O(E). Выделение внешних граней (смотрим на знак площади грани).
- 2-SAT
- Формулировка задач 2-SAT, 3-SAT.
- Жадное решение за O(VE), bonus: док-во.
- Решение за O(E). Док-во времени работы.
- Нейрон
- Задача классификации. Что такое нейрон. Разделение "хорошего" и "плохого" на >= 1 и <= t.
- Обучение Нейрона с помощью Л.П (если все неравенства разрешими, если не все разрешимы - 2 метода = наращивать, или удалять лишние)
- Обучение Нейрона с помощью Градиентного спуска.
- Решение задачи "Кто автор этого стиха? Пушкин или Лермонтов?" (изменяем пространство объектов)
- Simplex метод. bonus: Реализация Simplex метода.