Я ищу структуру данных, которая поддерживает поиск, какая из «n» областей содержит точку «p». Я смотрел на Quadtree и R-деревья, но не думаю, что они подходят именно тому, что я ищу.
По сути, я хочу иметь возможность добавить некоторое количество трехмерных прямоугольных областей к этому дереву, а затем иметь возможность проверить трехмерную точку на этом дереве и вернуть, какая область наиболее сильно ограничивает точку. Границы регионов не будут пересекаться.
Наивный алгоритм, который я сейчас использую, состоит в том, чтобы просто проверить точку «p» по каждому измерению каждой прямоугольной области.
for(region in regionList):
if(p.x > region.x1 && p.x < region.x2 && p.y > region.y1 && py < region.y2 && p.z > region.z1 && p.z < region.z2)
return region
end
Это выполняется за время O (n), где n - количество регионов. Я хотел бы, чтобы поиск брал O (log n), как точка Quadtree для поиска 2d точек.