Операция разделения дерева квадрантов

У меня проблемы с пониманием операции разделения дерева квадрантов. Скажем, максимальное количество элементов, которые может содержать узел, равно 2; когда мы добавляем третий элемент, мы создаем четыре подузла. Вопрос в том, сохраняет ли родительский узел свои 2 элемента, а тот, который вызвал переполнение, вставляется в дочерний узел или все три узла вставляются в подузлы?


person mrk    schedule 25.10.2013    source источник


Ответы (1)


Все три узла вставляются в дочерний узел. Только узел листьев может содержать некоторые данные в дереве.

Это может иметь значение, например, для kd-tree, где пространственный раздел больше ориентирован на данные, а не на фиксированные разделы пространства, что позволяет экономить память. С другой стороны, разделы с фиксированным пространством проще в обращении и даже могут быть предварительно вычислены для еще более быстрого доступа.

person sansuiso    schedule 25.10.2013
comment
Спасибо! Но что содержит родительский узел, если все три вставлены вниз по дереву? - person mrk; 26.10.2013
comment
Родительский узел (как и любой промежуточный узел) содержит указатели (или эквивалент) на своих 4 дочерних элементах. Вы знаете, что можете получить доступ к данным, когда узел больше не является дочерним. - person sansuiso; 26.10.2013
comment
Фактически, в статье Википедии о деревьях квадрантов есть псевдокод, который использует внутренние узлы для хранения. Когда узел переполняется, элемент переполнения вставляется в подузел. - person mrk; 26.10.2013
comment
Что произойдет, если есть узел, содержащий 2 больших круга, и я добавлю 3-й большой? Узел разбивается на 4 дочерних элемента, и все теперь 3 круга могут пересекаться с дочерними элементами, поэтому все они добавляются к каждому дочернему элементу. Но каждый ребенок должен разделиться, так как они могут удерживать только 2 круга, и цикл продолжается до бесконечности. Что не так с моим пониманием? - person ColOfAbRiX; 09.07.2015