Мне придется согласиться с Дж. К. и Эваном в создании диаграммы Вороного . Это разделит пространство на многоугольники. Каждая точка в K будет иметь многоугольник, описывающий все точки, которые находятся ближе всего к ней.
Теперь, когда вы получаете запрос к точке, вам нужно найти, в каком полигоне она лежит. Эта проблема называется Расположение точки и может быть решена путем построения Трапециевидной карты .
jk уже связано с созданием диаграммы Вороного с использованием алгоритма Фортуны , который выполняет O (n log n) вычислительных шагов и стоит O (n) пространства.
Этот веб-сайт показывает, как сделать трапециевидную карту и как ее запросить. Вы также можете найти некоторые границы там:
Ожидаемое время создания: O (n log n)
Ожидаемая сложность пространства: O (n)
Но самое главное, ожидаемое время запроса: O (log n). Это (теоретически) лучше, чем O (& radic; n) kD-дерева.
Мой источник (кроме ссылок выше): Вычислительная геометрия: алгоритмы и приложения , главы шесть и седьмая.
Там вы найдете подробную информацию о двух структурах данных (включая подробные доказательства). Версия книг Google содержит только часть того, что вам нужно, но других ссылок должно быть достаточно для вашей цели. Просто купите книгу, если вы заинтересованы в подобных вещах (это хорошая книга).