web-dev-qa-db-fra.com

Quelle est la différence entre un arbre KD et un arbre R?

J'ai regardé la définition de KD-tree et R-tree. Il me semble que ce sont presque les mêmes.

Quelle est la différence entre un arbre KD et un arbre R?

72
zjffdu

R-arbres et kd-trees sont basés sur des idées similaires (partitionnement d'espace basé sur des régions alignées sur l'axe), mais les principales différences sont les suivantes:

  • Noeuds dans kles d-arbres représentent des plans de séparation, tandis que les nœuds des R-arbres représentent des boîtes englobantes.
  • kles d-arbres partitionnent tout l'espace en régions tandis que les R-arbres ne partitionnent que le sous-ensemble de l'espace contenant les points d'intérêt.
  • kles arbres d représentent une partition disjointe (les points appartiennent à une seule région) tandis que les régions d'un arbre R peuvent se chevaucher.

(Il existe de nombreux types d'arborescences similaires pour le partitionnement de l'espace: arbres quadruples, arbres BSP, arbres R *, etc., etc.)

54
Gareth Rees

Ils sont en fait assez différents. Ils ont un objectif similaire (requêtes régionales sur les données spatiales), et ils sont tous les deux des arbres, mais c'est à peu près tout ce qu'ils ont en commun.

  • Les arbres R sont équilibrés, les arbres kd ne le sont pas (sauf s'ils sont chargés en vrac). C'est pourquoi les arbres R sont préférés pour modifier les données, car les arbres kd peuvent avoir besoin d'être reconstruits pour ré-optimiser.
  • Les R-Trees sont orientés disque. Ils organisent en fait les données dans des zones qui correspondent directement à la représentation sur disque. Cela les rend plus utiles dans les bases de données réelles et pour un fonctionnement en mémoire insuffisante. les kd-arbres sont orientés mémoire et ne sont pas triviaux à mettre dans les pages du disque
  • Les R-Trees ne couvrent pas tout l'espace de données. Des zones vides peuvent être découvertes. Les arbres kd couvrent toujours tout l'espace.
  • kd-trees division binaire l'espace de données, r-trees partitionne les données en rectangles. Les divisions binaires sont évidemment disjointes; tandis que les rectangles d'un arbre r peuvent se chevaucher (ce qui est en fait parfois bon, bien que l'on essaie de minimiser le chevauchement)
  • les arbres kd sont beaucoup plus faciles à implémenter en mémoire, ce qui est en fait leur principal avantage
  • Les arbres R peuvent stocker rectangles et polygones, les arbres kd ne stockent que des vecteurs ponctuels (car un chevauchement est nécessaire pour les polygones)
  • Les arbres R sont livrés avec diverses stratégies d'optimisation, différentes divisions, chargeurs en vrac, stratégies d'insertion et de réinsertion, etc.
  • Les arbres Kd supportent la distance euclidienne au carré et les normes de Minkowski, tandis que Rtrees s'est également avéré prendre en charge la distance géodésique (pour trouver des points proches sur les géodonnées).
95
Anony-Mousse

Une différence majeure entre les deux non mentionnés dans cette réponse est que les arbres KD ne sont efficaces que dans des situations de chargement en masse. Une fois construit, modifier ou rééquilibrer un arbre KD n'est pas anodin. Les arbres R n'en souffrent pas.