kd 树(k-d Tree)的构造和搜索

  kd树(k-dimensional Tree)是一种对k维数据进行存储以便于快速检索的树形数据结构,kd树是一棵二叉树,表示对k维空间的一个划分。 构造kd树相当于不停地用垂直于坐标轴的超平面将k维空间划分,构成一系列的k维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。下面给出kd树的构造算法。

kd树构造算法

输入:包含N个样本的维空间数据集,其中。
Step 1:构造根结点。
  选择为切分坐标轴,以数据集中所有样本的坐标的中位数为切分点,以此切分点构造一个垂直于坐标轴的超矩形,将数据集中所有样本的样本划分成左右两个子集,其中左边的子集中的样本的均小于切分超平面的坐标,右边的子集中的样本的均大于切分超平面的坐标,将落在切分超平面上的点保存在该根结点中。
Step 2:构造深度为j的结点。
  针对深度为的节点,选择为切分坐标轴,其中,以该节点的区域中所有样本的坐标的中位数为切分点,将该节点对应的超矩形区域划分成两个子区域,其中左区域对应的是上小于切分点的数据,右区域对应于上小于切分点的数据。以此递归,直到当前节点的左右区域中的数据为空时结束。
输出:构造完成的kd树。

kd树检索

输入:已构造的kd树,目标。
步骤1:从根节点出发,若小于当前根节点上的数据的,则向当前结点的左子树进行检索,若大于当前根节点上的数据的,则向当前结点的右子树进行检索,否则目标在当前结点上。返回。
步骤2,针对深度为的结点,若小于当前结点的则,向当前结点的左子树进行检索,若大于当前结点的则,向当前结点的右子树进行检索,否则目标结点就在当前结点上。返回。

你可能感兴趣的:(kd 树(k-d Tree)的构造和搜索)