Найближча пара точок між двома множинами, у 2D


11

Я маю два множини точок у двовимірній площині. Я хочу знайти найближчу пару точок таких, що , , а евклідова відстань між є якомога меншою. Наскільки ефективно це можна зробити? Чи можна це зробити в час, де?s , t s S t T s , t O ( n log n ) n = | S | + | Т |S,Ts,tsStTs,tO(nlogn)n=|S|+|T|

Я знаю, що якщо мені дано один набір , то можна знайти найближчу пару точок за час, використовуючи стандартний алгоритм ділення і перемоги . Однак цей алгоритм, схоже, не узагальнює випадок двох множин, оскільки немає зв'язку між відстані між двома найближчими точками в межах або проти відстані між двома найближчими точками в цих множинах.s , s S O ( n log n )Ss,sSO(nlogn)TST

Я думав зберегти множину у -d дереві, а потім для кожного , використовуючи запит найближчого сусіда, щоб знайти найближчу точку в до . Однак найгірший час роботи цього може бути таким же поганим, як час . Є результати, які говорять про те, що якщо точки розподілені випадковим чином, тоді очікуваний час виконання кожного запиту дорівнює , тому ми отримаємо алгоритм із очікуваним часом виконання якщо ми були гарантовані, що бали розподіляються випадковим чином - але я шукаю алгоритм, який буде працювати для будь-якого збору балів (не обов'язково випадково розподілених).TksSTsO(n2)TO(logn)O(nlogn)

Мотивація: ефективний алгоритм був би корисний для цього іншого питання .

Відповіді:


10

Так, це може бути час . Побудувати діаграму Вороного для T . Потім для кожної точки s S знайдіть, у якій комірці діаграми Вороного вона міститься. Центром цієї комірки є точка t T, яка є найближчою до s .O(nlogn)TsStTs

Ви можете побудувати діаграму Voronoi за час , і кожен запит (знайти комірку, що містить s ), може бути виконаний у час O ( log n ) , тому загальний час роботи - O ( n log n ) час.O(nlogn)sO(logn)O(nlogn)


Приємно, набагато простіше, ніж те, що я міг придумати :).
aelguindy

Гарний підхід! Хоча посилання допоможуть, особливо для запитів. Я міг би знайти сторінку Вікіпедії, яка показує, що загальну проблему розташування точки можна вирішити за час, але чи є кращий спосіб для особливого випадку комірок Вороного? Мій пошук виявив лише цю відповідь , що робить це O ( n ) способом. O(logn)O(n)
j_random_hacker

Складність проблеми точки розташування зазвичай задається у вигляді загальної кількості вершин (тут діаграма Вороного). Це число, ймовірно, більше, ніж кількість точок у і навіть n = | S | + | Т | . Я не впевнений, чи обмежена кількість вершин O ( n ) , чи не так? Tn=|S|+|T|O(n)
Albjenow

1
@Albjenow, я не впевнений, чи вирішує це ваше питання, але так, у двох вимірах, я вважаю, що кількість вершин у діаграмі Вороного на точках дорівнює O ( n ) (я, мабуть, пам'ятаю, це 6 n або щось таке). nO(n)6n
DW

Це здається правильним щодо цього питання на math.stackexchange.
Albjenow

5

Я розширюю свій коментар у відповідь, оскільки я з'ясував напівзадовільну відповідь. Це вирішує лише проблему на -відстань. Ця відповідь в основному неправильна.L1

У цій роботі вирішується задача пошуку найближчої пари точок у розмірах для випадку, коли множини розділені гіперплощиною в O ( n log d - 1 n ) .dO(nlogd1n)

Для двох вимірів це вирішує випадок у відповіді, на яку ви посилаєтесь, як на основну мотивацію вашого запитання в . Він також може бути використаний для вирішення загального випадку двовимірної задачі в O ( n log 2 n ) .O(nlogn)O(nlog2n)

Давши два множини точок у 2D, вбудуйте їх у тривимірний простір, перемістивши множину S на деяку - δ z і встановивши T на δ z у напрямку z . Вибір δ z може бути зроблений таким, що не впливає на вибір найближчої пари точок, приймаючи δ z меншим за точність вхідних точок (і подвоєння бітів точності для кожної вхідної координати). Скористайтеся алгоритмом 3D із цитованої роботи.S,TSδzTδzzδzδz


+1, але кілька речей про цей документ (який я тільки що почав читати): (i) вони лише стверджують, що вирішують проблему для прямолінійного (Манхеттенського) випадку відстані; (ii) я не розумію, чому вони вважають, що регіон на стор. 2 містить рівно 1 бал. Я припускав, що p m - точка у P з медіаною y координат у P , а q m - точка у Q з медіаною y координат у Q , але я не бачу, як вищезгадане може випливати з цього . П2pмППqмQQ
j_random_hacker

1
@j_random_hacker папір вирішує проблему лише на відстань L1, і ця відповідь неправильна :). І я думаю, що це буква :). л
aelguindy

Посилання розірвано :(
Keerthana Gopalakrishnan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.