У меня есть два набора точек в 2-мерной плоскости. Я хочу найти ближайшую пару точек такую, чтобы , , а евклидово расстояние между как можно меньше. Насколько эффективно это можно сделать? Можно ли это сделать за , где?s , t s ∈ S t ∈ T s , t O ( n log n ) n = | S | + | T |
Я знаю, что если мне дать один набор , то можно найти ближайшую пару точек за времени, используя стандартный алгоритм «разделяй и властвуй» . Однако этот алгоритм, похоже, не обобщает случай двух наборов, потому что нет никакой связи между расстоянием между двумя ближайшими точками в пределах или и расстоянием между двумя ближайшими точками в этих наборах.s , s ' ∈ S О ( п войти п )T
Я думал о сохранении множества в k- d дереве, затем для каждого s ∈ S , используя запрос ближайшего соседа, чтобы найти ближайшую точку в T к s . Однако время выполнения в худшем случае может быть таким же плохим, как время O ( n 2 ) . Есть результаты, говорящие, что если точки T распределены случайным образом, то ожидаемое время выполнения для каждого запроса равно O ( log n ) , поэтому мы получили бы алгоритм с ожидаемым временем выполнения O ( n log n ). если бы мы были уверены, что точки распределены случайным образом - но я ищу алгоритм, который будет работать для любого набора точек (не обязательно случайного распределения).
Мотивация: эффективный алгоритм был бы полезен для этого другого вопроса .
Я расширяю мой комментарий в ответ, так как я понял, пол-удовлетворительный ответ.Это только решает проблему для -Расстояние. Этот ответ в основном неверен.Эта статья решает проблему нахождения ближайшей пары точек в измерениях для случая, когда множества разделены гиперплоскостью в O ( n log d - 1 n ) .d O(nlogd−1n)
Для двух измерений это решает случай в ответе, который вы называете своей основной мотивацией для вашего вопроса в . Его также можно использовать для решения общего случая двумерной задачи в O ( n log 2 n ) .O(nlogn) O(nlog2n)
Даны два множества точек в 2D, вставлять их в 3D пространстве, перемещая множество S некоторыми - б г и множество Т от б г в г направлении. Выбор б г может быть сделан , чтобы не повлиять на выбор ближайших паров точек, взяв б г будет меньше , чем точность ваших входных точек (и удвоение точности бит для каждого входа координат). Используйте алгоритм 3D из цитируемой статьи.S,T S −δz T δz z δz δz
источник