Алгоритми обчислення опуклої оболонки
В обчислювальній геометрії існує багато алгоритмів знаходження опуклої оболонки скінченної множини точок з різною складністю обчислень.
Обчислити опуклу оболонку означає, що виконане недвозначне та ефективне представлення необхідної опуклої форми. Обчислювальна складність відповідних алгоритмів зазвичай розраховується в термінах n — числа вхідних точок, та h — числа точок в опуклій оболонці.
Плоский випадок
Розглянемо загальний випадок, де вхідними даними алгоритму є скінченна невпорядкована множина точок декартової площини.
Якщо не всі точки лежать на одній прямій, їх опуклою оболонкою буде опуклий многокутник, вершини якого — це деякі точки зі вхідної множини. Найчастіше його подання є переліком вершин, відсортованих за годинниковою стрілкою або проти годинникової стрілки. В деяких випадках зручно представляти опуклий многокутник як перетин множини півплощин або півпросторів у просторовому випадку.
Нижня межа обчислювальної складності
Для скінченої множини точок на площині нижня межа обчислювальної складності находження опуклої оболонки у вигляді опуклого многокутника є тією ж, що й в задачі сортування з подальшим зведенням. Це унаочнює такий приклад.
Для множини чисел, які треба відсортувати, розглянемо множину точок площини. Так як, вони лежать на параболі, яка є опуклою кривою, легко бачити, що вершини опуклої оболонки, що проходяться вздовж межі, створюють відсортовану множину чисел . Очевидно, для описаного перетворення чисел на точки і отримання їх відсортованого порядку потребується лінійний час. З цієї причини в загальному випадку опукла оболонка n точок не може бути обчислена швидше, ніж проведено їх сортування.
Стандартна Ω(n log n) нижня межа сортування доведена в обчислювальній моделі дерева прийняття рішень, в якому виконуються тільки порівняння, але не арифметичні дії; однак в цій моделі опуклі оболонки не можуть бути обчислені взагалі. Сортування також потребує час Ω(n log n) в обчислювальній моделі алгебраїчного дерева прийняття рішень, моделі, що більш підходить для опуклих оболонок, і в цих моделях опуклі оболонки також потребують час Ω(n log n).[1] Однак в моделях комп'ютерної арифметики дозволяється сортувати числа швидше, ніж за час O(n log n), наприклад, при використанні алгоритмів цілочисельного сортування, пласкі опуклі оболонки також можуть бути обчислені швидше: Алгоритм Грехема для опуклих оболонок містить один крок сортування після якого йде лінійний об'єм додаткової роботи.
Алгоритми
Відомі алгоритми обчислення опуклої оболонки, наведені нижче, відсортовано за датою їх першої публікації. Обчислювальна складність кожного алгоритму наведена в термінах числа вхідних точок n і числа точок оболонки h. В найгіршому випадку h дорівнюватиме n.
- Алгоритм Джарвіса — O(nh)
Один з найпростіших (також з найефективнішим використанням часу в найгіршому випадку) плоских алгоритмів. Винайдений Чандом і Капуром в 1970 і Р. А. Джарвісом в 1973 роках. Він має обчислювальну складність O(nh). В найгіршому випадку обчислювальна складність складає O(n2).
- Алгоритм Грехема — O(n log n)
Дещо більш складний, але значно більш ефективний алгоритм, опублікований Рональдом Гремом в 1972 році. Якщо точки вже відсортовані за однією з координат о за кутом до фіксованого вектора, алгоритм потребує час O(n).
- Алгоритм швидкої оболонки
Винайдений незалежно в 1977 У. Едді та в 1978 А. Бікатом. Як алгоритм швидкого сортування має очікувану складність обчислень O(n log n), але може погіршуватися до Θ(nh) = O(n2) в найгіршому випадку.
- Розділяй і володарюй — O(n log n)
Інший O(n log n) алгоритм, опублікований в 1977 році Франко Препарата і Хонгом. Цей алгоритм є також придатним для тривимірного випадку.
- Монотонний ланцюг або Алгоритм Ендрю — O(n log n)
Опубліковано в 1979 А. М. Ендрю. Алгоритм можна розглядати як варіант алгоритму Грехема який сортує точки в лексикографічному порядку за їх координатами. В разі, якщо вхідні точки вже відсортовані, алгоритм потребує час O(n).
- Інкрементальний алгоритм обчислення опуклої оболонки — O(n log n)
Опубліковано в 1984 році М. Келей.
- Алгоритм Кіркпатрика — Зейделя — O(n log h)
Перший оптимальний чутливий до вихідних даних алгоритм, він використовує техніку «шлюб перед завоюванням». Опубліковано Девідом Кіркпатріком і Реймундом Зейделем в 1986.
- Алгоритм Чена — O(n log h)
Простіший оптимальний чутливий до вихідних даних алгоритм винайдений Тімоті Ченом в 1996 році.
Вищі розмірності
Відомі алгоритми обчислення опуклої оболонки в тривимірному просторі, як і в просторах з довільною вимірністю. Наприклад, у випадках більших розмірностей можна застосовувати алгоритм Чена і алгоритм швидкої оболонки.
Для скінченої множини точок, опукла оболонка є опуклим багатогранником в тривимірному просторі і опуклим політопом для будь-якої кількості розмірностей, чиї вершини є точками з вхідної множини точок. Його подання не є таким простим, як в плоскому випадку. У випадку більших розмірностей, навіть якщо відомі вершини опуклого політопу, побудування його граней є нетривіальною задачею, як і задача побудови вершин при наявних гранях. Об'єм вихідних даних є експоненціально більшим за об'єм вхідних даних і навіть у випадках, коли вхідні та вихідні дані мають порівняний об'єм, відомі алгоритми обчислення опуклої оболонки для віщих розмірностей не є чутливими до вихідних даних у відношенні до питань вироджених вхідних даних і проміжних результатів високої складності.
Література
- Препарата Ф., Шеймос М. Вычислительная геометрия. Введение. — М. : Мир, 1989. — 478 с. — ISBN 5-03-001041-6.
- Кормен, Томас; Лейзерсон, Чарльз; Рівест, Рональд; Стайн, Кліфорд (2019). Розділ 33.3: Знаходження опуклої оболонки. Вступ до алгоритмів (вид. 3). К.І.С. с. 1032–1041. ISBN 978-617-684-239-2.