0% found this document useful (0 votes)
52 views66 pages

Computational Geometry: Range Trees

This document discusses 2D range trees, which can be used to efficiently solve 2D range query problems. It introduces the concept of a 2D range tree, which preprocess a set of points in the plane in O(n log n) time into a data structure of O(n) size that can answer 2D range queries in O(√n + k) time, where k is the number of reported results. It also discusses how the data structure can be modified to achieve O(log n + k) query time by representing the possible query types and storing the answers at the leaves. Each internal node stores a separate tree to search on the y-coordinate, requiring O(n log n) total storage.

Uploaded by

Shervin Naseri
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
0% found this document useful (0 votes)
52 views66 pages

Computational Geometry: Range Trees

This document discusses 2D range trees, which can be used to efficiently solve 2D range query problems. It introduces the concept of a 2D range tree, which preprocess a set of points in the plane in O(n log n) time into a data structure of O(n) size that can answer 2D range queries in O(√n + k) time, where k is the number of reported results. It also discusses how the data structure can be modified to achieve O(log n + k) query time by representing the possible query types and storing the answers at the leaves. Each internal node stores a separate tree to search on the y-coordinate, requiring O(n log n) total storage.

Uploaded by

Shervin Naseri
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
You are on page 1/ 66

Introduction

2D Range trees
Degenerate cases

Range trees

Computational Geometry

Lecture 8: Range trees

1 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Database queries
G. Ometer
born: Aug 16, 1954
salary salary: $3,500

A database query may ask for


all employees with age
between a1 and a2 , and salary
between s1 and s2

19,500,000 19,559,999
date of birth
2 Computational Geometry Lecture 8: Range trees
Introduction
2D Range trees Range queries
Degenerate cases

Result

Theorem: A set of n points on the real line can be


preprocessed in O(n log n) time into a data structure of O(n)
size so that any 1D range [counting] query can be answered in
O(log n [+k]) time

3 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Result

Theorem: A set of n points in the plane can be preprocessed


in O(n log n) time into a data structure of O(n) size so that

any 2D range query can be answered in O( n + k) time,
where k is the number of answers reported

For range counting queries, we need O( n) time

4 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries

Can we achieve O(log n [+k]) query time?

5 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries

Can we achieve O(log n [+k]) query time?

6 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries

If the corners of the query rectangle fall in specific cells of the


grid, the answer is fixed (even for lower left and upper right
corner)

7 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries
Build a tree so that the leaves correspond to the different
possible query rectangle types (corners in same cells of grid),
and with each leaf, store all answers (points) [or: the count]

Build a tree on the different x-coordinates (to search with left


side of R), in each of the leaves, build a tree on the different
x-coordinates (to search with the right side of R), in each of
the leaves, . . .

8 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries

9 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries

Question: What are the storage requirements of this


structure, and what is the query time?

10 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Faster queries

Recall the 1D range tree and range query:


Two search paths (grey nodes)
Subtrees in between have answers exclusively (black)

11 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Example 1D range query

A 1-dimensional range query with [25, 90]

49

23 80
10 37 62 89

3 19 30 49 59 70 89 93

3 10 19 23 30 37 59 62 70 80 93 97

12 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Example 1D range query

A 1-dimensional range query with [61, 90]

49
split node
23 80
10 37 62 89

3 19 30 49 59 70 89 93

3 10 19 23 30 37 59 62 70 80 93 97

13 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Examining 1D range queries

Observation: Ignoring the search path leaves, all answers are


jointly represented by the highest nodes strictly between the
two search paths

Question: How many highest nodes between the search


paths can there be?

14 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Examining 1D range queries

For any 1D range query, we can identify O(log n) nodes that


together represent all answers to a 1D range query

15 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Toward 2D range queries

For any 2d range query, we can identify O(log n) nodes that


together represent all points that have a correct first
coordinate

16 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Toward 2D range queries

(1, 5) (3, 8) (4, 2) (5, 9) (6, 7) (7, 3) (8, 1) (9, 4)

17 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Toward 2D range queries

