Некоторые идеи:
Производительность может сильно зависеть от характеристик данных.Например, равномерно ли распределены, сгруппированы или иным образом распределены точки данных?
Кроме того, какой тип запроса вы выполняете?Одним из объяснений будет то, что вы используете оконный запрос, который возвращает весь набор точек или его большие части.В этом случае грубая сила всегда будет быстрее.
Может быть, есть изъян в реализации KD-Tree?
Обычно это такИзвестно, что kD-деревья плохо масштабируются при высокой размерности.Так, например, в машинном обучении размерность часто уменьшается примерно до 10-20. Однако, если вы не используете грубую силу на GPU, KD-Tree должен работать быстрее.
Если вы ищете структурыкоторые лучше масштабируются при больших размерах (вставка / запрос окна), посмотрите на R * Trees или PH-Tree (последний является саморекламой и в настоящее время ограничен 60размеры, но версия с высокой яркостью будет выпущена на этой неделе).Для поиска k-ближайшего соседа посмотрите CoverTrees или BallTrees .Если вы используете Java, вы можете взглянуть на реализации в my repo .Я также реализовал R * Tree здесь .