|
Кружок обучения мастерству программирования при СПбГУ |
Лекции группы A0 - Лекция 09 - Рандом + Геометрия (Сергей Копелиович)
Note: Звездочкой отмечены темы, на которые на лекции времени не хватило.
Краткий план лекции "Рандом + Геометрия"
- Пересечение полуплоскостей (за O(NlogN) и более простые методы)
- Линейный рандом (задачи, решающиеся за линейное время с помощью слова random)
- 3D Convex Hull (за O(NlogN) и более простые методы)
Полный план лекции
- Пересечение полуплоскостей
- Простой метод за O(N^2).
- Метод со стэком за O(NlogN).
- Пересечение = последовательность индексов полуплоскостей
- Сортировка по углу + удаление одинаковых по углу
- 2 случая - бесконечное или конечное пересечение
- Собственно стэк, снятие со стэка только если ang1 - ang3 < PI.
- В случае цикла: добавить полуплосоксти 2 раза по циклу. Пройтись по полученному стэку до первого повторения
- Алгоритм половинного деления плоскости
- Обобщение последнего до D-мерного случая
- Задача Линейного Программирования = пересечение полупространств * бинпоиск по ответу (найти хотя бы одну точку пересечения)
- Линейный рандом
- Задача Линейного Программирования в D-мерном пространстве за O(D!*N) [читай O(n)!]
- Алгоритм Лас-Вегаса выбора наиболее вероятного элемента за O(N) без доп.памяти
- Покрытие N точек на плоскости окружностью минимального радиуса за O(N), обобщение до 3D
- 3D Convex Hull
- Обзор различных решений (Incremental, Merge, Заворачивание подарка)
- * Решение за O(NK), где K --- число вершин ответа (заворачивание)
- * Рандомизированное решение за O(NlogN) (incremental)