Я бы назвал пространственный индекс, такой как kd-tree или quadtree / octree (который вы предложили) или, возможно, решение на основе R-Tree.
Поместите все ваши центроиды в индекс.Обычно вы можете связать любую точку в индексе с некоторыми дополнительными данными, поэтому, если вам это нужно, вы можете указать обратный тренд в сетках, например, координаты сетки).
Поиск ближайшей точки в индекседолжно быть очень быстроЗатем возвращенные данные позволяют вам вернуться в сетку.
В некотором смысле, квадродерево / октодерево само по себе является ничем иным, как дискретной сеткой, которая становится лучше, если плотность точек увеличивается.Разница с сеткой заключается в том, что она иерархическая и что пустые области вообще не хранятся.