Geometric Search
range search quad- and kD-trees • range search • quad and kd trees intersection search • intersection search VLSI rules checking • VLSI rules check
References: Algorithms 2nd edition, Chapter 26-27
Intro to Algs and Data Structs, Section
Copyright © 2007 by Robert Sedgewick and Kevin Wayne. 3
Overview 1D Range Search
Types of data. Points, lines, planes, polygons, circles, ... Extension to symbol-table ADT with comparable keys. This lecture. Sets of N objects. ! Insert key-value pair. ! Search for key k.
! Geometric problems extend to higher dimensions. How many records have keys between k1 and k2?
! ! Good algorithms also extend to higher dimensions. Iterate over all records with keys between k1 and k2. ! Curse of dimensionality. Application: database queries. Basic problems. ! Range searching. insert B B ! Nearest neighbor. insert D B D insert A A B D ! Finding intersections of geometric objects. Geometric intuition. insert I A B D I ! Keys are point on a line. insert H A B D H I ! How many points in a given interval? insert F A B D F H I insert P A B D F H I P count G to K 2 search G to K H I
2 4 1D Range search: implementations 2D Orthogonal range Ssearch: Grid implementation
Range search. How many records have keys between k1 and k2? Grid implementation. [Sedgewick 3.18] ! Divide space into M-by-M grid of squares.
! Ordered array. Slow insert, binary search for k1 and k2 to find range. Create linked list for each square. Hash table. No reasonable algorithm (key order lost in hash). ! Use 2D array to directly access relevant square. ! Insert: insert (x, y) into corresponding grid square. BST. In each node x, maintain number of nodes in tree rooted at x. ! Range search: examine only those grid squares that could have points in the rectangle. Search for smallest element ! k1 and largest element " k2.
insert count range RT
ordered array N log N R + log N
hash table 1 N N
BST log N log N R + log N
nodes examined N = # records LB R = # records that match within interval not touched
5 7
2D Orthogonal Range Search 2D Orthogonal Range Search: Grid Implementation Costs
Extension to symbol-table ADT with 2D keys. Space-time tradeoff. ! Insert a 2D key. ! Space: M2 + N. ! Search for a 2D key. ! Time: 1 + N / M2 per grid cell examined on average. ! Range search: find all keys that lie in a 2D range? ! Range count: how many keys lie in a 2D range? Choose grid square size to tune performance. ! Too small: wastes space. Applications: networking, circuit design, databases. ! Too large: too many points per grid square. ! Rule of thumb: !N by !N grid.
Geometric interpretation. Running time. [if points are evenly distributed] ! Keys are point in the plane ! Initialize: O(N). M " !N RT ! Find all points in a given h-v rectangle ! Insert: O(1). ! Range: O(1) per point in range.
LB
6 8 Clustering Space Partitioning Trees
Grid implementation. Fast, simple solution for well-distributed points. Use a tree to represent a recursive subdivision of d-dimensional space. Problem. Clustering is a well-known phenomenon in geometric data. BSP tree. Recursively divide space into two regions. Quadtree. Recursively divide plane into four quadrants. Octree. Recursively divide 3D space into eight octants. kD tree. Recursively divide k-dimensional space into two half-spaces.
Applications. ! Ray tracing.
! Ex: USA map data. Flight simulators. ! N-body simulation. 13,000 points, 1000 grid squares. ! Collision detection.
! Astronomical databases. Grid kD tree ! Adaptive mesh generation. ! Accelerate rendering in Doom. half the squares are empty half the points are ! Hidden surface removal and shadow casting. in 10% of the squares
Lists are too long, even though average length is short. Quadtree BSP tree Need data structure that gracefully adapts to data. 9 11
Quadtree
Recursively partition plane into 4 quadrants.
Implementation: 4-way tree. public class QuadTree { actually a trie private Quad quad; partitioning on bits of coordinates private Value value; private QuadTree NW, NE, SW, SE; range searching } (0..., 1...) b
c quad- and kD-trees a d intersection a h VLSI rules checking d e f g e
f b c g h
(01..., 00...)
Primary reason to choose quad trees over grid methods: good performance in the presence of clustering
10 12 Curse of Dimensionality Near Neighbor Search
Range search / nearest neighbor in k dimensions? Useful extension to symbol-table ADT for records with metric keys. Main application. Multi-dimensional databases. ! Insert a k dimensional point. ! Near neighbor search: given a point p, which point in data structure 3D space. Octrees: recursively divide 3D space into 8 octants. is nearest to p? 100D space. Centrees: recursively divide into 2100 centrants??? Need concept of distance, not just ordering.
kD trees provide fast, elegant solution. ! Recursively search subtrees that could have near neighbor (may search both). ! O(log N) ?
Raytracing with octrees http://graphics.cs.ucdavis.edu/~gregorsk/graphics/275.html
13 15
2D Trees kD Trees
Recursively partition plane into 2 halfplanes. kD tree. Recursively partition k-dimensional space into 2 halfspaces.
Implementation: BST, but alternate using x and y coordinates as key. Implementation: BST, but cycle through dimensions ala 2D trees. ! Search gives rectangle containing point. ! Insert further subdivides the plane.
p
level ! i (mod k) p
points points whose ith whose ith p coordinate coordinate is greater than p’s points points is less than p’s left of p right of p even levels Efficient, simple data structure for processing k-dimensional data. q ! adapts well to clustered data.
! q adapts well to high dimensional data. ! widely used. points points ! discovered by an undergrad in an algorithms class! above q below q odd levels 14 16 Summary Search for intersections
Basis of many geometric algorithms: search in a planar subdivision. Problem. Find all intersecting pairs among set of N geometric objects. Applications. CAD, games, movies, virtual reality.
intersecting grid 2D tree Voronoi diagram lines Simple version: 2D, all objects are horizontal or vertical line segments. basis $N h-v lines N points N points $N lines
2D array N-node representation N-node BST ~N-node BST of N lists multilist
cells ~N squares N rectangles N polygons ~N triangles
search cost 1 log N log N log N
cells too use (k-1)D extend to kD? too many cells easy complicated hyperplane
Brute force. Test all #(N2) pairs of line segments for intersection. Sweep line. Efficient solution extends to 3D and general objects.
17 19
Orthogonal segment intersection search: Sweep-line algorithm
Sweep vertical line from left to right. ! x-coordinates define events. ! left endpoint of h-segment: insert y coordinate into ST. ! right endpoint of h-segment: remove y coordinate from ST. ! v-segment: range search for interval of y endpoints. range search quad- and kD-trees intersection search VLSI rules checking
insert y range search delete y 18 20 Orthogonal Segment Intersection: Sweep Line Algorithm Sweep Line Event
Reduces 2D orthogonal segment intersection search to 1D range search!
Running time of sweep line algorithm. public class Event implements Comparable
! Delete y-coordinate from SET. O(N log N) public Event(int time, SegmentHV segment) ! Range search. O(R + N log N) { this.time = time; this.segment = segment; } Efficiency relies on judicious use of data structures. public int compareTo(Event b) { return a.time - b.time; } }
21 23
Immutable H-V segment ADT Sweep-line algorithm: Initialize events
public final class SegmentHV implements Comparable
(x, y1) (x1, y) (x2, y)
horizontal segment vertical segment
22 24 Sweep-line algorithm: Simulate the sweep line Line Segment Intersection: Implementation
int INF = Integer.MAX_VALUE; Efficient implementation of sweep line algorithm. ! Maintain PQ of important x-coordinates: endpoints and intersections. SET
if (segment.isVertical()) ! Degeneracy. { ! Floating point precision. SegmentHV seg1, seg2; ! seg1 = new SegmentHV(-INF, segment.y1, -INF, segment.y1); Use PQ, not presort (intersection events are unknown ahead of time). seg2 = new SegmentHV(+INF, segment.y2, +INF, segment.y2); for (SegmentHV seg : set.range(seg1, seg2)) System.out.println(segment + " intersects " + seg); }
else if (sweep == segment.x1) set.add(segment); else if (sweep == segment.x2) set.remove(segment); }
25 27
General line segment intersection search
Use horizontal sweep line moving from left to right. ! Maintain order of segments that intersect sweep line by y-coordinate. ! Intersections can only occur between adjacent segments. ! Add/delete line segment % one new pair of adjacent segments. ! Intersection % swap adjacent segments. range searching quad- and kD-trees intersection A B VLSI rules checking
C insert segment D delete segment A AB ABC ACB ACBD ACD CAD CA A intersection
order of segments 26 28 Algorithms and Moore's Law Algorithms and Moore's Law
Rectangle intersection search. Find all intersections among h-v rectangles. "Moore’s Law." Processing power doubles every 18 months. ! 197x: need to check N rectangles. Application. Design-rule checking in VLSI circuits. ! 197(x+1.5): need to check 2N rectangles on a 2x-faster computer.
Bootstrapping: we get to use the faster computer for bigger circuits
But bootstrapping is not enough if using a quadratic algorithm ! 197x: takes M days. ! 197(x+1.5): takes (4M)/2 = 2M days. (!)
quadratic 2x-faster algorithm computer
O(N log N) CAD algorithms are necessary to sustain Moore’s Law. 29 31
Algorithms and Moore's Law Rectangle intersection search
Early 1970s: microprocessor design became a geometric problem. Move a vertical "sweep line" from left to right. ! Very Large Scale Integration (VLSI). ! Sweep line: sort rectangles by x-coordinate and process in this order, ! Computer-Aided Design (CAD). stopping on left and right endpoints. ! Maintain set of intervals intersecting sweep line. Design-rule checking: ! Key operation: given a new interval, does it intersect one in the set? ! certain wires cannot intersect ! certain spacing needed between different types of wires ! debugging = rectangle intersection search
30 32 Interval Search Trees Interval Search Trees
(7, 10) (20, 22) (7, 10) (20, 22)
(5, 11) (17, 19) (5, 11) (17, 19)
(4, 8) (15, 18) (4, 8) (15, 18)
Support following operations. Interval tree implementation with BST. ! Insert an interval (lo, hi). ! Each BST node stores one interval. (17, 19) 22 ! Delete the interval (lo, hi). ! BST nodes sorted on lo endpoint. ! Search for an interval that intersects (lo, hi). ! Additional info: store and maintain (5, 11) 18 (20, 22) 22 max endpoint in subtree rooted at node. Non-degeneracy assumption. No intervals have the same x-coordinate.
(4, 8) 8 (15, 18) 18
(7, 10) 10
33 35
Interval Search Trees Finding an intersecting interval
Search for an interval that intersects (lo, hi). (7, 10) (20, 22)
Node x = root; (5, 11) (17, 19) while (x != null) { (4, 8) (15, 18) if (x.interval.intersects(lo, hi)) return x.interval; else if (x.left == null) x = x.right; else if (x.left.max < lo) x = x.right; else x = x.left; } Interval tree implementation with BST. return null; ! Each BST node stores one interval. (17, 19) ! use lo endpoint as BST key. Case 1. If search goes right, no overlap in left. ! (x.left == null) % trivial. (5, 11) (20, 22) ! (x.left.max < lo) % for any interval (a, b) in left subtree of x, we have b " max < lo.
reason for (4, 8) (15, 18) defn of max max going right
(a, b) (lo,hi)
(7, 10) left subtree of x
34 36 Finding an Intersecting Interval Rectangle intersection sweep-line algorithm: Review
Search for an interval that intersects (lo, hi). Move a vertical "sweep line" from left to right.
! Node x = root; Sweep line: sort rectangles by x-coordinates and process in this order. while (x != null) ! Store set of rectangles that intersect the sweep line in an interval { if (x.interval.intersects(lo, hi)) return x.interval; search tree (using y-interval of rectangle). else if (x.left == null) x = x.right; ! Left side: interval search for y-interval of rectangle, insert y-interval. else if (x.left.max < lo) x = x.right; else x = x.left; ! Right side: delete y-interval. } return null;
Case 2. If search goes left, then either (i) there is an intersection in left subtree or (ii) no intersections in either subtree. Pf. Suppose no intersection in left. Then for any interval (a, b) in right subtree, a ! c > hi % no intersection in right.
max intervals sorted no intersection by left endpoint in left subtree (lo,hi) (c,max) (a, b)
left subtree of x right subtree of x
37 39
Interval Search Tree: Analysis VLSI Rules checking: Sweep-line algorithm (summary)
Implementation. Use a red-black tree to guarantee performance. Reduces 2D orthogonal rectangle intersection search to 1D interval search!
can maintain auxiliary information using log N extra work per op Running time of sweep line algorithm. ! Sort by x-coordinate. O(N log N) ! Insert y-interval into ST. O(N log N) N = # line segments ! Operation Worst case Delete y-interval from ST. O(N log N) R = # intersections ! Interval search. O(R log N) insert interval log N delete interval log N find an interval that intersects (lo, hi) log N Efficiency relies on judicious extension of BST. find all intervals that intersect (lo, hi) R log N
N = # intervals R = # intersections
38 40 Geometric search summary: Algorithms of the day
1D range search BST
kD range search kD tree
1D interval interval tree intersection search
2D orthogonal line sweep line reduces to intersection search 1D range search
2D orthogonal rectangle sweep line reduces to intersection search 1D interval intersection search
41