У меня есть два набора точек в 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 ). если бы мы были уверены, что точки распределены случайным образом - но я ищу алгоритм, который будет работать для любого набора точек (не обязательно случайного распределения).
Мотивация: эффективный алгоритм был бы полезен для этого другого вопроса .