Методы поиска корней и минимизации численной функции
- Бинарный поиск для корней непрерывной функции.
- Поиск корней многочлена за O(N2logMax).
- Сведение задачи поиска корней к минимизации, а минимизации к максимизации и обратно.
- Троичный (тернарный) поиск для нахождения локального минимума.
- Усовершенствованный поиск #1 (делим всегда на k частей, сужаем область видимости)
- Усовершенствованный поиск #2 (делим на N частей, на каждой запускаем троичный поиск)
- Вложенные троичные поиски для минимизации многомерной функции (пример: найти "центр" выпуклого многоугольника)
- Градиентный спуск в
R1
- Градиентный спуск в
Rn
Метод отжига
- Процесс оптимизации. p = exp-(F1-F0)/T.
- Чем это лучше "Усовершенствованных поисков"? Решает многомерную задачу.
- Выбор случайной точки: радиус шарика, в котором выбирается точка, тоже сходится к 0.
- Собственно алгоритм.
- Пример отжига нестандартных пространств: поиск минимального контролирующего множества.
Теория чисел
- Решето Эратосфена за O(NloglogN).
- Тест Ферма проверки на простоту.
- Тест Миллера-Рабина проверки на простоту.
- Эвристика Полларда для факторизации числа за O(N1/4).
Строки. Хэши. Хэш-таблицы.
- Полиномиальный хэш. Hash(s) - псевдослучайное число в диапозоне от 0 до 264 - 1.
- Коллизии, обработка коллизий, вероятность возникновения коллизий.
- Сравнение строк на равенство за O(1).
- Задача про число различных подстрок строки.
- Полиномиальный хэш применим к произвольному объекту. Пример: отсечение в переборе с помощью set <long long>.
- Хэш-таблица со списками. Оценка на время работы
- Хэш-таблица с открытой адресацией. Оценка на время работы
- Удаление элементов из хэш-таблицы.
- Примеры задач на хэши и с хэш-таблицей
- Наибольшая общая подстрока.
- Поиск словарных слов в тексте.
Строки. Суффиксный массив.
- Определение. Построение в лоб за O(N2logN). Реальное время работы уже O(NlogN).
- Сравнение строк на больше и меньше за O(logN) хэшами.
- Построение суффиксного массива за O(Nlog2N) в худшем случае.
- Построение LCP для суффиксного массива за O(NlogN).
- Решение задачи поиска подстроки в тексте с помощью суф. массива за предподсчет O(|Text|) и запрос за O(|S|*log|Text|).
Строки. Бор. Сжатый Бор.
- Бор строк. Суффиксное дерево строк. Определения.
- Хранения бора. Массив, список, хэш-таблица.
- Решение задачи про подстроки.
- Решение задачи про поиск словарных слов в тексте.
- Сжатый бор. Сжатое суффиксное дерево. Память = O(NE), где N - число строк, E - размер алфавита.
- У сжатого бора необычная малая константа. Решение задачи про подстроки для Len = 20 000.
Доведение старых идей до ума:
- Потоки
- Диница + масштабирование за O(VElogMax)
- Хопкрофт-Карп
- MinCost Потоки
- Формулировки прикладных задач: Задача о назначениях. Транспортная задача.
- Нахождение паросочетания миимального веса в двудольном графе с помощбю mincost потока за O(V3).
- Квадро-дерево
- Решеаем задачу о площади пересечения/объединения кругов приближенно.
- Еще одна задача: найти не покрытую точку.
- Покрытие дерева массивами (деревьями отрезков)