
kd tree建立
- 计算各个维度方差最大的那一个。方差大说明沿该轴方向上的数据分散的越开。下图所示。
- 选择该特征的中位数作为分割点,小于该数的为左子树,大于的为右子树。这里用中位数是为了让左子树和右子树的数据量一直,便于二分查找。
- 然后用上述方法进行判断其他维度数据,直到所有数据都位于节点上为止。

kd树搜索过程:

我们来查找点(2.1,3.1),在(7,2)点测试到达(5,4),在(5,4)点测试到达(2,3),然后search_path中的结点为<(7,2), (5,4), (2,3)>,从search_path中取出(2,3)作为当前最佳结点nearest, dist为0.141;
然后回溯至(5,4),以(2.1,3.1)为圆心,以dist=0.141为半径画一个圆,并不和超平