0 KD-Tree基本简述
Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor)和近似最近邻查找(Approximate Nearest Neighbor),例如图像检索和识别中的高维图像特征向量的K近邻查找与匹配。
KD-Tree是二叉查找树的思想结构在高维尺度上的实现,本文不会描述二叉查找树的基本情况,想了解的可以查看博文《二叉查找树(Binary Search Tree)结构与算法解析》
在将二叉查找树向高维实现的过程中,出现了两个主要问题,如何解决这两个问题也解决了KD-Tree算法的实现问题。这两个问题为:
- 在多维尺度下,如何确定划分子空间的维度方法?
- 查找树的算法复杂度和树深相关,那么如何通过维持左右子树平衡实现降低复杂度的操作?
1 KD-Tree的构造思想方法
1.1 问题1:在多维尺度下,如何确定划分子空间的维度方法?
最朴素的思想方法为依照维度的顺序进行分割:即分割的维度是顺序来分割的——第一次分割第一维度,第二次按第二维度分割,以此类推。这种分割方式对均匀分布的数据比较友好,但是当数据分割在某几个维度过于集中,另外的维度又过于分散的时候,这种分割方式并不能很好的解决数据集中的问题。
上述中的“过于分散”即可用数据在该维度