Побудова опуклої оболонки методом «розділяй та володарюй» — алгоритм побудови опуклої оболонки зі швидкістю O(n log h), де n — кількість вхідних точок, та h — кількість точок в опуклій оболонці. Свою назву отримав від імен розробників — [en] та [en].
Опис алгоритму
Дано множина , що складається з точок.
- Якщо ( — деяке невелике ціле число), то побудувати опуклу оболонку одним з відомих методів та зупинитися, інакше перейти до кроку 2.
- Розіб'ємо початкову множину довільним чином на два приблизно рівних за потужністю підмножини та (нехай містить точок, а містить точок).
- Рекурсивно (п. 1) знаходимо опуклі оболонки кожної з підмножин та .
- Будуємо опуклу оболонку початкової множини опуклу оболонку об'єднанням двох опуклих оболонок і .
Оскільки: , складність цього алгоритму є рішенням рекурсивного співвідношення , де — час побудови опуклої оболонки об'єднання двох опуклих багатокутників, кожний з яких має близько вершин. Далі буде показано, що .
Визначення
Опорною прямою до опуклого багатокутника називається пряма , що проходить через деяку вершину багатокутника таким чином, що всі внутрішні точки багатокутника лежать по одну сторону від прямої .
До опуклого багатокутнику можна побудувати опорні прямі з точки , яка не належить йому. Скористаємося тим, що пряма , де — деяка вершина багатокутника , є опорною до в тому і лише в тому випадку, якщо ребра і лежать в одній півплощині, обмеженою цією прямою. Неважко бачити, що для побудови опорних прямих потрібно в гіршому випадку один обхід вершин багатокутника , тобто вони знаходяться за лінійний час.
Реалізація
Нехай ми вже маємо побудовані опуклі оболонки і .
- Знайдемо деяку внутрішню точку багатокутника (наприклад, центроїд будь-яких трьох вершин ). Така точка буде внутрішньою точкою .
- Можливо два випадки:
- Точка не є внутрішньою точкою багатокутника . Проводимо дві опорні прямі для багатокутника , що проходять через точку . Ці опорні прямі проходять через вершини і багатокутника . Всі точки всередині трикутника не належить границі опуклої оболонки . Всі інші точки упорядковуємо по полярному куту щодо точки , злиттям двох упорядкованих списків вершин за час , а потім застосовуємо до отриманого списком метод обходу Грехема, що вимагає лише лінійний час.
- Точка є внутрішньою точкою багатокутника . Упорядковуємо вершини обох багатокутників щодо центру , зливаючи два впорядкованих списку вершин і за .
- Тепер до отриманого списком вершин можна застосувати алгоритм Грехема за винятком фази сортування точок по полярній координаті, тоді він буде виконаний за лінійний час.
Тепер отримана опукла оболонка об'єднання опуклих багатокутників .
Складність алгоритму
У сумі всі три фази алгоритму виконуються за час . Таким чином, і отримуємо співвідношення , рішенням якого, як відомо, є , що і визначає складність алгоритму.
Примітки
- Kirkpatrick, David G.; (1986). The ultimate planar convex hull algorithm. . 15 (1): 287—299. doi:10.1137/0215021.
Посилання
- http://www.cs.umd.edu/~samir/754/kshand.ps [ 21 квітня 2013 у Wayback Machine.](англ.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Pobudova opukloyi obolonki metodom rozdilyaj ta volodaryuj algoritm pobudovi opukloyi obolonki zi shvidkistyu O n log h de n kilkist vhidnih tochok ta h kilkist tochok v opuklij obolonci Svoyu nazvu otrimav vid imen rozrobnikiv en ta en Opis algoritmuDano mnozhina S displaystyle S sho skladayetsya z N displaystyle N tochok Yaksho N N0 displaystyle N leqslant N 0 N0 displaystyle N 0 deyake nevelike cile chislo to pobuduvati opuklu obolonku odnim z vidomih metodiv ta zupinitisya inakshe perejti do kroku 2 Rozib yemo pochatkovu mnozhinu S displaystyle S dovilnim chinom na dva priblizno rivnih za potuzhnistyu pidmnozhini S1 displaystyle S 1 ta S2 displaystyle S 2 nehaj S1 displaystyle S 1 mistit N 2 displaystyle N 2 tochok a S2 displaystyle S 2 mistit N N 2 displaystyle N N 2 tochok Rekursivno p 1 znahodimo opukli obolonki kozhnoyi z pidmnozhin S1 displaystyle S 1 ta S2 displaystyle S 2 Buduyemo opuklu obolonku pochatkovoyi mnozhini opuklu obolonku ob yednannyam dvoh opuklih obolonok CH S1 displaystyle CH S 1 i CH S2 displaystyle CH S 2 Oskilki CH S CH S1 S2 CH CH S1 CH S2 displaystyle CH S CH S1 cup S2 CH CH S 1 cup CH S 2 skladnist cogo algoritmu ye rishennyam rekursivnogo spivvidnoshennya T N 2T N 2 f N displaystyle T N leqslant 2T N 2 f N de f N displaystyle f N chas pobudovi opukloyi obolonki ob yednannya dvoh opuklih bagatokutnikiv kozhnij z yakih maye blizko N 2 displaystyle N 2 vershin Dali bude pokazano sho T N O Nlog N displaystyle T N O N log N ViznachennyaOpornoyu pryamoyu do opuklogo bagatokutnika P displaystyle P nazivayetsya pryama l displaystyle l sho prohodit cherez deyaku vershinu bagatokutnika P displaystyle P takim chinom sho vsi vnutrishni tochki bagatokutnika lezhat po odnu storonu vid pryamoyi l displaystyle l Do opuklogo bagatokutniku P displaystyle P mozhna pobuduvati oporni pryami z tochki A displaystyle A yaka ne nalezhit jomu Skoristayemosya tim sho pryama APi displaystyle AP i de Pi displaystyle P i deyaka vershina bagatokutnika P displaystyle P ye opornoyu do P displaystyle P v tomu i lishe v tomu vipadku yaksho rebra Pi 1 Pi displaystyle P i 1 P i i Pi Pi 1 displaystyle P i P i 1 lezhat v odnij pivploshini obmezhenoyu ciyeyu pryamoyu Nevazhko bachiti sho dlya pobudovi opornih pryamih potribno v girshomu vipadku odin obhid vershin bagatokutnika P displaystyle P tobto voni znahodyatsya za linijnij chas RealizaciyaNehaj mi vzhe mayemo pobudovani opukli obolonki P1 displaystyle P 1 i P2 displaystyle P 2 Znajdemo deyaku vnutrishnyu tochku A displaystyle A bagatokutnika P1 displaystyle P 1 napriklad centroyid bud yakih troh vershin P1 displaystyle P 1 Taka tochka A displaystyle A bude vnutrishnoyu tochkoyu CH P1 P2 displaystyle CH P 1 cup P 2 Mozhlivo dva vipadki Tochka A displaystyle A ne ye vnutrishnoyu tochkoyu bagatokutnika P2 displaystyle P 2 Provodimo dvi oporni pryami dlya bagatokutnika P2 displaystyle P 2 sho prohodyat cherez tochku A displaystyle A Ci oporni pryami prohodyat cherez vershini B displaystyle B i C displaystyle C bagatokutnika P2 displaystyle P 2 Vsi tochki vseredini trikutnika ABC displaystyle ABC ne nalezhit granici opukloyi obolonki CH P1 P2 displaystyle CH P1 cup P2 Vsi inshi tochki uporyadkovuyemo po polyarnomu kutu shodo tochki A displaystyle A zlittyam dvoh uporyadkovanih spiskiv vershin za chas O N1 O N2 O N displaystyle O N 1 O N 2 O N a potim zastosovuyemo do otrimanogo spiskom metod obhodu Grehema sho vimagaye lishe linijnij chas Tochka A displaystyle A ye vnutrishnoyu tochkoyu bagatokutnika P2 displaystyle P 2 Uporyadkovuyemo vershini oboh bagatokutnikiv shodo centru A displaystyle A zlivayuchi dva vporyadkovanih spisku vershin P1 displaystyle P 1 i P2 displaystyle P 2 za O N displaystyle O N Teper do otrimanogo spiskom vershin mozhna zastosuvati algoritm Grehema za vinyatkom fazi sortuvannya tochok po polyarnij koordinati todi vin bude vikonanij za linijnij chas Teper otrimana opukla obolonka ob yednannya opuklih bagatokutnikiv P1 P2 displaystyle P 1 cup P 2 Skladnist algoritmuU sumi vsi tri fazi algoritmu vikonuyutsya za chas O N displaystyle O N Takim chinom f N O N displaystyle f N O N i otrimuyemo spivvidnoshennya T N 2T N 2 O N displaystyle T N leqslant 2T N 2 O N rishennyam yakogo yak vidomo ye T N O Nlog N displaystyle T N O N log N sho i viznachaye skladnist algoritmu PrimitkiKirkpatrick David G 1986 The ultimate planar convex hull algorithm 15 1 287 299 doi 10 1137 0215021 Posilannyahttp www cs umd edu samir 754 kshand ps 21 kvitnya 2013 u Wayback Machine angl