Алгоритм Ендрю, також відомий як монотонний ланцюг — алгоритм побудови опуклої оболонки на площині, є модифікацією алгоритму Грехема.
На відміну від алгоритму Грехема, в якому побудова здійснюється за допомогою стеку, використовує лексикографічне впорядкування точок по координатах, що дозволяє алгоритму не використовувати дійсні числа і тригонометричні функції. Алгоритм окремо обчислює верхню і нижню оболонки з послідовних ланцюгів точок. Фактично, алгоритм Ендрю є окремим випадком алгоритму Грехема, коли центральна точка вибирається нескінченно віддаленою у від'ємному напрямку по осі ординат, так що в цьому випадку впорядкування по абсцисі збігається з впорядкуванням по полярному куту.
Застосування
Цей алгоритм сортує набір точок за рахунок збільшення по осі , а у разі, коли у точок координати однакові, то по . Нехай мінімальні і максимальні координати будуть і . Очевидно, що у першій з точок . Але можуть бути й інші точки з цієї мінімальної -координатою. Знайдемо такі точки в яких є два мінімуму і два максимуму і з'єднаємо їх відрізком. Остання множина точок ділиться на дві, залежно від того з якого боку від цієї прямої точки розташовані. Таким чином ми можемо визначити нову нижню і нову верхню лінії. Об'єднання цих ліній дає шукану опуклу оболонку.
Для побудови верхньої оболонки точки множини впорядковується відповідно до зростання абсциси. Після цього відбувається обробка отриманих даних за алгоритмом Грехема. Для цього алгоритм Ендрю використовує стек для зберігання поточної верхньої оболонки. Точка вважається, що знаходиться на вершині стека. Після закінчення роботи алгоритму стек містить верхню оболонку множини .
Даний алгоритм можна запрограмувати на багатьох мовах програмування.
Псевдокод
Вхідні дані: список P точок на площині. Передумова: повинно бути не менше 3 точок. Відсортуйте точки P за координатою x (у разі рівності, сортуйте за координатою y). Ініціалізуйте U та L як порожні списки. Списки будуть містити вершини верхньої та нижньої оболонок відповідно. for i = 1, 2, ..., n: while L містить принаймні дві точки та послідовність останніх двох точок L і точка P[i] не робить повороту проти годинникової стрілки: вилучити останню точку з L додати P[i] до L for i = n, n-1, ..., 1: while U містить щонайменше дві точки та послідовність останніх двох точок U і точка P[i] не робить повороту проти годинникової стрілки: видалити останню точку з U додати P[i] до U Видаліть останню точку кожного списку (це те саме, що перша точка іншого списку). Об'єднайте L і U, щоб отримати опуклу оболонку точок P. У підсумку точки будуть перераховані в порядку проти годинникової стрілки.
Див. також
Література
- Препарата Ф., Шеймос М. Вычислительная геометрия: введение. — Москва: Мир, 1989. (с. 132—133)
- Чаднов Р. В. Алгоритмы построения выпуклых оболочек и их применение в ГИС и САПР [ 14 березня 2014 у Wayback Machine.] — Томск: Томск. гос. ун-т. Факультет информатики, 2004.- 61 с.
- A. M. Andrew, «Another Efficient Algorithm for Convex Hulls in Two Dimensions», Info. Proc. Letters 9, 216—219 (1979).
Посилання
- [1] [Архівовано 11 березня 2014 у Wayback Machine.], Monotone chain
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm Endryu takozh vidomij yak monotonnij lancyug algoritm pobudovi opukloyi obolonki na ploshini ye modifikaciyeyu algoritmu Grehema Zobrazhennya perebigu algoritmuVerhnya chervona ta nizhnya sinya opukli obolonki Na vidminu vid algoritmu Grehema v yakomu pobudova zdijsnyuyetsya za dopomogoyu steku vikoristovuye leksikografichne vporyadkuvannya tochok po koordinatah sho dozvolyaye algoritmu ne vikoristovuvati dijsni chisla i trigonometrichni funkciyi Algoritm okremo obchislyuye verhnyu i nizhnyu obolonki z poslidovnih lancyugiv tochok Faktichno algoritm Endryu ye okremim vipadkom algoritmu Grehema koli centralna tochka vibirayetsya neskinchenno viddalenoyu u vid yemnomu napryamku po osi ordinat tak sho v comu vipadku vporyadkuvannya po abscisi zbigayetsya z vporyadkuvannyam po polyarnomu kutu ZastosuvannyaCej algoritm sortuye nabir tochok S displaystyle S za rahunok zbilshennya po osi x displaystyle x a u razi koli u tochok koordinati x displaystyle x odnakovi to po y displaystyle y Nehaj minimalni i maksimalni koordinati x displaystyle x budut xmin displaystyle x min i xmax displaystyle x max Ochevidno sho u pershij z tochok x xmin displaystyle x x min Ale mozhut buti j inshi tochki z ciyeyi minimalnoyi x displaystyle x koordinatoyu Znajdemo taki tochki v yakih ye dva minimumu i dva maksimumu i z yednayemo yih vidrizkom Ostannya mnozhina tochok dilitsya na dvi zalezhno vid togo z yakogo boku vid ciyeyi pryamoyi tochki roztashovani Takim chinom mi mozhemo viznachiti novu nizhnyu i novu verhnyu liniyi Ob yednannya cih linij daye shukanu opuklu obolonku Dlya pobudovi verhnoyi obolonki tochki mnozhini S displaystyle S vporyadkovuyetsya vidpovidno do zrostannya abscisi Pislya cogo vidbuvayetsya obrobka otrimanih danih za algoritmom Grehema Dlya cogo algoritm Endryu vikoristovuye stek x0 x1 xt displaystyle x 0 x 1 dots x t dlya zberigannya potochnoyi verhnoyi obolonki Tochka xt displaystyle x t vvazhayetsya sho znahoditsya na vershini steka Pislya zakinchennya roboti algoritmu stek mistit verhnyu obolonku mnozhini S displaystyle S Danij algoritm mozhna zaprogramuvati na bagatoh movah programuvannya PsevdokodVhidni dani spisok P tochok na ploshini Peredumova povinno buti ne menshe 3 tochok Vidsortujte tochki P za koordinatoyu x u razi rivnosti sortujte za koordinatoyu y Inicializujte U ta L yak porozhni spiski Spiski budut mistiti vershini verhnoyi ta nizhnoyi obolonok vidpovidno for i 1 2 n while L mistit prinajmni dvi tochki ta poslidovnist ostannih dvoh tochok L i tochka P i ne robit povorotu proti godinnikovoyi strilki viluchiti ostannyu tochku z L dodati P i do L for i n n 1 1 while U mistit shonajmenshe dvi tochki ta poslidovnist ostannih dvoh tochok U i tochka P i ne robit povorotu proti godinnikovoyi strilki vidaliti ostannyu tochku z U dodati P i do U Vidalit ostannyu tochku kozhnogo spisku ce te same sho persha tochka inshogo spisku Ob yednajte L i U shob otrimati opuklu obolonku tochok P U pidsumku tochki budut pererahovani v poryadku proti godinnikovoyi strilki Div takozhMonotonnij mnogokutnikLiteraturaPreparata F Shejmos M Vychislitelnaya geometriya vvedenie Moskva Mir 1989 s 132 133 Chadnov R V Algoritmy postroeniya vypuklyh obolochek i ih primenenie v GIS i SAPR 14 bereznya 2014 u Wayback Machine Tomsk Tomsk gos un t Fakultet informatiki 2004 61 s A M Andrew Another Efficient Algorithm for Convex Hulls in Two Dimensions Info Proc Letters 9 216 219 1979 Posilannya 1 Arhivovano 11 bereznya 2014 u Wayback Machine Monotone chain