Mamy listę x, y par. Każda para reprezentuje punkt w przestrzeni 2D. Chcę znaleźć najbliższy punkt z tej listy, do określonego punktu xq, yq. Jaki jest najlepszy algorytm krytyczny pod względem wydajności dla tego problemu? Lisp punktów nie zmieni się; co oznacza, że nie muszę wykonywać operacji wstawiania i usuwania. Chcę właśnie znaleźć najbliższy sąsiad docelowego xq, punkt yq w tym zbiorze.Najlepszy algorytm krytyczny wydajności dla rozwiązywania najbliższego sąsiada
Edytuj 1: Dziękujemy wszystkim! Stephan202 prawidłowo odgadł, chcę to zrobić wielokrotnie; jak funkcja. Lista niekoniecznie jest posortowana (W rzeczywistości nie rozumiem, jak można ją posortować - podobnie jak w przypadku tabeli z kluczem podstawowym z 2 kolumn ai y? Jeśli to pomoże, to ją posortuję).
Po raz pierwszy skonstruuję strukturę danych na podstawie tej listy, a następnie wykorzystam tę wygenerowaną strukturę danych w funkcji (jeśli ten proces sam w sobie jest istotny).
Dziękuję Jacob; Wygląda na to, że struktura danych KD-Tree jest dobrym kandydatem do bycia odpowiedzią (I czuję, że to jest.) Aktualizuję, gdy otrzymam odpowiednie wyniki).
Edycja 2: Zauważyłem, że ten problem nazywa się "najbliższy sąsiad"!
Edycja 3: Pierwszy tytuł brzmiał "W poszukiwaniu algorytmu (dla przestrzennego kwerendy i indeksowania przestrzennego) (najbliższy sąsiad)"; Wybrałem nowy tytuł: "Najlepszy algorytm wydajności - krytyczny dla rozwiązywania najbliższego sąsiada". Ponieważ nie chcę wykonywać operacji wstawiania i usuwania na moich początkowych danych i chcę, aby najbliższy od nich do nowego punktu (który nie zostanie wstawiony), wybrałem (obecnie) pracę na KD-Drzew. Dziękuje za wszystko!
Czy istnieje pewna struktura na liście (czy jest np. Posortowana)? Czy chcesz powtórzyć tę operację, czy zostanie wykonana raz? Są to istotne informacje, które ludzie będą potrzebować, aby odpowiedzieć na twoje pytanie. – Stephan202
Czy masz dostęp do przestrzennej bazy danych? –
Jeśli lista jest nieposortowana, a operacja zostanie wykonana tylko raz, będziesz musiał przeprowadzić wyszukiwanie liniowe na liście, a zatem nie może ona być lepsza niż O (n). Jeśli chcesz powtórzyć operację, musisz utworzyć odpowiednią (drzewną) reprezentację listy na podstawie wartości x i y elementu. – Stephan202