В чем разница между KD-деревом и R-деревом?

Я посмотрел на определение KD-дерева и R-дерева. Мне кажется, что они почти одинаковы.

в чем разница между KD-деревом и R-деревом?

3 ответов


R-деревьев и kd-деревья основаны на аналогичных идеях (разделение пространства на основе выровненных по оси областей), но ключевые различия:

  • узлы kD-деревья представляют собой разделительные плоскости, тогда как узлы в R-деревьях представляют собой ограничительные рамки.
  • kD-деревья разбивают все пространство на области, тогда как R-деревья разбивают только подмножество пространства, содержащее точки интерес.
  • kD-деревья представляют собой непересекающуюся секцию (точки принадлежат только одной области), тогда как области в R-дереве могут перекрываться.

(существует множество подобных древовидных структур для разделения пространства: quadtrees, BSP-trees, R* - trees и т. д. так далее.)


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

  • R-деревья сбалансированной, KD-деревья не являются (если не загружены навалом). Вот почему R-деревья предпочтительны для изменения данных, так как KD-деревья могут быть перестроены для повторной оптимизации.
  • R-деревья диск-ориентированный. Они фактически организуют данные в областях, которые непосредственно отображают к представлению на диске. Это делает их более полезными в реальных базах данных и для памяти. кд-деревья памяти-ориентированной и нетривиальны для размещения на дисковых страницах
  • R-деревья не охватывают все пространство данных. Пустые области могут быть раскрыты. KD-деревья всегда покрывают все пространство.
  • KD-деревьев двоичное разделение пространство данных, r-деревья разделяют данные на прямоугольников. Двоичные расщепления, очевидно, непересекающиеся; в то время как прямоугольники r-дерева могут перекрываться (что на самом деле иногда хорошо, хотя и пытаются минимизировать перекрытие)
  • KD-деревья намного проще реализовать в памяти, что на самом деле является их ключевым преимуществом
  • R-деревья могут хранить прямоугольники и многоугольники, KD-деревья хранят только точечные векторы (так как перекрытие необходимо для полигонов)
  • R-деревья приходят с различными стратегиями оптимизирования, различными разделениями, Куск-затяжелителями, вводом и reinsertion стратегии и т. д.

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