Кінетична опукла оболонка

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Кінети́чна опу́кла оболо́нка — це спеціалізована кінетична структура даних, призначена для підтримки та оновлення опуклої оболонки множини точок, що рухаються. Ця структура дозволяє ефективно відслідковувати зміни оболонки, що виникають внаслідок постійного переміщення точок, і знаходить застосування у комп’ютерному зорі та робототехніці для задач навігації та візуалізації.

2D-випадок[ред. | ред. код]

Найбільш відомою структурою даних для 2-вимірної задачі кінетичної опуклої оболонки є структура Баша, Гюйбаса[en] та Гершберга. Ця структура даних релевантна, ефективна, компактна і локальна.[1]

Структура даних[ред. | ред. код]

Двоїста опукла оболонка множини точок — це верхній і нижній обвідний подвійний набір ліній. Таким чином, підтримка верхніх і нижніх оболонок набору рухливих ліній еквівалентна підтримці опуклою оболонкою множини рухомих точок. Комп'ютери однаково рахують верхні і нижні оболонки, тому обчислення верхньої обвідної оболонки ліній еквівалентно обчисленню опуклої оболонки множини рухомих точок. Верхня оболонка, що огинає набір статичних рядків, може бути обчислена за допомогою алгоритму розділяй і володарюй, який розбиває рядки на дві групи однакового розміру, викликає себе рекурсивно для двох наборів, щоб знайти їх верхні оболонки, а потім зливає дві оболонки в одну. Крок злиття виконується з використанням алгоритму замітання прямою. Функція розглядає перший набір синіх точок і другий набір червоних точок.

Стандартний алгоритм розгортки лінії для об'єднання верхніх оболонок розглядає всі вершини червоних і синіх верхніх оболонок, зліва направо. Останні червоні і сині точки зберігаються, як ліні розгортки. Коли точки зустрічаються, алгоритм перевіряє, якщо точка знаходиться вище або нижче лінії, тоді останніми зіткнулися точки протилежного кольору. Якщо вона вища, то точка додається в об'єднану верхню оболонку. Якщо вона іншого кольору, ніж остання додана точка (червоні і сині оболонки перетнулися), тоді точка перетину також додається в об'єднану верхню оболонку.[2]

Послідовність ребер і вершин, що випливають з цього алгоритму залежить тільки від упорядкування точок і результатів точкових порівнянь. Таким чином, результат може бути сертифікований з наступними сертифікатами:

  • Х-сертифікати () використовуються для підтвердження порядку вершин червоних і синіх оболонок. Вони є сертифікатами для кінетичного відсортованого списку[en] на множині вершин. Так як кожна точка включає в себе 2 лінії, і сертифікат включає в себе 2 точки, кожен сертифікат включає в себе 4 лінії.
  • У-сертифікати () використовуються для підтвердження, що вершина знаходиться вище або нижче лінії. Сертифікати з'являються для всіх порівнянь, які виникають під час роботи алгоритму.

Поки є всі ці сертифікати, етапи злиття будуть виконуватися однаково, так що в результаті верхня оболонка буде така ж сама, як і нижня. Кінетична структура даних для верхніх оболонок може бути створена за допомогою цих сертифікатів для підтвердження роботи статичного алгоритму верхньої оболонки. Однак ця схема не є локальною, так як одна лінія може брати участь у багатьох у-сертифікатах, якщо вона залишається на верхній або нижній частині, де зустрічаються багато точок з іншої оболонки.

Таким чином, необхідно ввести S-сертифікати (), які підтверджують, що нахил одної лінії більше або менше, ніж нахил іншої лінії.

Зображення сертифікатів в ряді випадків
сертифікати засвідчують структуру перетину червоних і синіх оболонок із сертифікацією перетинів (угорі ліворуч) або відсутністю перетинів (справа вгорі і внизу). Стрілки вказують, які елементи порівнюються сертифікатом.

Маючи такі сертифікати для всіх точок набору АВ достатньо, щоб засвідчити послідовність ребер і вершин в результаті злиття, лише за O (1) сертифікатами в рядок:[1]

  1. : . позначає вершину найближчої до з правої сторони. Цей сертифікат зберігається для всіх точок , які мають інший колір, ніж точка, , який слідує за ними.
  1. : або . Цей сертифікат зберігається для всіх точок , таких що перетинає . позначає ребро , край іншої оболонки, який вище або нижче .
  2. : або . Цей сертифікат зберігається для всіх точок , таких що перетинає .
  3. : . Цей сертифікат зберігається для всіх точок , для яких виконується та .
  4. : . Цей сертифікат зберігається для всіх точок , для яких виконується та .
  5. : . Цей сертифікат зберігається для всіх точок , для яких виконується та .
  6. : . Цей сертифікат зберігається для всіх точок , для яких виконується та .
  7. : . Цей сертифікат зберігається для всіх точок , для яких виконується та .

