Biorąc pod uwagę dwa zestawy i każdy zawierający rozłącznych punktów na płaszczyźnie, oblicz najkrótszą odległość między punktem w a punktem w , tj. .
Nie jestem pewien, czy mam rację, ale ten problem jest bardzo podobny do problemów, które można rozwiązać za pomocą programowania liniowego w geometrii obliczeniowej. Jednak redukcja do LP nie jest prosta. Również mój problem wygląda na znalezienie najcieńszego punktu między dwoma zestawami punktów, które oczywiście można rozwiązać za pomocą LP w w przestrzeni dwuwymiarowej.
Odpowiedzi:
Mam rozwiązanie, które może wydawać się nieco skomplikowane, ale powinno być bardziej wydajne niż naiwne wyszukiwanie :O(n2)
Reszta jest w pseudo-kodzie, aby było jaśniej:
To znaczy, wstępnie sortując punkty wzdłuż , możesz odfiltrować pary, które nigdy nie będą w odległości od siebie, ponieważ wzdłuż zawsze będzie.v d bk−aj v ≤∥bk−aj∥
W najgorszym przypadku jest to nadal , ale jeśli i są dobrze oddzielone, powinno być znacznie szybsze, ale nie lepsze niż , co jest wymagane do sortowania.O(n2) A B O(nlogn)
Aktualizacja
To rozwiązanie w żadnym wypadku nie jest wyciągane z kapelusza. Jest to szczególny przypadek tego, czego używam w symulacjach cząstek, aby znaleźć wszystkie oddziałujące pary cząstek z przestrzennym binowaniem. Moja własna praca wyjaśniająca bardziej ogólny problem jest tutaj .
Jeśli chodzi o sugestię użycia zmodyfikowanego algorytmu przesuwania linii, chociaż intuicyjnie prosty, nie jestem przekonany, że jest to w gdy rozważane są zestawy rozłączne. To samo dotyczy losowego algorytmu Rabina.O(nlogn)
Wydaje się, że nie ma zbyt wiele literatury dotyczącej problemu najbliższych par w rozłącznych zestawach, ale znalazłem to , co nie rości sobie prawa do bycia pod , i to , co nie wydaje się zgłaszać jakiekolwiek roszczenia.O(n2)
Powyższy algorytm może być postrzegany jako wariant przemiatania płaszczyzny zaproponowany w pierwszym artykule (Shan, Zhang i Salzberg), ale zamiast używać osi i braku sortowania, oś między zestawami jest używana, a zestawy są trawersowane w porządku malejącym / rosnącym.x
źródło
Możesz dostosować algorytm „linii najbliższej pary” , którym jest .O(nlogn)
Jedyne, co musisz zrobić, to zignorować pary należące do tego samego zestawu.
Edycja: W rzeczywistości nie jest to proste (ani nawet możliwe), jak opisałem. Zobacz komentarze do dyskusji.
źródło
Ideą w takich problemach jest stworzenie uporządkowanej struktury z jednego z zestawów, który umożliwia wydajne zapytania Najbliższego sąsiada. Klasyczny artykuł, który przedstawiał strukturę zapytań O (log n) dla dowolnego wymiaru, brzmiał:
Shamos i Hoey o rozwiązaniach Voronoi
Od tego czasu powstało wiele innych partycji kosmicznych opartych na pomysłach teselacji Delauney, które przekładają się również na różne opisy przeciągnięć podprzestrzeni. Zauważ, że metoda Voronoi również podlegałaby ogólnemu opisowi podziału i podboju ze względu na jej podział na płaszczyzny, który powoduje etap budowy O (n log n).
Podstawowym rozwiązaniem tego problemu jest:
Jak widać patrząc na złożoność każdego kroku, całkowita złożoność wynosi O (n log n). Dla współczesnego czytelnika, który nie patrzy na klasyczne artykuły, jest to omówione w wielu książkach z algorytmami, np. „Podręcznik projektowania algorytmów” Skieny.
źródło
Dolna granica tego problemu to w algebraicznym modelu drzewa decyzyjnego. Podam tutaj przybliżony szkic tego dowodu.O(n∗logn)
Zmniejszymy wystąpienie problemu odróżnienia elementu E do C.
Wiemy, że dolna granica środowiska wykonawczego w celu podjęcia decyzji o problemie z odrębnością elementów to . Dlatego redukcja dolnej granicy dotyczy również naszego problemu.O(n∗logn)
źródło