cse 326: data structures lecture #21 multidimensional search trees
DESCRIPTION
CSE 326: Data Structures Lecture #21 Multidimensional Search Trees. Henry Kautz Winter Quarter 2002. Today’s Outline. Multidimensional search trees Range Queries k -D Trees Quad Trees. 5,2. 2,5. 8,4. 4,2. 3,6. 9,1. 4,4. 1,9. 8,2. 5,7. Multi-D Search ADT. Dictionary operations - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/1.jpg)
1
CSE 326: Data StructuresLecture #21
Multidimensional Search Trees
Henry Kautz
Winter Quarter 2002
![Page 2: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/2.jpg)
2
Today’s Outline
• Multidimensional search trees• Range Queries• k-D Trees• Quad Trees
![Page 3: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/3.jpg)
3
Multi-D Search ADT• Dictionary operations
– create
– destroy
– find
– insert
– delete
– range queries
• Each item has k keys for a k-dimensional search tree• Searches can be performed on one, some, or all the keys
or on ranges of the keys
9,13,64,2
5,78,21,94,4
8,42,5
5,2
![Page 4: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/4.jpg)
4
Applications of Multi-D Search
• Astronomy (simulation of galaxies) - 3 dimensions• Protein folding in molecular biology - 3 dimensions• Lossy data compression - 4 to 64 dimensions• Image processing - 2 dimensions• Graphics - 2 or 3 dimensions• Animation - 3 to 4 dimensions• Geographical databases - 2 or 3 dimensions• Web searching - 200 or more dimensions
![Page 5: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/5.jpg)
5
Range Query
A range query is a search in a dictionary in which the exact key may not be entirely specified.
Range queries are the primary interface
with multi-D data structures.
![Page 6: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/6.jpg)
6
Range Query Examples:Two Dimensions
• Search for items based on just one key
• Search for items based on ranges for all keys
• Search for items based on a function of several keys: e.g., a circular range query
![Page 7: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/7.jpg)
7
x
Range Querying in 1-DFind everything in the rectangle…
![Page 8: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/8.jpg)
8
x
Range Querying in 1-D with a BSTFind everything in the rectangle…
![Page 9: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/9.jpg)
9x
y
1-D Range Querying in 2-D
![Page 10: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/10.jpg)
10x
y
2-D Range Querying in 2-D
![Page 11: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/11.jpg)
11
k-D Trees
• Split on the next dimension at each succeeding level• If building in batch, choose the median along the
current dimension at each level– guarantees logarithmic height and balanced tree
• In general, add as in a BSTk-D tree node
dimension
left right
keys value The dimension thatthis node splits on
![Page 12: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/12.jpg)
12
Find in a k-D Treefind(<x1,x2, …, xk>, root) finds the node which
has the given set of keys in it or returns null if there is no such nodeNode *& find(const keyVector & keys,
Node *& root) {
int dim = root->dimension;
if (root == NULL)
return root;
else if (root->keys == keys)
return root;
else if (keys[dim] < root->keys[dim])
return find(keys, root->left);
else
return find(keys, root->right);
}
runtime:
![Page 13: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/13.jpg)
13
Find Examplefind(<3,6>)find(<0,10>)
5,78,21,94,4
8,42,5
5,2
9,13,64,2
![Page 14: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/14.jpg)
14x
Building a 2-D Tree (1/4)y
![Page 15: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/15.jpg)
15x
y
Building a 2-D Tree (2/4)
![Page 16: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/16.jpg)
16x
y
Building a 2-D Tree (3/4)
![Page 17: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/17.jpg)
17x
y
Building a 2-D Tree (4/4)
![Page 18: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/18.jpg)
18
k-D Tree
ac
ih
m
d
e
f
b
jk
g
l
ldkf
hg
e
cj i mb a
![Page 19: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/19.jpg)
19
x
y
2-D Range Querying in 2-D Trees
Search every partition that intersects the rectangle. Check whether each node (including leaves) falls into the range.
![Page 20: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/20.jpg)
20
Range Query in a 2-D Tree
runtime: O(depth of tree)
print_range(int xlow, xhigh, ylow, yhigh, Node * root) {
if (root == NULL) return;
if ( xlow <= root.x && root.x <= xhigh &&
ylow <= root.y && root.y <= yhigh ){
print(root);
if ((root.dim == “x” && xlow <= root.x ) ||
(root.dim == “y” && ylow <= root.y ))print_range(root.left);
if ((root.dim == “x” && root.x <= xhigh) ||
(root.dim == “y” && root.y <= yhigh)print_range(root.right);
}
![Page 21: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/21.jpg)
21
Range Query in a k-D Tree
runtime: O(N)
print_range(int low[MAXD], high[MAXD], Node * root) {
if (root == NULL) return;
inrange = true;
for (i=0; i<MAXD;i++){
if ( root.coord[i] < low[i] ) inrange = false;
if ( high[i] < root.coord[i] ) inrange = false; }
if (inrange) print(root);
if ((low[root.dim] <= root.coord[root.dim] ) print_range(root.left);
if (root.coord[root.dim] <= high[root.dim])
print_range(root.right);
}
![Page 22: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/22.jpg)
22
x
y
Other Shapes for Range Querying
Search every partition that intersects the shape (circle). Check whether each node (including leaves) falls into the shape.
![Page 23: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/23.jpg)
23
k-D Trees Can Be Inefficient(but not when built in batch!)
insert(<5,0>)
insert(<6,9>)
insert(<9,3>)
insert(<6,5>)
insert(<7,7>)
insert(<8,6>)
6,9
5,0
6,5
9,3
8,6
7,7
suck factor:
![Page 24: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/24.jpg)
24
k-D Trees Can Be Inefficient(but not when built in batch!)
insert(<5,0>)
insert(<6,9>)
insert(<9,3>)
insert(<6,5>)
insert(<7,7>)
insert(<8,6>)
6,9
5,0
6,5
9,3
8,6
7,7
suck factor: O(n)
![Page 25: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/25.jpg)
25
Quad Trees
• Split on all (two) dimensions at each level• Split key space into equal size partitions (quadrants)• Add a new node by adding to a leaf, and, if the leaf is
already occupied, split until only one node per leafquad tree node
Quadrants:
0,1 1,1
0,0 1,0
quadrant
0,01,0 0,11,1
keys value
Center
x yCenter:
![Page 26: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/26.jpg)
26
Find in a Quad Treefind(<x, y>, root) finds the node which has the
given pair of keys in it or returns quadrant where the point should be if there is no such node
Node *& find(Key x, Key y, Node *& root) {
if (root == NULL)
return NULL; // Empty tree
if (root->isLeaf)
return root; // Key may not actually be here
int quad = getQuadrant(x, y, root);
return find(x, y, root->quadrants[quad]);
}
runtime: O(depth)
Compares against center; always makes the same choice on ties.
![Page 27: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/27.jpg)
27
Find Example
a
g
b
ef
d
cga
fed
cb
find(<10,2>) (i.e., c)find(<5,6>) (i.e., d)
![Page 28: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/28.jpg)
28x
Building a Quad Tree (1/5)y
![Page 29: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/29.jpg)
29x
Building a Quad Tree (2/5)y
![Page 30: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/30.jpg)
30x
Building a Quad Tree (3/5)y
![Page 31: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/31.jpg)
31x
Building a Quad Tree (4/5)y
![Page 32: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/32.jpg)
32x
Building a Quad Tree (5/5)y
![Page 33: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/33.jpg)
33
Quad Tree Example
a
g
b
ef
d
cga
fed
cb
![Page 34: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/34.jpg)
34
Quad Trees Can Suck
b
a
suck factor:
![Page 35: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/35.jpg)
35
Quad Trees Can Suck
b
a
suck factor: O(log (1/minimum distance between nodes))
![Page 36: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/36.jpg)
36x
2-D Range Querying in Quad Trees
y
![Page 37: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/37.jpg)
37
2-D Range Query in a Quad Treeprint_range(int xlow, xhigh, ylow, yhigh, Node * root){
if (root == NULL) return;
if ( xlow <= root.x && root.x <= xhigh &&
ylow <= root.y && root.y <= yhigh ){
print(root);
if (xlow <= root.x && ylow <= root.y)
print_range(root.lower_left);
if (xlow <= root.x && root.y <= yhigh)
print_range(root.upper_left);
if (root.x <= x.high && ylow <= root.x)
print_range(root.lower_right);
if (root.x <= xhigh && root.y <= yhigh)
print_range(root.upper_right);
}runtime: O(N)
![Page 38: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/38.jpg)
38
Insert Example
gga
insert(<10,7>,x)
… …a
g
b
ef
d
c
x
gx• Find the spot where the node should go.• If the space is unoccupied, insert the node.• If it is occupied, split until the existing node separates from the new one.
![Page 39: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/39.jpg)
39
Delete Example
a
g
b
ef
d
c
ga
fed
cb
delete(<10,2>)(i.e., c)
• Find and delete the node.• If its parent has just one child, delete it.• Propagate!
![Page 40: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/40.jpg)
40
Nearest Neighbor Search
ga
fed
cb
getNearestNeighbor(<1,4>)
g
b
f
d
c
• Find a nearby node (do a find).• Do a circular range query.• As you get results, tighten the circle.• Continue until no closer node in query.
a
e
Works on k-D Trees, too!
![Page 41: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/41.jpg)
41
Quad Trees vs. k-D Trees
• k-D Trees– Density balanced trees
– Number of nodes is O(n) where n is the number of points
– Height of the tree is O(log n) with batch insertion
– Supports insert, find, nearest neighbor, range queries
• Quad Trees– Number of nodes is O(n(1+ log(/n))) where n is the number of points and
is the ratio of the width (or height) of the key space and the smallest distance between two points
– Height of the tree is O(log n + log )
– Supports insert, delete, find, nearest neighbor, range queries
![Page 42: CSE 326: Data Structures Lecture #21 Multidimensional Search Trees](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813b21550346895da3d739/html5/thumbnails/42.jpg)
42
To Do / Coming Attractions
• Read (a little) about k-D trees in Weiss 12.6• (More) Heaps ‘o fun
– leftist heaps & binomial queues