kdTree相关原理及c++实现
kdTree概念 kd-tree或者k维树是计算机科学中使用的一种数据结构,用来组织表示k维空间中点的集合。它是一种带有其他约束条件的二分查找树。Kd-tree对于区间和近邻搜索十分有用。一般位于三维空间中的邻域搜索常用kd-tree,因此本文中所有的kd-tree都是三维的kd-tree。 图一 Kd-tree也是二叉树的一种,首先我们先选定一个维度用于第一次分类,如图一所示,我们先选择x维度方向作为分类方向,随机选取一个值使得小于该值的点位于左边,大于该值的点位于右边。在左右区域分别再对第二个维度进行分类,这里以y轴方向作为第二维度,同理根据y分类设置z轴方向为第三维度进行分类。 Kd-tree数据结构定义 Node-data :数据矢量,数据集中某个数据点,是n维矢量(总维度,unsigned int) Range :空间矢量,该节点所代表的的空间范围(二维数组) Split :整数,垂直于分割超平面的方向轴序号(int) Left :k-d树,由位于该节点分割超平面左侧子空间内所有点构成的k-d树(tuple<list,int>) Right :k-d树,由位于该节点分割超平面右侧子空间内所有点构成的k-d树(tuple<list,int>) Paren t:k-d树,父节点(auto) Kd-tree优化 方案一:Kd-tree通过不同维度划分数据,节点的选择显得尤为重要