Range Searching

advertisement
Computational Geometry
Piyush Kumar
(Lecture 5: Range Searching)
Welcome to CIS5930
Range Searching : recap
1D Range search
kD trees
Range Trees
Fractional Cascading
Range Searching
Preprocess a set P of objects for efficiently answering
queries.
Typically, P is a collection of geometric objects (points,
rectangles, polygons) in Rd.
Query Range, Q : d-rectangles, balls, halfspaces, simplices,
etc..
Either count all objects in P  Q or report the objects
themselves.
Courtesy Bhosle 
Example: Points in R2
Q1
Q2
Applications





Databases
Spatial databases (G.I.S.)
Computer Graphics
Robotics
Vision
Range Trees (1D)
6
2
4 5
17
7 8
12
15
7
19
4
Counting ?
Reporting?
12
2
2
5
4
5
8
7
8
15
12
15
19
Range Trees (2d)
P1
P2
P3
P4
P5
P6
P7
P8
Query and Space Complexity
(counting)
1D
 Query : O(log n) Space: O(n)
2D
 Query : O(log n) Space O(nlogn)
 Construction time : O(nlogn)
d-D
 Query : O(logd-1n) Space: O(nlogd-1n)
 Construction time : O(nlogd-1n)
Kd-Trees
a typical struct
 Int
cut_dim;
 Double cut_val;
 Int
size;
// dim orthogonal to cutting plane
// location of cutting plane
// number of points in subtree
The best implementation of kd-trees I know of:
 http://www.cs.umd.edu/~mount/ANN/
 Look at kd_tree.cc and kd_tree.h
kD-Trees (k-dimensional Trees)
1-d tree : split along median point and recursively build
subtrees for the left and right sets.
Higher dimensions : same approach, but cycle through the
dimensions. Or, select the next dimension as the one with
the widest spread.
Efficiency of query processing drops as dimensions
increase (becomes almost linear). However, the space
requirement remains linear : O(n.d)
kD-Trees (Contd.)
c
o
m
d
f
l
n
a
b
g
e
j
k
h
i
f
k
h
a
n
b
d
o
i
c
j
g
l
e
m
kD-Trees (Contd.)
Query complexity : How many cells can a query box
intersect ?
Let us consider a facet of the query
• Any axis parallel line can intersect atmost 2 of these 4 cells.
• Each of these 4 cells contain exactly n/4 points.
Q(n) = 2.Q(n/4) + 1
Q(n) = O(n1/2)
i.e. Query answered in O(n1-1/d + m) time where m is the output size
Kd-Tree
Summarizing
 Building (preprocessing time): O(n log n)
 Size: O(n)
 Range queries: O(sqrt(n)+k)
In higher dimensions
 Building: O(dnlogn)
 Size: O(dn)
 Counting Query: O(n1-1/d)
QuadTrees
4-way partitions
Linear space
Used in real life more than kd-trees
Octrees
3D Version of Quadtrees
8 child nodes
Applications





Range searching
Collision detection
Mesh generation
Visibility Culling
Computer games
General Sets of points
We assumed till now that the x,y
coordinates of the points are distinct
and do not overlap the coordinates of
the query.
How do we relax this?
More on the Chalk board…
Download