HOME

TheInfoList



OR:

In
computer science Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
, a range tree is an
ordered tree In graph theory, a tree is an undirected graph in which any two vertices are connected by ''exactly one'' path, or equivalently a connected acyclic undirected graph. A forest is an undirected graph in which any two vertices are connected by '' ...
data structure In computer science, a data structure is a data organization, management, and storage format that is usually chosen for Efficiency, efficient Data access, access to data. More precisely, a data structure is a collection of data values, the rel ...
to hold a list of points. It allows all points within a given range to be
reported Dive is a Belgian electronic dance music project formed in 1990 by Dirk Ivens (Absolute Body Control, Klinik, Blok 57, Sonar). Dive's "audio trademark" is the experimental sound of abused drum machines, pulsating through crackling distortion ...
efficiently, and is typically used in two or higher dimensions. Range trees were introduced by
Jon Louis Bentley Jon Louis Bentley (born February 20, 1953) is an American computer scientist who is credited with the heuristic-based partitioning algorithm ''k''-d tree. Education and career Bentley received a B.S. in mathematical sciences from Stanford Uni ...
in 1979. Similar data structures were discovered independently by Lueker, Lee and Wong, and Willard. The range tree is an alternative to the ''k''-d tree. Compared to ''k''-d trees, range trees offer faster query times of (in Big O notation) O(\log^dn+k) but worse storage of O(n\log^ n), where ''n'' is the number of points stored in the tree, ''d'' is the dimension of each point and ''k'' is the number of points reported by a given query.
Bernard Chazelle Bernard Chazelle (born November 5, 1955) is a French-American computer scientist. He is currently the Eugene Higgins Professor of Computer Science at Princeton University. Much of his work is in computational geometry, where he is known for hi ...
improved this to query time O(\log^ n + k) and space complexity O\left(n\left(\frac\right)^\right).


Data structure

A range tree on a set of 1-dimensional points is a balanced
binary search tree In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and ...
on those points. The points stored in the tree are stored in the leaves of the tree; each internal node stores the largest value of its left subtree. A range tree on a set of points in ''d''-dimensions is a recursively defined multi-level
binary search tree In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a rooted binary tree data structure with the key of each internal node being greater than all the keys in the respective node's left subtree and ...
. Each level of the data structure is a binary search tree on one of the ''d''-dimensions. The first level is a binary search tree on the first of the ''d''-coordinates. Each vertex ''v'' of this tree contains an associated structure that is a (''d''−1)-dimensional range tree on the last (''d''−1)-coordinates of the points stored in the subtree of ''v''.


Operations


Construction

A 1-dimensional range tree on a set of ''n'' points is a binary search tree, which can be constructed in O(n \log n) time. Range trees in higher dimensions are constructed recursively by constructing a balanced binary search tree on the first coordinate of the points, and then, for each vertex ''v'' in this tree, constructing a (''d''−1)-dimensional range tree on the points contained in the subtree of ''v''. Constructing a range tree this way would require O(n \log ^d n) time. This construction time can be improved for 2-dimensional range trees to O(n \log n). Let ''S'' be a set of ''n'' 2-dimensional points. If ''S'' contains only one point, return a leaf containing that point. Otherwise, construct the associated structure of ''S'', a 1-dimensional range tree on the ''y''-coordinates of the points in ''S''. Let ''x''m be the median ''x''-coordinate of the points. Let ''S''L be the set of points with ''x''-coordinate less than or equal to ''x''m and let ''S''R be the set of points with ''x''-coordinate greater than ''x''m. Recursively construct ''v''L, a 2-dimensional range tree on ''S''L, and ''v''R, a 2-dimensional range tree on ''S''R. Create a vertex ''v'' with left-child ''v''L and right-child ''v''R. If we sort the points by their ''y''-coordinates at the start of the algorithm, and maintain this ordering when splitting the points by their ''x''-coordinate, we can construct the associated structures of each subtree in linear time. This reduces the time to construct a 2-dimensional range tree to O(n \log n), and also reduces the time to construct a ''d''-dimensional range tree to O(n \log^ n).


Range queries

A range query on a range tree reports the set of points that lie inside a given interval. To report the points that lie in the interval 'x''1, ''x''2 we start by searching for ''x''1 and ''x''2. At some vertex in the tree, the search paths to ''x''1 and ''x''2 will diverge. Let ''v''split be the last vertex that these two search paths have in common. For every vertex ''v'' in the search path from ''v''split to ''x''1, if the value stored at ''v'' is greater than ''x''1, report every point in the right-subtree of ''v''. If ''v'' is a leaf, report the value stored at ''v'' if it is inside the query interval. Similarly, reporting all of the points stored in the left-subtrees of the vertices with values less than ''x''2 along the search path from ''v''split to ''x''2, and report the leaf of this path if it lies within the query interval. Since the range tree is a balanced binary tree, the search paths to ''x''1 and ''x''2 have length O(\log n). Reporting all of the points stored in the subtree of a vertex can be done in linear time using any
tree traversal In computer science, tree traversal (also known as tree search and walking the tree) is a form of graph traversal and refers to the process of visiting (e.g. retrieving, updating, or deleting) each node in a tree data structure, exactly once. ...
algorithm. It follows that the time to perform a range query is O(\log n + k), where ''k'' is the number of points in the query interval. Range queries in ''d''-dimensions are similar. Instead of reporting all of the points stored in the subtrees of the search paths, perform a (''d''−1)-dimensional range query on the associated structure of each subtree. Eventually, a 1-dimensional range query will be performed and the correct points will be reported. Since a ''d''-dimensional query consists of O(\log n) (''d''−1)-dimensional range queries, it follows that the time required to perform a ''d''-dimensional range query is O(\log^ n + k), where ''k'' is the number of points in the query interval. This can be reduced to O(\log^ n + k) using a variant of fractional cascading.


See also

* ''k''-d tree * Segment tree *
Range searching In computer science, the range searching problem consists of processing a set ''S'' of objects, in order to determine which objects from ''S'' intersect with a query object, called the ''range''. For example, if ''S'' is a set of points correspond ...


References


External links


Range and Segment Trees
in
CGAL The Computational Geometry Algorithms Library (CGAL) is an open source software library of computational geometry algorithms. While primarily written in C++, Scilab bindings and bindings generated with SWIG (supporting Python and Java for now ...
, the Computational Geometry Algorithms Library.
Lecture 8: Range Trees
Marc van Kreveld.
Range Trees
using PAM, the parallel augmented map library. {{CS-Trees Trees (data structures) Geometric data structures