Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 28

Interval Trees

Store intervals of the form [li,ri], li <= ri. An interval is stored in exactly 1 node. So, O(n) nodes. 3 versions. Differing capability.

Version 1
Store intervals of the form [li,ri], li <= ri. At least 1 interval per node. Static interval set. Report all intervals that intersect/overlap a given interval [l,r].

DefinitionVersion 1
A binary tree. Each node v has a point v.pt and two lists v.left and v.right. u.pt < v.pt for nodes u in left subtree of v. u.pt > v.pt for nodes u in right subtree of v. So, it is a binary search tree on pt.

DefinitionVersion 1
Intervals with ri < v.pt are stored in the left subtree of v. Intervals with li > v.pt are stored in the right subtree of v. Intervals with li <= v.pt <= ri are stored in v.
v.left has these intervals sorted by li. v.right has these intervals sorted by ri.

Example
1e 2
2

f
4 5

c
3

d
6

7
L

v.pt = 4 L = {a, e} R = {d}

v.left = {c, f, b} v.right = {c,b,f}

Properties
Each interval is stored in exactly one node. Each node stores between 1 and n intervals. Number of nodes is O(n). Sum of sizes of left and right lists is O(n). Tree height depends on how you choose the points v.pt.

Selection of v.pt
v is the median of the end points of the intervals stored in the subtree rooted at v.
1e 2
2

f
4 5

c
3

d
6

End points = {1, 2, 3, 4, 5, 6, 7} Use 4 as v.pt.

Selection of v.pt
With median selection, tree height is O(log n). Median selection is possible only for static interval set. So, no inserts/deletes. Could relax to support insert/delete.

Find All Overlapping Intervals


Query interval is [l,r]. v.pt e [l,r]
All intervals in v overlap. Search L and R for additional overlapping intervals.
l r v

Find All Overlapping Intervals


v.pt < l
Intervals in v with ri >= l overlap. No interval in L overlaps. Search R for additional overlapping intervals.
v 4 l r

Find All Overlapping Intervals


v.pt > r
Intervals in v with li <= r overlap. No interval in R overlaps. Search L for additional overlapping intervals.
l r v

Find All Overlapping Intervals


Complexity
O(log n+|output|) nodes encountered All intervals in v overlap. Intervals in v with ri >= l overlap. Intervals in v with li <= r overlap. l r v

O(log n + |output|) when v.left and v.right are sorted arrays.

Version 2
Store intervals of the form [li,ri], li <= ri. Empty nodes permitted. Inserts and deletes. Answer queries of the form: which intervals include the point d.

Inserts & Deletes


Difficult in version 1 because v.pt is median. Select v.pt (almost) arbitrarily and use a red-black tree. Each node stores between 0 and n intervals. At most 2n nodes permissible. Tree height is O(log n).

Need For Empty Nodes


Deletion from a degree 2 node.
20

10 6 15 30

40

2 7

18

25

35

Why Upto 2n Nodes Permissible


When number of nodes > 2n, at least 1 degree 0 or degree 1 node must be empty. Empty degree 0 and 1 nodes are easily removed. So, no need to keep them around. 2n suffices to avoid having to handle empty degree 2 nodes.

LL Rotation
A
B AR

B
BL A

BL

BR

BR

AR

After insertion.

After rotation.

Intervals change only for A and B. Those intervals of A that include B.pt need to be moved into B.

Remaining Rotations
All insert/delete rotations require relocating intervals from O(1) nodes. O(1) rotations per insert/delete. Complexity of insert/delete is O(f(n) + log n), where f(n) is time needed to relocate O(n) intervals from one node to another.

All intervals that contain d


d = v.pt
All intervals in v. Done!
v 4

All intervals that contain d


d < v.pt Intervals in v with large enough left end point. No interval in R overlaps. Search L for additional overlapping intervals. d > v.pt Similar O(log n + |output|)
v 4

Version 3
Store intervals of the form [li,ri], li <= ri. Exactly 1 interval per node. Inserts and deletes. Report just 1 overlapping interval.

Version 3Structure
Red-black tree. Each node has exactly one interval v.int and one point v.max. v.max = max (right) end point of intervals in subtree rooted at v. Binary search tree on intervals. So, need an ordering relation for intervals.

Interval Ordering
Ordered by left end points. Tie breaker for equal left end points. i and j are two intervals. i < j iff li < lj or (li = lj and ri > rj)

i
j

i
j

i j

Example
1e 2
2

f
4 5

c
3

d
6

f,7

e,4 a,3 c,4 b,6

d,7

Version 3Search
Search for an interval that has an overlap with Q = [l,r]
If v.interval and Q overlap, done. Otherwise, if v.leftChild.max >= l search v.leftChild. Otherwise search v.rightChild.
f,7

e,4

d,7

a,3

c,4

b,6

Version 3Search
v.leftChild.max >= l

r max

Version 3LL Rotation


A
B AR

B
BL A

BL

BR

BR

AR

After insertion.

After rotation.

Max values changes only for A and B.


A.max = max{A.interval.right, BR.max, AR.max}. B.max = max{B.interval.right, BL.max, A.max}.

Remaining Rotations
All insert/delete rotations require computing max for O(1) nodes. O(1) rotations per insert/delete. Complexity of insert/delete is O(log n).

You might also like