Найти все ограничивающие прямоугольники, пересекающиеся с заданной точкой (используя древовидную структуру)

Я создал функцию, которая перебирает список двумерных ограничивающих рамок и находит те, которые содержат заданную двумерную точку. К сожалению, это довольно медленно, поэтому я искал способ оптимизировать его, используя какую-то древовидную структуру.

Я видел много вопросов, основанных на поиске точек внутри блоков, но ни одного для поиска блоков из точки. Я знаю, как сделать пересечение, поэтому меня интересует только древовидная структура. Я думал, что дерево квадрантов может подойти, но я не уверен, как оно справится с дублированием ограничивающих рамок в разных узлах.

Было бы лучше использовать какое-то двоичное дерево поиска, в котором я рекурсивно разделяю оси x и y (например, срединный разрез)?


person LoweredTone    schedule 20.11.2014    source источник
comment
подойдет, это мой первый вопрос, так что не понял!   -  person LoweredTone    schedule 21.11.2014


Ответы (1)


Я предлагаю вам использовать дерево сегментов.

Посмотрите на эти слайды:

http://algo.kaust.edu.sa/Documents/cs372l07.pdf

вы особенно ищете решение для колющих запросов в более высоких измерениях (слайд 25)

person Juan Leni    schedule 20.11.2014
comment
Спасибо, это выглядит идеально для поиска ограничивающей рамки, так как хорошо справляется с перекрытиями и имеет скорость бинарного поиска. - person LoweredTone; 21.11.2014