Najbliższa para punktów między dwoma zestawami, w 2D


11

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 | ?S,Ts,tsStTs,tO(nlogn)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.Ss,sSO(nlogn)ST

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 )TksSTsO(n2)TO(logn)O(nlogn) 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 .

Odpowiedzi:


10

Tak, może to być czas . Budowanie diagramu Voronoi dla T . Następnie dla każdego punktu s S znajdź, w której komórce diagramu Voronoi jest zawarty. Środek tej komórki to punkt t T najbliższy s .O(nlogn)TsStTs

Możesz zbudować diagram Voronoi w czasie , a każde zapytanie (znajdź komórkę zawierającą s ) można wykonać w czasie O ( log n ) , więc całkowity czas działania to czas O ( n log n ) .O(nlogn)sO(logn)O(nlogn)


Fajne, znacznie prostsze niż to, co mogłem wymyślić :).
aelguindy,

Niezłe podejście! Pomocne byłyby jednak linki, szczególnie po stronie zapytań. Mógłbym znaleźć stronę Wikipedii pokazującą, że ogólny problem lokalizacji punktu można rozwiązać w czasie , ale czy istnieje lepszy sposób na specjalny przypadek komórek Voronoi? Moje wyszukiwanie ujawniło tylko tę odpowiedź , co czyni ją O ( n ) . O(logn)O(n)
j_random_hacker

Tn=|S|+|T|O(n)

1
nO(n)6n

To wydaje się poprawne w przypadku tego pytania na temat wymiany matematyki.
Albjenow

5

L1

dO(nlogd1n)

O(nlogn)O(nlog2n)

S,TSδzTδzzδzδz


P2pmPPqmQQ

1
l

Link jest zepsuty :(
Keerthana Gopalakrishnan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.