Was ist der Unterschied zwischen einem KD-Baum und einem R-Baum?

81

Ich habe mir die Definition von KD-Baum und R-Baum angesehen. Es scheint mir, dass sie fast gleich sind.

Was ist der Unterschied zwischen einem KD-Baum und einem R-Baum?

zjffdu
quelle

Antworten:

60

R-Bäume und k d-Bäume basieren auf ähnlichen Ideen (Raumaufteilung basierend auf achsenausgerichteten Regionen), aber die Hauptunterschiede sind:

  • Knoten in k d -Bäumen repräsentieren Trennebenen, während Knoten in R-Bäumen Begrenzungsrahmen darstellen.
  • k d-Bäume unterteilen den gesamten Raum in Regionen, während R-Bäume nur die Teilmenge des Raums aufteilen, die die interessierenden Punkte enthält.
  • k d-Bäume stellen eine disjunkte Partition dar (Punkte gehören nur zu einer Region), während sich die Regionen in einem R-Baum überlappen können.

(Es gibt viele ähnliche Arten von Baumstrukturen zum Aufteilen von Raum: Quadtrees, BSP-Bäume, R * -Bäume usw. usw.)

Gareth Rees
quelle
106

Sie sind eigentlich ganz anders. Sie dienen einem ähnlichen Zweck (Regionsabfragen zu Geodaten) und sind beide Bäume (und beide gehören zur Familie der Bindevolumenhierarchieindizes), aber das ist ungefähr alles, was sie gemeinsam haben.

  • R-Bäume sind ausgeglichen , kd-Bäume nicht (es sei denn, sie werden in großen Mengen geladen). Aus diesem Grund werden R-Bäume zum Ändern von Daten bevorzugt, da kd-Bäume möglicherweise neu erstellt werden müssen, um sie erneut zu optimieren.
  • R-Bäume sind festplattenorientiert . Sie organisieren die Daten tatsächlich in Bereichen, die direkt der Darstellung auf der Festplatte zugeordnet sind. Dies macht sie nützlicher in realen Datenbanken und für den Betrieb ohne Speicher. kd-Bäume sind speicherorientiert und nicht trivial in Disk-Seiten zu legen
  • kd-Bäume sind elegant, wenn sie in großen Mengen geladen werden (ein großes Lob an SingleNegationElimination, um darauf hinzuweisen), während R-Bäume besser zum Ändern von Daten geeignet sind (obwohl sie bei Verwendung mit statischen Daten vom Massenladen profitieren).
  • R-Bäume decken nicht den gesamten Datenraum ab. Leere Bereiche können freigelegt werden. kd-bäume bedecken immer den gesamten raum.
  • kd-Bäume binär teilen den Datenraum, R-Bäume teilen die Daten in Rechtecke . Die binären Teilungen sind offensichtlich disjunkt; während sich die Rechtecke eines R-Baums überlappen können (was tatsächlich manchmal gut ist, obwohl man versucht, Überlappungen zu minimieren)
  • kd-Bäume sind viel einfacher im Speicher zu implementieren, was eigentlich ihr Hauptvorteil ist
  • R-Bäume können Rechtecke und Polygone speichern , kd-Bäume speichern nur Punktvektoren (da für Polygone eine Überlappung erforderlich ist)
  • R-Bäume kommen mit verschiedenen Optimierungsstrategien, verschiedenen Splits, Bulk-Loadern, Einfügungs- und Wiedereinsetzstrategien usw.
  • kd-Bäume verwenden den eindimensionalen Abstand zur trennenden Hyperebene als gebunden; R-Bäume verwenden den d-dimensionalen Mindestabstand zum begrenzenden Hyperrechteck für die Begrenzung (sie können auch den maximalen Abstand für einige Zählabfragen verwenden, um echte Positive zu filtern).
  • kd-Bäume unterstützen die quadratische euklidische Entfernung und die Minkowski-Normen, während Rtrees nachweislich auch die geodätische Entfernung unterstützen (zum Auffinden von Nahpunkten auf Geodaten).
Hat aufgehört - Anony-Mousse
quelle
37

Ein Hauptunterschied zwischen den beiden in dieser Antwort nicht erwähnten ist, dass KD-Bäume nur in Massenladesituationen effizient sind. Einmal erstellt, ist das Ändern oder Neuausgleichen eines KD-Baums nicht trivial. R-Bäume leiden nicht darunter.

SingleNegationElimination
quelle