数据结构中的 K-D 树

17 Mar 2025 | 4 分钟阅读

引言

K-D 树,也称为 K 维树,是一种用于组织多维空间中点的著名数据结构,通常当 K 是一个相当大的数字时使用。这些结构之所以吸引人,是因为它们能够促进多维空间中各种搜索方法的实现,包括范围搜索和最近邻搜索。

K-D 树:框架

二叉树中的每个节点都是“K-D 树”的一种表现形式,对应于 K 维空间中的一个点。空间本身通过超平面被分成两个区域,每个非叶节点都体现了树中的一个超平面。选择的轴对应于 K 个维度中的一个,与这些超平面平行。

轴的选择可以通过各种方法进行,尽管最传统的方法是依次遍历 K 个维度中的每一个,然后定义一个中点来分割空间。

解锁 K-D 树的机制

K-D 树本质上是一个二叉树,每个节点代表一个 k 维点,从而将空间分成两个不同的半空间。下面将更详细地介绍这个过程:

  1. 维度选择:第一步是选择一个维度。在 2D K-D 树中,x 和 y 维度之间会发生切换过程,而在更高维度中,它会依次遍历坐标。
  2. 寻找中位数:在所选维度中,通过评估该特定维度中的值来找出中位数点。该中位数点随后成为树的根节点。
  3. 划分区域:数据集被分成两个子集,一个子集包含位于中位数一侧的点,另一个子集包含位于对面一侧的点。这些子集与根节点的左子树和右子树建立连接。
  4. 递归展开:步骤 1 到 3 进入递归阶段,因为每个子树都会重复该过程。结果是一个树结构,其中每个节点都代表一个不同维度上的中位数点。

构建 K-D 树的蓝图

K-D 树的构建依赖于对空间中的点进行递归划分以生成二叉树。旅程始于选择一个轴。随后,根据点相对于划分超平面的位置,将剩余的点划分为两个子集。这种划分涉及沿轴选择中点。

算法 1:创建 K-D 树

正确执行后,生成的树将保持平衡,每个叶节点与根节点的距离大致相等。为了实现这种平衡,必须始终选择中位数点。此外,值得注意的是,确定中位数会增加复杂性,需要采用单独的算法。未能选择中位数点可能会导致树不平衡。为了解决这个问题,一种方法是使用排序算法沿选定的轴对点进行排序,并利用这些点的中位数作为分割平面。

代码

输出

Point found
Point not found

K-D Tree in Data Structures

在提供的代码中,利用 KD 树(K 维树)在 K 维空间中执行插入和点查找等操作。