220 likes | 369 Views
Orthogonal Range Search. deBerg et. al (Chap.5). 1D Range Search. Data stored in balanced binary search tree T Input: range tree T and range [x,x ’ ] Output: all points in the range. Find split node
E N D
Orthogonal Range Search deBerg et. al (Chap.5)
1D Range Search • Data stored in balanced binary search tree T • Input: range tree T and range [x,x’] • Output: all points in the range
Find split node From split node, find path to m, the node x; report all right subtree along the path From split node, find path to m’, the node x’; report all left subtree along the path Check m and m’ split-node x’ x Idea
Performance • T: O(n) storage, built in O(nlogn) • Query: • Worst case: Q(n) … sounds bad • Refined analysis (output-sensitive) • Output k: ReportSubTree O(k) • Traverse tree down to m or m’: O(logn) • Total: O(logn + k)
2D Kd-tree for 2D range search • Kd-tree: special case of BSP • Input: [x,x’][y,y’] • Output: all points in range
Build kd-tree Break at median n/2 nodes Left (and bottom) child stores the splitting line
Step-by-Step (left subtree) 4 9 6,7,8,9,10 1,2,3,4,5 5 10 2 7 1 8 3 6
4 9 6,7,8,9,10 5 10 2 4,5 1,2,3 7 1 8 3 6
4 9 6,7,8,9,10 5 10 2 4,5 7 1 8 3 3 1,2 6
4 9 6,7,8,9,10 5 10 2 4,5 7 1 8 3 3 6 2 1
4 9 6,7,8,9,10 5 10 2 7 1 8 3 3 6 5 4 2 1
Range Search Kd-Tree • Idea: • Traverse the kd-tree; visit only nodes whose region intersected by query rectangle • If region is fully contained, report the subtree • If leaf is reached, query the point against the range
Algorithm v lc(v) rc(v) rc(v) v lc(v)
Example l1 l1 l2 l3 l2 l3
Region Intersection & Containment • Each node in kd-tree implies a region in 2D (k-d in general): [xl,xh]×[yl,yh] • Each region can be derived from the defining vertex and region of parent • Note: the region can be unbounded • The query rectangle: [x, x’]×[y, y’] • Containment: • [xl,xh] [x, x’] [yl,yh] [y, y’] • Intersection test can be done in a similar way
1(-4,0) 2(0,3) 3(1,2) 4(3,-3) 2 3 1 4 Example (-,)×(-,) (-,0]×(-,) 4 3 1 2
1(-4,0) 2(0,3) 3(1,2) 4(3,-3) 2 3 1 4 Example (-,)×(-,) (-,0]×(-,) 4 3 (-,0]×(-,0] 1 2
1(-4,0) 2(0,3) 3(1,2) 4(3,-3) 2 3 1 4 Example (-,)×(-,) (0,)×(-,) 4 3 1 2
1(-4,0) 2(0,3) 3(1,2) 4(3,-3) 2 3 1 4 Example (-,)×(-,) (0,)×(-,) (0,)×(-3,) 4 3 1 2
Homework • Research on linear algorithm for median finding. Write a summary. • Build a kd-tree of the points on the following page. • Do the range query according to the algorithm on p.13 • Detail the region of each node and intersection/containment check
b a c f e g h d Read off coordinate from the sketching layout, e.g., a=(-4,2) Query rectangle = [-2,4]×[-1,3]