Mam dwa zestawy punktów w płaszczyźnie dwuwymiarowej. Chcę znaleźć najbliższą parę punktów s , t taką, że s ∈ S , t ∈ T , a odległość euklidesowa między s , t jest tak mała, jak to możliwe. Jak skutecznie można to zrobić? Czy można tego dokonać w czasie O ( n log n ) , gdzie n = | S | + | T | ?
Wiem, że jeśli mam podane jednolity zbiór , to jest możliwe, aby znaleźć najbliższą parę punktów s , s ' ∈ S w O ( n log n ) czasu przy użyciu standardowego algorytmu dziel i zwyciężaj . Jednak algorytm ten nie wydaje się uogólniać na przypadek dwóch zestawów, ponieważ nie ma związku między odległością między dwoma najbliższymi punktami w obrębie S lub T a odległością między dwoma najbliższymi punktami w tych zestawach.
Myślałem o zapisaniu zbioru w drzewie k -d, a następnie dla każdego s ∈ S , używając zapytania najbliższego sąsiada, aby znaleźć najbliższy punkt w T do s . Jednak najgorszy możliwy czas działania może być tak zły, jak czas O ( n 2 ) . Istnieją wyniki mówiące, że jeśli punkty T są losowo rozmieszczone, to oczekiwany czas działania dla każdego zapytania wynosi O ( log n ) , więc uzyskalibyśmy algorytm o oczekiwanym czasie działania O ( n log n ) gdybyśmy mieli gwarancję, że punkty są losowo rozmieszczone - ale szukam algorytmu, który będzie działał dla dowolnej kolekcji punktów (niekoniecznie losowo rozmieszczonych).
Motywacja: wydajny algorytm byłby przydatny w przypadku tego drugiego pytania .