KD Trees
- is a space-partitioning data structure for organizing points in a k-dimensional space
- are a useful data structure for several applications, such as searches involving a multidimensional search key
- are a special case of binary space partitioning trees
Constructing a KD-Tree
- domain-vector = a vector of floating point numbers
- range-vector = a vector of floating point numbers
- exemplar = a pair <domain-vector, range-vector>
kd-tree-construction(exemplar-set) {
if (exemplar-set is empty)
return empty kd-tree
call pivot-choosing procedure which returns 2 values:
-
-
- ex = a member of exemplar-set
- split = the splitting dimension
exemplar-set.remove(ex)
d = domain vector of ex
r = range vector of ex
exemplar-set-left = {(d',r') in exemplar-set| d'(split) <= d(split)}
exemplar-set-right = {(d',r') in exemplar-set| d'(split) > d(split)}
kd-left = kd-tree-construction(exemplar-set-left)
kd-right = kd-tree-construction(exemplar-set-right)
kd = <d,r,split,kd-left,kd-right>
}
Searching Nearest Neighbor
TODO