Download Segment Trees - Advanced Data Structures - Lecture Slides and more Slides Computer Science in PDF only on Docsity!
Segment Trees
- Basic data structure in computational geometry.
- Computational geometry. Computations with geometric objects. Points in 1 -, 2 -, 3 -, d-space. - Closest pair of points. - Nearest neighbor of given point. Lines in 1 -, 2 -, 3 -, d-space. - Machine busy intervals. - IP router-table filters (10*, [20, 60]).
Segment Trees
Rectangles or more general polygons in 2 -space.
- VLSI mask verification.
- Sentry location.
- 2-D firewall filter.
- (source address, destination address)
- (10, 011)
- When addresses are 4 bits long this filter matches addresses in the rectangle ([8,11], [6,7])
8 11
6
7
Source address
Segment Tree Application
- Store intervals of the form [i,j], i < j, i and j are integers. [i,j] may, for example represent the fact that a machine is busy from time i to time j.
- Answer queries of the form: which intervals intersect/overlap with a given unit interval [a,a+1]. List all machines that are busy from 2 to 3.
Segment Tree – Definition
- Binary tree.
- Each node, v, represents a closed interval. s(v) = start of v’s range. e(v) = end of v’s range. s(v) < e(v). s(v) and e(v) are integers. Root range = [1,n].
- e(v) = s(v) + 1 => v is a leaf node (unit interval).
- e(v) > s(v) + 1 => Left child range is [s(v), (s(v) + e(v))/2]. Right child range is [(s(v) + e(v))/2, e(v)].
[3,11] is stored in node p iff all leaves in subtree rooted at p are highlighted and no ancestor of p
Each node of a segment tree contains 0 or more
Which Nodes Are Stored?
Need to store only those nodes that contain intervals
Segment Tree Height
Properties
Each interval is in O(log n) nodes.
- 1, - 1,7 7, - 1,4 4,7 7,10 10,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12, - 1, Store Interval [3,11] - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12,
- 1,2 2, nodes of the segment tree.
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12, - 1, Store Interval [3,11] - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12,
- 1,2 2, satisfies this property.
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10, - 1, Store Interval [4,10] - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12,
- 1,2 2, intervals.
- 2, - 4,5 5, - 5,6 6, - 7,8 8,10 11, - 8,9 9,10 11,12 12, - 4,7 7, - 1, plus the ancestors of these nodes. - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10, - 1, Range = [1,n] => Height <= ceil(log 2 (n-1)) + 1. - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 8,9 9,10 11,12 12,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10, - 1, [i,j] in node v => [i,j] not in any ancestor of v - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10, - 1, [i,j] in node v => [i,j] not in sibling of v - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10, - 1, [i,j] may be in at most 2 nodes at any level. - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10, - 1, Top-Down Insert — [3,11] - 1,7 7,
- 1,2 2,
- 2,3 3, - 4,5 5, - 5,6 6, - 7,8 8,10 10,11 11, - 3,4 8,9 9,10 11,12 12, - 4,7 7, - 10,
Top-Down Insert
insert(s, e, v) {// insert [s,e] into subtree rooted at v if (s <= s(v) && e(v) <= e) add [s,e] to v; // interval spans node range else { if (s < (s(v) + e(v))/2) insert(s,e,v.leftChild); if (e > (s(v) + e(v))/2) insert(s,e,v.rightChild); } }
Complexity Of Insert
1, 1,7 (^) 7,
1,4 4,7 7,10 10,
1,2 2,
2,3 3,
4,5 5,
5,6 6,
8,9 9,10 11,12 12,
Let L and R, respectively, be the leaves for [s,s+1] and [e – 1,e].
1,2 2,
2,3 3,
4,5 5,
5,6 6,
7,8 8,10 10,11 11,
3,4 8,9 9,10 11,12 12,
10,
Top-Down Delete
delete(s, e, v) {// delete [s,e] from subtree rooted at v if (s <= s(v) && e(v) <= e) delete [s,e] from v; // interval spans node range else { if (s < (s(v) + e(v))/2) delete(s,e,v.leftChild); if (e > (s(v) + e(v))/2) delete(s,e,v.rightChild); } }
Search – [a,a+1]
- Follow the unique path from the root to the leaf node for the interval [a,a+1].
- Report all segments stored in the nodes on this unique path.
- No segment is reported twice, because no segment is stored in both a node and the ancestor of this node.
Search – [5,6]
1,
1,4 4,7 7,10 10,
1,2 2,
2,3 3,
4,5 5,
5,6 6,
7,8 8,10 10,11 11,
8,9 9,10 11,12 12,
W
5,
W
W
W W
O(log n + s), where s is the # of segments in the answer.