Кружок обучения мастерству программирования при СПбГУ
Лекции группы A0 - Лекция 02 - про многоугольники
Краткий план лекции на тему "Геометрия многоугольников"
Выпуклые оболочки, не классические методы
Экстремальные задачи на выпуклых многоугольниках
Локализация точки
* Выпуклые оболочки
* Offline методы
Полный план лекции
Note:
Звездочкой отмечены темы, на которые на лекции времени не хватило.
Выпуклые оболочки, не классические методы
Алгоритм Quick (в среднем работает за O(N), на окружности за O(NlogN), в худшем за O(NlogMax) [целочисленный и вещественный случаи])
Метод разделяй и властвуй [построение общих касательных]
Экстремальные задачи на выпуклых многоугольниках
Построение общих касательных за O(n) [2 указателя, из каждой точки первого строим касательную ко второму]
Построение касательных из точки за O(logn) [ищем экстремумы функции "угол"]
Ищем 2 точки по разные стороны от прямой + 2 бинпоиска на поиск корней.
2 точки = 2 экстремума функции "расстояние до прямой"
первая точка = любая, вторая ищется одним бинпоиском
Вариант с предподсчетом за O(n) [или даже за O(1)]. Сортировка сторон + 2 бинпоиска для получения экстремальных точек.
Поиск ближайшей точки мн-ка к данной за O(logn) [строим касательные, получаем лицевую часть и по ней 3-Search]
Поиск разделяющей прямой = поиск двух ближайших точек [автоматически получается прямая max удаленная от мн-ков]
Поиск двух ближайших точек за O(n^2), за O(nlogn)
Локализация точки
Проверка принадлежности точки многоугольнику за O(n). Пуск горизонтального луча, отрезок = [minY,maxY).
Поиск точки внутри мн-ка, за O(1) для выпуклого или с известной ориентацией, за O(n) в общем случае.
Проверка для выпуклого за [O(1), O(logn)] - предподсчет, запрос.
Проверка для невыпуклого за [O(n^2), O(logn)].
Проверка для невыпуклого за [O(nlogn), O(log^2n)] (вариант с сортировкой по углу, с сортировкой по координатам)
Пересчет выпуклой оболочки online, суммарное время = O(nlog^2n), optimization to O(nlogn) с помощью внутренней точки.
* Выпуклые оболочки
* O(nk) Алгоритм заворачивания подарка (Jarvis) [3D обобщение, решение задачи для кругов]
* O(nlogn) Сортировки по углу (Graham) [улучшение = сортировкой по координате]
* O(nlogk) Гибрид Jarvis + Graham = Chan
* Алгоритм Melkman-а построения выпуклой оболочки от мн-ка за O(n).
* Offline методы
* K точек. Определить, где они находятся, относительно невыпуклого N-угольнике за O(NlogN + KlogK).
* В случае выпуклого O(N + KlogK)
* Поиск экстремальных точек для K прямых и N-угольника за O(N + KlogK)