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


11

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

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

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

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

Відповіді:


10

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

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


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

Гарний підхід! Хоча посилання допоможуть, особливо для запитів. Я міг би знайти сторінку Вікіпедії, яка показує, що загальну проблему розташування точки можна вирішити за час, але чи є кращий спосіб для особливого випадку комірок Вороного? Мій пошук виявив лише цю відповідь , що робить це O ( n ) способом. O(log⁡n)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(nlogd−1⁡n)

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

Давши два множини точок у 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.