一言蔽之,kd树的想法为:
对于目标点A,若点B较之其他点,每个纬度都更接近A,则猜测B接近该点。
kd树构造算法:
方法:共n个纬度,轮次选择纬度作为划分依据(纬度1、纬度2……),重复直至训练样本用完。
结果:将每个空间一分为二,重复划分。最终每个子空间附着一个点。
kd树寻找1-临近:
方法:将点A所划分到的空间k对应点Xk作为初始解,连接两点,以A为球心做球,寻找与球相交的子空间,搜索全部相交的空间(及时更新最小值可适当减少搜索)
问题:如何寻找相交子空间。
对于n维数据,即使回溯n步也不能保证不与剩余空间相交
如图A点所在空间由右部空间划分而成,而右部空间只能包含A 50%方向的搜索。
造成这一现象的原因在于树的结构,临近划分点的数据被划分到了不同的区间,并且随着树向下生长,两子空间的搜索距离继续增长,回溯所需步数增加。