Перший сертифікат, , засвідчує х-упорядкування точок в червоних і синіх оболонках. Другі і треті сертифікати, та , засвідчують перетин червоних і синіх оболонок. Решта 5 сертифікатів, , , , , та розміщюють ребра, яких не має в верхніх оболонках в послідовності схилів ребер. Якщо нахил на початку або в кінці послідовності, або засвідчать це. Якщо він знаходиться в середині послідовності , та засвідчити це, і засвідчує, що точка перетину двох ліній, знаходиться над ребром. Цих одного або трьох сертифікатів досить, щоб довести, що всі ребра знаходяться вище опорної лінії. На відміну від попередньої схеми всі лінії лише беруть участь в постійній кількості сертифікатів. Всякий раз, коли з цих сертифікатів не вийде нової лінії, об'єднана оболонка і сертифікати можуть бути оновлені за O (1) .

Кінетична структура даних для опуклої оболонки будується за допомогою цих сертифікатів для посвідчення рекурсивного злиття верхніх оболонок. Всякий раз, коли сертифікати зазнають невдачі, їх злиття оновлюється, і якщо оболонка з'являється в результаті змін злиття, зміни поширюються через всі ті злиття, які залежать від результату злиття сертифікатів.[1]

Продуктивність[ред. | ред. код]

Ця структура даних локальна, компактна і ефективна. Це пов'язано з логарифмічною глибиною злиття, які використовуються для сертифікації верхньої оболонки.[1]

  • Локальність: Кожний рядок бере участь в більшості з O (log n") сертифікатів. Це тому, що кожна лінія бере участь в постійній кількості сертифікатів в кожному злитті, і кожен рядок знаходиться в O (log n) час злиття.
  • Компактність: Максимальна кількість сертифікатів, які використовуються в цій структурі даних дорівнює О (n log n). Це відбувається тому, що кожне злиття включає в себе ряд лінійних сертифікатів по числу злитих ліній. Верхня оболонка із n ліній вимагає сертифікатів для злиття верхніх двох підмножин з n / 2 рядками і сертифікатами для злиття оболонок. Таким чином, кількість сертифікатів, C (n), що створюють верхню оболонку з n ліній задовольняє співвідношенню C (n) = 2C (n / 2) + О (n), де С (1) = O (1). Основна теорема, де С (n) = O (n log n).
  • Ефективність: Максимальна кількість подій, оброблених цим алгоритмом на алгебраїчній або псевдо-алгебраїчній траєкторії є квадратичною, для всіх .[3][4] Опуклі оболонки лінійно рухомих точок можуть бути побудовані в раз.[5] Таким чином, ця структура даних є ефективною.

Вищі розміри[ред. | ред. код]

Знаходження ефектівної кінетичної структури даних для підтримки опуклої оболонки рухомих точок в вимірах вище 2 є відкритою проблемою.[1]

Пов'язані проблеми[ред. | ред. код]

Кінетична опукла оболонка може бути використана для вирішення наступних супутніх проблем:[6]

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]

  1. а б в г д Basch, Julien; Guibas, Leonidas J.; Hershberger, John (April 1999). Data structures for mobile data (PDF). J. Algorithms. 31 (1): 1—28. doi:10.1006/jagm.1998.0988. Архів оригіналу (PDF) за 5 березня 2016. Процитовано 28 травня 2017.
  2. Hershberger, John (21 грудня 1989). Finding the upper envelope of n line segments in O(n log n) time. Information Processing Letters. 33 (4): 169—174. doi:10.1016/0020-0190(89)90136-1.
  3. Agarwal, Pankaj K.; Schwarzkopf, Otfried; Sharir, Micha (January 1996). The overlay of lower envelopes and its applications. Discrete and Computational Geometry. 15 (1): 1—13. doi:10.1007/BF02716576. Архів оригіналу за 6 березня 2016. Процитовано 28 травня 2017.
  4. Sharir, Micha (1994). Almost tight upper bounds for lower envelopes in higher dimensions. Discrete and Computational Geometry. 12 (1): 327—345. doi:10.1007/BF02574384.
  5. Agarwal, Pankaj K.; Guibas, Leonidas J.; Hershberger, John; Veach, Eric (January 2001). Maintaining the extent of a moving point set. Discrete and Computational Geometry. 26 (3): 353—374. doi:10.1007/s00454-001-0019-x.
  6. Agarwal, Pankaj K.; Guibas, Leonidas J.; Hershberger, John; Veach, Eric (August 1997). Maintaining the extent of a moving point set. Lecture Notes in Computer Science Volume 1272. 5th Workshop on Algorithms and Data Structures (WADS '97). с. 31—44. doi:10.1007/3-540-63307-3_46. Архів оригіналу за 29 серпня 2017. Процитовано 28 травня 2017.