(1, 5) (3, 8) (4, 2) (5, 9) (6, 7) (7, 3) (8, 1) (9, 4)

18 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Toward 2D range queries

data structure
for searching on
y-coordinate

(1, 5) (3, 8) (4, 2) (5, 9) (6, 7) (7, 3) (8, 1) (9, 4)

19 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees Range queries
Degenerate cases

Toward 2D range queries

(5, 9)
(3, 8)
(6, 7)
(1, 5)
(9, 4)
(7, 3)
(4, 2)
(8, 1)

(1, 5) (3, 8) (4, 2) (5, 9) (6, 7) (7, 3) (8, 1) (9, 4)

20 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range trees

Every internal node stores a whole tree in an associated


structure, on y-coordinate

Question: How much storage does this take?

21 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Storage of 2D range trees

To analyze storage, two arguments can be used:


By level: On each level, any point is stored exactly once.
So all associated trees on one level together have O(n)
size
By point: For any point, it is stored in the associated
structures of its search path. So it is stored in O(log n) of
them

22 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Construction algorithm

Algorithm Build2DRangeTree(P)
1. Construct the associated structure: Build a binary search
tree T assoc on the set Py of y-coordinates in P
2. if P contains only one point
3. then Create a leaf ν storing this point, and make
Tassoc the associated structure of ν.
4. else Split P into Pleft and Pright , the subsets ≤ and >
the median x-coordinate xmid
5. νleft ← Build2DRangeTree(Pleft )
6. νright ← Build2DRangeTree(Pright )
7. Create a node ν storing xmid , make νleft the left
child of ν, make νright the right child of ν, and
make Tassoc the associated structure of ν
8. return ν
23 Computational Geometry Lecture 8: Range trees
Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Efficiency of construction

The construction algorithm takes O(n log2 n) time

T(1) = O(1)

T(n) = 2 · T(n/2) + O(n log n)

which solves to O(n log2 n) time

24 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Efficiency of construction

Suppose we pre-sort P on y-coordinate, and whenever we split


P into Pleft and Pright , we keep the y-order in both subsets

For a sorted set, the associated structure can be built in linear


time

25 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Efficiency of construction

The adapted construction algorithm takes O(n log n) time

T(1) = O(1)

T(n) = 2 · T(n/2) + O(n)

which solves to O(n log n) time

26 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range queries

How are queries performed and why are they correct?


Are we sure that each answer is found?
Are we sure that the same point is found only once?

27 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range queries

ν
p

µ µ0 p p

28 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Query algorithm

Algorithm 2DRangeQuery(T, [x : x0 ] × [y : y0 ])
1. νsplit ←FindSplitNode(T, x, x0 )
2. if νsplit is a leaf
3. then report the point stored at νsplit , if an answer
4. else ν ← lc(νsplit )
5. while ν is not a leaf
6. do if x ≤ xν
7. then 1DRangeQ(Tassoc (rc(ν)), [y : y0 ])
8. ν ← lc(ν)
9. else ν ← rc(ν)
10. Check if the point stored at ν must be reported.
11. Similarly, follow the path from rc(νsplit ) to x0 . . .

29 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range query time

Question: How much time does a 2D range query take?

Subquestions: In how many associated structures do we


search? How much time does each such search take?

30 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range queries

µ µ0

31 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range query efficiency

We search in O(log n) associated structures to perform a 1D


range query; at most two per level of the main tree

The query time is O(log n) × O(log m + k0 ), or

∑ O(log nν + kν )
ν

where ∑ kν = k the number of points reported

32 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range query efficiency

Use the concept of grey and black nodes again:

33 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range query efficiency

The number of grey nodes is O(log2 n)

The number of black nodes is O(k) if k points are reported

The query time is O(log2 n + k), where k is the size of the


output

34 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Result

Theorem: A set of n points in the plane can be preprocessed


in O(n log n) time into a data structure of O(n log n) size so
that any 2D range query can be answered in O(log2 n + k)
time, where k is the number of answers reported

Recall that a kd-tree has O(n) size and answers queries in



