Persistent Data Structures
0) Деревья = O(1), O(logN)
1) Массивы = O(logN), O(logN)
*2) Задачи на: Stack, Queue, Heap, Treap, SNM
*3) Garbage Collection (online = число ссылок на объект, offline = чистка памяти)
Потоки + MinCost потоки + Отрицательные циклы в графах
0) Поток за O(|f|*E)
1) Масштабирование за O(E^2)
2) Алгоритм Диница. Поиск паросочетание за O(EsqrtV) и потока за O(VElogMax).
3) MinCost за O(|f|*FordBellman)
4) MinCost за O(|f|*Dijkstra + FordBellman)
5) Поиск отрицательного цикла за O(VE)
*6) Поиск отрицательного цикла min среднего веса за O(VElogMax) и O(VE)
*7) Min циркуляция за O((VE)^2)
8) Венгерка за O(V^3). Венгерка и поток - почти одно и то же.
Корневая Эвристика (SQRT-decomposition)
*1) Split поможет сделать код проще
*2) Offline балансирование поможет сделать код еще проще
3) Начинать часто можно с одного отрезка. Когда нужно начинать с O(sqrtN) отрезков?
4) Куча задачек на эту тему. Не все, что решается решается корневой эвристикой решается деревом отрезков!
Квадродеревья
1) Аналогия с деревом отрезков
2) Делим на 2 части, получаем оценку O(sqrtN) для прямоугольных запросов
3) Приближенные решения геометрических задач
4) Задачи, в которых квадродерево в худшем случае работает за O(N)
*5) Задача "отвечать online на запрос сколько из N точек лежат в полуплоскости". Решение квадродеревом за O(N^{1/2+eps})
*Метод "а спроецирем-ка все на прямую"
*1) Задача H с зимнего ЧУ от Коли Дурова
*2) Задача про поиск ближайших точек (даны N точек, для каждой нужно найти ближайшую)
*3) Когда этот метод работает, когда он НЕ работает
Хэши
1) Полиномиальный хэш от любого объекта
2) Хэш таблица списками и открытой адресация (разница)
3) Отсутствие коллизий. Задача про приведения, где с этим проблемы.
*4) Экономия памяти (я умею хранить всего 8 бит (1 байт) на каждый объект, т.е. даже сам хэш хранить не нужно)
*5) Вещественный хэш - реальность (даны вещественные числа, посчитанные с погрешностью, нужно их захэшировать)
Геометрия
1) Диаграмма Вороного --- полезная штука, просто пишется за O(N^2)
2) Сканирующая прямая и куча задач на эту тему (например, Диаграмма Вороного за O(NlogN))
3) Сканирующий луч
4) Метод "отсортируем по углу"
5) Применения set (TreeSet) с правильным компаратором.
Фурье
1) Собственно алгоритм
2) Минизация числа умножений
3) Нерекурсивная реализация
*4) Обратное FFT = Прямой FFT + reverse(a+1,a+n)
*5) Два прямых FFT в одном (оптимайз по времени в 2 раза)
*6) Зацикленная свертка (оптимайз по времени еще в 2 раза)
Перебор
Тут у меня очень много слов и тем. И задача.
Метод отжига, Локальные оптимизации, Генетика
Тут у меня есть некоторые знания и наработки, но предоставить толковую лекцию и подборку задач я не готов. Подготовлюсь.