Побудова опуклої оболонки методом «розділяй та володарюй» — алгоритм побудови опуклої оболонки зі швидкістю 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 Devida Kirkpatrika en ta Rajmonda Zejdelya en 1 Zmist 1 Opis algoritmu 2 Viznachennya 3 Realizaciya 4 Skladnist algoritmu 5 Primitki 6 PosilannyaOpis algoritmured Dano mnozhina S displaystyle S nbsp sho skladayetsya z N displaystyle N nbsp tochok Yaksho N N 0 displaystyle N leqslant N 0 nbsp N 0 displaystyle N 0 nbsp 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 nbsp dovilnim chinom na dva priblizno rivnih za potuzhnistyu pidmnozhini S 1 displaystyle S 1 nbsp ta S 2 displaystyle S 2 nbsp nehaj S 1 displaystyle S 1 nbsp mistit N 2 displaystyle N 2 nbsp tochok a S 2 displaystyle S 2 nbsp mistit N N 2 displaystyle N N 2 nbsp tochok Rekursivno p 1 znahodimo opukli obolonki kozhnoyi z pidmnozhin S 1 displaystyle S 1 nbsp ta S 2 displaystyle S 2 nbsp Buduyemo opuklu obolonku pochatkovoyi mnozhini opuklu obolonku ob yednannyam dvoh opuklih obolonok C H S 1 displaystyle CH S 1 nbsp i C H S 2 displaystyle CH S 2 nbsp Oskilki C H S C H S 1 S 2 C H C H S 1 C H S 2 displaystyle CH S CH S1 cup S2 CH CH S 1 cup CH S 2 nbsp skladnist cogo algoritmu ye rishennyam rekursivnogo spivvidnoshennya T N 2 T N 2 f N displaystyle T N leqslant 2T N 2 f N nbsp de f N displaystyle f N nbsp chas pobudovi opukloyi obolonki ob yednannya dvoh opuklih bagatokutnikiv kozhnij z yakih maye blizko N 2 displaystyle N 2 nbsp vershin Dali bude pokazano sho T N O N log N displaystyle T N O N log N nbsp Viznachennyared Opornoyu pryamoyu do opuklogo bagatokutnika P displaystyle P nbsp nazivayetsya pryama l displaystyle l nbsp sho prohodit cherez deyaku vershinu bagatokutnika P displaystyle P nbsp takim chinom sho vsi vnutrishni tochki bagatokutnika lezhat po odnu storonu vid pryamoyi l displaystyle l nbsp Do opuklogo bagatokutniku P displaystyle P nbsp mozhna pobuduvati oporni pryami z tochki A displaystyle A nbsp yaka ne nalezhit jomu Skoristayemosya tim sho pryama A P i displaystyle AP i nbsp de P i displaystyle P i nbsp deyaka vershina bagatokutnika P displaystyle P nbsp ye opornoyu do P displaystyle P nbsp v tomu i lishe v tomu vipadku yaksho rebra P i 1 P i displaystyle P i 1 P i nbsp i P i P i 1 displaystyle P i P i 1 nbsp 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 nbsp tobto voni znahodyatsya za linijnij chas Realizaciyared Nehaj mi vzhe mayemo pobudovani opukli obolonki P 1 displaystyle P 1 nbsp i P 2 displaystyle P 2 nbsp Znajdemo deyaku vnutrishnyu tochku A displaystyle A nbsp bagatokutnika P 1 displaystyle P 1 nbsp napriklad centroyid bud yakih troh vershin P 1 displaystyle P 1 nbsp Taka tochka A displaystyle A nbsp bude vnutrishnoyu tochkoyu C H P 1 P 2 displaystyle CH P 1 cup P 2 nbsp Mozhlivo dva vipadki Tochka A displaystyle A nbsp ne ye vnutrishnoyu tochkoyu bagatokutnika P 2 displaystyle P 2 nbsp Provodimo dvi oporni pryami dlya bagatokutnika P 2 displaystyle P 2 nbsp sho prohodyat cherez tochku A displaystyle A nbsp Ci oporni pryami prohodyat cherez vershini B displaystyle B nbsp i C displaystyle C nbsp bagatokutnika P 2 displaystyle P 2 nbsp Vsi tochki vseredini trikutnika A B C displaystyle ABC nbsp ne nalezhit granici opukloyi obolonki C H P 1 P 2 displaystyle CH P1 cup P2 nbsp Vsi inshi tochki uporyadkovuyemo po polyarnomu kutu shodo tochki A displaystyle A nbsp zlittyam dvoh uporyadkovanih spiskiv vershin za chas O N 1 O N 2 O N displaystyle O N 1 O N 2 O N nbsp a potim zastosovuyemo do otrimanogo spiskom metod obhodu Grehema sho vimagaye lishe linijnij chas Tochka A displaystyle A nbsp ye vnutrishnoyu tochkoyu bagatokutnika P 2 displaystyle P 2 nbsp Uporyadkovuyemo vershini oboh bagatokutnikiv shodo centru A displaystyle A nbsp zlivayuchi dva vporyadkovanih spisku vershin P 1 displaystyle P 1 nbsp i P 2 displaystyle P 2 nbsp za O N displaystyle O N nbsp 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 P 1 P 2 displaystyle P 1 cup P 2 nbsp Skladnist algoritmured U sumi vsi tri fazi algoritmu vikonuyutsya za chas O N displaystyle O N nbsp Takim chinom f N O N displaystyle f N O N nbsp i otrimuyemo spivvidnoshennya T N 2 T N 2 O N displaystyle T N leqslant 2T N 2 O N nbsp rishennyam yakogo yak vidomo ye T N O N log N displaystyle T N O N log N nbsp sho i viznachaye skladnist algoritmu Primitkired Kirkpatrick David G Seidel Raimund 1986 The ultimate planar convex hull algorithm SIAM Journal on Computing 15 1 287 299 doi 10 1137 0215021 Posilannyared http www cs umd edu samir 754 kshand ps Arhivovano 21 kvitnya 2013 u Wayback Machine angl Otrimano z https uk wikipedia org w index php title Algoritm Kirkpatrika Zejdelya amp oldid 35851290