R-tree - Алгоритм удаления с помощью повторной вставки

Я пытаюсь реализовать R-дерево в scala, следуя рекомендациям из оригинальная статья о структуре R-дерева. В разделе алгоритма удаления указано:

Повторно вставьте все записи узлов в набор Q. Записи из удаленных конечных узлов повторно вставляются в листья дерева, как описано в разделе Вставка, но записи из узлов более высокого уровня должны быть размещены выше в дереве, чтобы листья их зависимые поддеревья будут находиться на том же уровне, что и листья главного дерева.

Не могу уложить в голове последнюю часть. Что означает higher level nodes must be placed higher in the tree? Как это реализовано? Моя идея заключалась в том, что я удаляю узлы, которые переполняются, добавляю их в набор Q (их записи) и, в конце концов, повторно вставляю их записи, используя Insert. Это неправильно или частично правильно, что требует чего-то дополнительного? Если бы вы могли объяснить, используя примеры, это было бы здорово.


person JimS    schedule 13.10.2019    source источник


Ответы (2)


Узлы должны быть повторно вставлены на правильной высоте, иначе дерево станет недействительным. Помните, что все листья должны быть на одном уровне.

person Has QUIT--Anony-Mousse    schedule 13.10.2019
comment
Зачем мне снова размещать узлы? Если я возьму записи исключенных узлов и вставлю их заново, разве это не сработает? Или мне пройти через корень, сравнивая с mbr узла, и повторно прикрепить поддерево? - person JimS; 14.10.2019
comment
Вы хотите повторно присоединить целые поддеревья. - person Has QUIT--Anony-Mousse; 14.10.2019

Вставка и удаление значений в R-Tree — достаточно затратная операция, когда нужно поддерживать его оптимально сбалансированным для быстрого окна или ближайших запросов, особенно в многопоточной среде.

Более эффективным подходом является использование одного модуля записи (актора или потока), который собирает обновления пакетами, упаковывает новый экземпляр R-Tree и публикует его в какой-либо изменчивой переменной для чтения.

Здесь приведено сравнение некоторых реализаций R-Tree, которые можно использовать в таких путь от Scala.

person Andriy Plokhotnyuk    schedule 18.10.2019
comment
Да, я знаю об этом подходе, но я пытаюсь реализовать алгоритм, как указано в статье. Можете ли вы объяснить, как работает повторное подключение узла? - person JimS; 20.10.2019