Biorąc pod uwagę zbiór punktów i promień . Co jest złożonością znalezienia punktu o większej liczbie punktów w odległości mniejszej niż . Np. Ten, który maksymalizuje ?
Algorytm brutalnej siły polegałby na przejściu każdego punktu i zliczeniu liczby punktów znajdujących się w odległości mniejszej niż . Dałoby to złożoność .
Czy istnieje lepsze podejście?
ball
z tytułu musi pochodzić ze zbioru?) Jednym z pomysłów może być oszacowanie, czy promień jest niewielki w porównaniu ze średnią odległością do najbliższego sąsiada, czy też rzędu średnicy (i rozważyć podejścia do tych ekstremów (przeciągnięcie samolotu dla małego ) i szeroka przestrzeń pomiędzy nimi).Odpowiedzi:
Wygląda na to, że algorytm podliniowy dla problemu zliczania zasięgu kulki nie jest jeszcze znany.
Jeśli jednak możesz zaakceptować nieprecyzyjną odpowiedź, możesz przybliżyć dysk za pomocą zestawu kwadratów o różnej orientacji. Dla każdej orientacji musisz zbudować Drzewo zasięgu , które pozwoli ci policzyć wszystkie punkty wewnątrz kwadratu w czasie czas (k - liczba wynikowych punktów).O ( l o g2)( n ) + k )
Każde drzewo zakresu będzie wymagało pamięci , im lepsze przybliżenie, tym więcej orientacji należy użyć. Na przykład dwie orientacje dają ośmiokąt , który przybliża dysk z błędem powierzchni mniejszym niż 6%.O ( n ⋅ l o g( n ) )
źródło
Odpowiedź nie jest taka prosta, istnieje zaawansowane badanie tego pytania w teorii złożoności; wydaje się, że jest badany np. jako następujący problem, który koncentruje się wokół szybkich zapytań „zliczania zakresu sferycznego”. Tak, możliwe są ulepszone granice teoretyczne, ale wydają się to abstrakcyjne algorytmy, które nie zostały przez nikogo zaimplementowane. Jeśli chcesz rzeczywistych implementacji, to inne pytanie.
źródło