Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
R*-tree
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|A variant of R-trees used for indexing spatial information}} {{Infobox data structure |name=R*-tree |invented_by=Norbert Beckmann, [[Hans-Peter Kriegel]], Ralf Schneider, and Bernhard Seeger |invented_year=1990 | |insert_avg ={{math|O(log ''n'')}} |space_avg ={{math|O(''n'')}} |space_worst ={{math|O(''n'')}} |search_avg ={{math|O(log ''n'')}} }} In [[data processing]] '''R*-trees''' are a variant of [[R-tree]]s used for indexing spatial information. R*-trees have slightly higher construction cost than standard R-trees, as the data may need to be reinserted; but the resulting tree will usually have a better query performance. Like the standard R-tree, it can store both point and spatial data. It was proposed by Norbert Beckmann, [[Hans-Peter Kriegel]], Ralf Schneider, and Bernhard Seeger in 1990.<ref name="rstar">{{Cite book | last1 = Beckmann | first1 = N. | last2 = Kriegel | first2 = H. P. | author-link2 = Hans-Peter Kriegel| last3 = Schneider | first3 = R. | last4 = Seeger | first4 = B. | chapter = The R*-tree: an efficient and robust access method for points and rectangles | doi = 10.1145/93597.98741 | title = Proceedings of the 1990 ACM SIGMOD international conference on Management of data - SIGMOD '90 | pages = 322 | year = 1990 | isbn = 0897913655 | url = https://infolab.usc.edu/csci599/Fall2001/paper/rstar-tree.pdf}}</ref> ==Difference between R*-trees and R-trees== [[Image:RTree 2D.svg|thumb|350px|R*-Tree built by repeated insertion (in [[Environment for DeveLoping KDD-Applications Supported by Index-Structures|ELKI]]). There is little overlap in this tree, resulting in good query performance. Red and blue MBRs are index pages, green MBRs are leaf nodes.]] Minimization of both coverage and overlap is crucial to the performance of R-trees. Overlap means that, on data query or insertion, more than one branch of the tree needs to be expanded (due to the way data is being split in regions which may overlap). A minimized coverage improves pruning performance, allowing exclusion of whole pages from search more often, in particular for negative range queries. The R*-tree attempts to reduce both, using a combination of a revised node split algorithm and the concept of forced reinsertion at node overflow. This is based on the observation that R-tree structures are highly susceptible to the order in which their entries are inserted, so an insertion-built (rather than bulk-loaded) structure is likely to be sub-optimal. Deletion and reinsertion of entries allows them to "find" a place in the tree that may be more appropriate than their original location. When a node overflows, a portion of its entries are removed from the node and reinserted into the tree. (In order to avoid an indefinite cascade of reinsertions caused by subsequent node overflow, the reinsertion routine may be called only once in each level of the tree when inserting any one new entry.) This has the effect of producing more well-clustered groups of entries in nodes, reducing node coverage. Furthermore, actual node splits are often postponed, causing average node occupancy to rise. Re-insertion can be seen as a method of incremental tree optimization triggered on node overflow. The R*-tree describes three metrics by which the quality of a split can be quantified. These being overlap (common between R*-trees and R-trees), defined as the intersection area of the bounding boxes of two clusters; Area-value, being the sum of the area of two cluster bounding boxes and Margin-value being the sum of the perimeters of two cluster bounding boxes. ==Performance== *Improved split heuristic produces pages that are more rectangular and thus better for many applications. *Reinsertion method optimizes the existing tree but increases complexity. *Efficiently supports point and spatial data at the same time. {{clear}} {{Gallery |title=Effect of different splitting heuristics on a database with Germany postal districts |width=300 | height=300 | align=center |File:Zipcodes-Germany-GuttmanRTree.svg|R-Tree with Guttman quadratic split.<ref name="guttman">{{Cite book | last1 = Guttman | first1 = A. | chapter = R-Trees: A Dynamic Index Structure for Spatial Searching| doi = 10.1145/602259.602266 | title = Proceedings of the 1984 ACM SIGMOD international conference on Management of data - SIGMOD '84 | pages = 47 | year = 1984 | isbn = 0897911288 | url = http://www-db.deis.unibo.it/courses/SI-LS/papers/Gut84.pdf}}</ref><br /> There are many pages that extend from east to west all over Germany, and pages overlap a lot. This is not beneficial for most applications, that often only need a small rectangular area that intersects with many slices. |File:Zipcodes-Germany-AngTanSplit.svg|R-Tree with Ang-Tan linear split.<ref name="ang-tan">{{cite conference | last1= Ang | first1 = C. H. | last2 = Tan | first2 = T. C. | editor1-first = Michel | editor1-last = Scholl | editor2-first = AgnΓ¨s | editor2-last = Voisard | year = 1997 | title = New linear node splitting algorithm for R-trees | book-title = Proceedings of the 5th International Symposium on Advances in Spatial Databases (SSD '97), Berlin, Germany, July 15β18, 1997 | volume = 1262 |series=Lecture Notes in Computer Science | publisher=Springer | pages = 337β349 | doi = 10.1007/3-540-63238-7_38}}</ref><br /> While the slices do not extend as far as with Guttman, the slicing problem affects almost every leaf page. Leaf pages overlap little, but directory pages do. |File:Zipcodes-Germany-RStarTree.svg|R*-tree topological split.<ref name="rstar" /><br /> The pages overlap very little since the R*-tree tries to minimize page overlap, and the reinsertions further optimized the tree. The split strategy also does not prefer slices, so the resulting pages are much more useful for common map applications. }} ==Algorithm and complexity== * The R*-tree uses the same algorithm as the regular [[R-tree]] for query and delete operations. * When inserting, the R*-tree uses a combined strategy. For leaf nodes, overlap is minimized, while for inner nodes, enlargement and area are minimized. * When splitting, the R*-tree uses a topological split that chooses a split axis based on perimeter, then minimizes overlap. * In addition to an improved split strategy, the R*-tree also tries to avoid splits by reinserting objects and subtrees into the tree, inspired by the concept of balancing a [[B-tree]]. Worst case query and delete complexity are thus identical to the R-Tree. The insertion strategy to the R*-tree is with <math>\mathcal{O}(M \log M)</math> more complex than the linear split strategy (<math>\mathcal{O}(M)</math>) of the R-tree, but less complex than the quadratic split strategy (<math>\mathcal{O}(M^2)</math>) for a page size of <math>M</math> objects and has little impact on the total complexity. The total insert complexity is still comparable to the R-tree: reinsertions affect at most one branch of the tree and thus <math>\mathcal{O}(\log n)</math> reinsertions, comparable to performing a split on a regular R-tree. So, on overall, the complexity of the R*-tree is the same as that of a regular R-tree. An implementation of the full algorithm must address many corner cases and tie situations not discussed here. ==References== {{reflist}} ==External links== * {{commons category-inline}} {{CS trees}} {{Data structures}} {{DEFAULTSORT:R Tree}} [[Category:R-tree]] [[Category:Database index techniques]] [[de:R-Baum]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:CS trees
(
edit
)
Template:Cite book
(
edit
)
Template:Clear
(
edit
)
Template:Commons category-inline
(
edit
)
Template:Data structures
(
edit
)
Template:Gallery
(
edit
)
Template:Infobox data structure
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)