O( n + k) time

35 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Efficiency


n log n log2 n n
16 4 16 4
64 6 36 8
256 8 64 16
1024 10 100 32
4096 12 144 64
16384 14 196 128
65536 16 256 256
1M 20 400 1K
16M 24 576 4K

36 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

2D range query efficiency

Question: How about range counting queries?

37 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Higher dimensional range trees

A d-dimensional range tree has


a main tree which is a
one-dimensional balanced
binary search tree on the first
coordinate, where every node
has a pointer to an associated
structure that is a
(d − 1)-dimensional range tree
on the other coordinates

38 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Storage

The size Sd (n) of a d-dimensional range tree satisfies:

S1 (n) = O(n) for all n

Sd (1) = O(1) for all d

Sd (n) ≤ 2 · Sd (n/2) + Sd−1 (n) for d ≥ 2

This solves to Sd (n) = O(n logd−1 n)

39 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Query time

The number of grey nodes Gd (n) satisfies:

G1 (n) = O(log n) for all n

Gd (1) = O(1) for all d

Gd (n) ≤ 2 · log n + 2 · log n · Gd−1 (n) for d ≥ 2

This solves to Gd (n) = O(logd n)

40 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Result

Theorem: A set of n points in d-dimensional space can be


preprocessed in O(n logd−1 n) time into a data structure of
O(n logd−1 n) size so that any d-dimensional range query can
be answered in O(logd n + k) time, where k is the number of
answers reported

Recall that a kd-tree has O(n) size and answers queries in


O(n1−1/d + k) time

41 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Comparison for d = 4

n log n log4 n n3/4


1024 10 10,000 181
65,536 16 65,536 4096
1M 20 160,000 32,768
1G 30 810,000 5,931,641
1T 40 2,560,000 1G

42 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

We can improve the query time of a 2D range tree from


O(log2 n) to O(log n) by a technique called fractional
cascading

This automatically lowers the query time in d dimensions to


O(logd−1 n) time

43 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

The idea illustrated best by a different query problem:

Suppose that we have a collection of sets S1 , . . . , Sm , where


|S1 | = n and where Si+1 ⊆ Si
We want a data structure that can report for a query
number x, the smallest value ≥ x in all sets S1 , . . . , Sm

44 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

1 2 3 5 8 13 21 34 55 S1

1 3 5 8 13 21 34 55 S2

1 3 13 21 34 55 S3

3 34 55 S4

45 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

1 2 3 5 8 13 21 34 55 S1

1 3 5 8 13 21 34 55 S2

1 3 13 21 34 55 S3

3 34 55 S4

46 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

1 2 3 5 8 13 21 34 55 S1

1 3 5 8 13 21 34 55 S2

1 3 13 21 34 55 S3

3 34 55 S4

47 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

Suppose that we have a collection of sets S1 , . . . , Sm , where


|S1 | = n and where Si+1 ⊆ Si
We want a data structure that can report for a query
number x, the smallest value ≥ x in all sets S1 , . . . , Sm

This query problem can be solved in O(log n + m) time instead


of O(m · log n) time

48 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

Can we do something similar for m 1-dimensional range


queries on m sets S1 , . . . , Sm ?

We hope to get a query time of O(log n + m + k) with k the


total number of points reported

49 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

1 2 3 5 8 13 21 34 55 S1

1 3 5 8 13 21 34 55 S2

1 3 13 21 34 55 S3

3 34 55 S4

50 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

1 2 3 5 8 13 21 34 55 S1

1 3 5 8 13 21 34 55 S2

1 3 13 21 34 55 S3

3 34 55 S4

51 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Improving the query time

[6,35]

1 2 3 5 8 13 21 34 55 S1

1 3 5 8 13 21 34 55 S2

1 3 13 21 34 55 S3

3 34 55 S4

52 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

Now we do “the same” on the associated structures of a


2-dimensional range tree

Note that in every associated structure, we search with the


same values y and y0
Replace all associated structures except for the one of
the root by a linked list
For every list element (and leaf of the associated
structure of the root), store two pointers to the
appropriate list elements in the lists of the left child and
of the right child

