У меня есть набор данных из приблизительно 100 000 (X, Y) пар, представляющих точки в 2D пространстве. Для каждой точки я хочу найти ее k-ближайших соседей.
Итак, мой вопрос: какая структура данных/алгоритм будет подходящим выбором, если я хочу полностью свести к минимуму общее время работы?
Я не ищу код - просто указатель на подходящий подход. Меня немного обескураживает ряд вариантов, которые кажутся уместными - четыре дерева, R-деревья, kd-деревья и т.д.
Я думаю, что лучший подход - построить структуру данных, а затем запустить какой-то поиск k-Nearest Neighbor для каждой точки. Однако, поскольку (а) я знаю моменты заранее, и (б) я знаю, что я должен запускать поиск по каждой точке ровно один раз, возможно, есть лучший подход?
Дополнительные сведения:
- Так как я хочу свести к минимуму все время работы, мне все равно, если большая часть времени будет потрачена на структуру vs search.
- Партии (X, Y) довольно хорошо распределены, поэтому мы можем предполагать почти равномерное распределение.