KDTree简单理解

KDTree作为一个树的结构,通常用来做高维的分割。在分割成为树的时候,保证下一层节点的比较位如果小于当前的比较位,则向左生长,否则向右生长。所谓的比较位就是当前层数%总的维度,例如三维坐标,第一层就是x,第二层就是y,第三层就是z。直接看图

KDTree简单理解

图中每一层的比较位用加粗表示了,看第一层,比较位是第一位,也就是3,(2,3,7)中2>3,所以像左生长,(4,3,4)中4>3所以向右生长。

到了第二层,这里只看(2,3,7),他的比较位是y也就是3了,那么(2,1,3)中1<3所以像左生长,(2,,4,5)中4>3所以想向右生长。

至于KDTree是怎么训练出来能够做到尽量平衡的,就是通过传统的决策树的算法,算出信息熵决定的。如果捡到一个就分一个会很可能极度不平衡,搜索的时候可能会搜索非常深,但是即使用了决策树的算法,也不可能是完全平衡的,只是一个最优解而已。