53 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

54 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

55 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

17

8 52
5 15 33 58

2 7 12 17 21 41 58 67

2 5 7 8 12 15 21 33 41 52 67 93
(2, 19) (7, 10) (12, 3) (17, 62) (21, 49) (41, 95) (58, 59) (93, 70)
(5, 80) (8, 37) (15, 99) (33, 30) (52, 23) (67, 89)

56 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

3 10 19 23 30 37 49 59 62 70 80 89 95 99

3 10 19 37 62 80 99 23 30 49 59 70 89 95

10 19 37 80 3 62 99 23 30 49 95 59 70 89

19 80 10 37 3 99 62 30 49 23 95 59 70 89

19 80 10 37 3 99 49 30 95 23 89 70

57 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

[4, 58] × [19, 65]


17

8 52
5 15 33 58

2 7 12 17 21 41 58 67

2 5 7 8 12 15 21 33 41 52 67 93
(2, 19) (7, 10) (12, 3) (17, 62) (21, 49) (41, 95) (58, 59) (93, 70)
(5, 80) (8, 37) (15, 99) (33, 30) (52, 23) (67, 89)

58 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

3 10 19 23 30 37 49 59 62 70 80 89 95 99

3 10 19 37 62 80 99 23 30 49 59 70 89 95

10 19 37 80 3 62 99 23 30 49 95 59 70 89

19 80 10 37 3 99 62 30 49 23 95 59 70 89

19 80 10 37 3 99 49 30 95 23 89 70

59 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

3 10 19 23 30 37 49 59 62 70 80 89 95 99

3 10 19 37 62 80 99 23 30 49 59 70 89 95

10 19 37 80 3 62 99 23 30 49 95 59 70 89

19 80 10 37 3 99 62 30 49 23 95 59 70 89

19 80 10 37 3 99 49 30 95 23 89 70

60 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Fractional cascading

Instead of doing a 1D range query on the associated structure


of some node ν, we find the leaf where the search to y would
end in O(1) time via the direct pointer in the associated
structure in the parent of ν

The number of grey nodes reduces to O(log n)

61 Computational Geometry Lecture 8: Range trees


Construction
Introduction
Querying
2D Range trees
Higher dimensions
Degenerate cases
Fractional cascading

Result

Theorem: A set of n points in d-dimensional space can be


preprocessed in O(n logd−1 n) time into a data structure of
O(n logd−1 n) size so that any d-dimensional range query can
be answered in O(logd−1 n + k) time, where k is the number of
answers reported

Recall that a kd-tree has O(n) size and answers queries in


O(n1−1/d + k) time

62 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees
Degenerate cases

Degenerate cases

Both for kd-trees and for range


trees we have to take care of
multiple points with the same
x- or y-coordinate

63 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees
Degenerate cases

Degenerate cases

Both for kd-trees and for range


trees we have to take care of
multiple points with the same
x- or y-coordinate

64 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees
Degenerate cases

Degenerate cases

Treat a point p = (px , py ) with two reals as coordinates as a


point with two composite numbers as coordinates

A composite number is a pair of reals, denoted (a|b)

We let (a|b) < (c|d) iff a < c or ( a = c and b < d ); this


defines a total order on composite numbers

65 Computational Geometry Lecture 8: Range trees


Introduction
2D Range trees
Degenerate cases

Degenerate cases

The point p = (px , py ) becomes ( (px |py ) , (py |px ) ). Then no


two points have the same first or second coordinate

The median x-coordinate or y-coordinate is a composite


number

The query range [x : x0 ] × [y : y0 ] becomes

[(x| − ∞) : (x0 | + ∞)] × [(y| − ∞) : (y0 | + ∞)]

We have (px , py ) ∈ [x : x0 ] × [y : y0 ] iff


( (px |py ) , (py |px ) ) ∈ [(x| − ∞) : (x0 | + ∞)] × [(y| − ∞) : (y0 | + ∞)]

66 Computational Geometry Lecture 8: Range trees

You might also like