• 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 \mathcal{O}(M \log M) more complex than the linear split strategy (\mathcal{O}(M)) of the R-tree, but less complex than the quadratic split strategy (\mathcal{O}(M^2)) for a page size of M 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 \mathcal{O}(\log n) 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==