一 点睛
KD 树(K-Dimension tree)是可以存储 K 维数据的树,是二叉搜索树的拓展,主要用于多维空间数据的搜索,例如范围搜索和最近邻搜索。BST、AVL、Treap 和伸展树等二叉搜索树的节点存储的都是一维信息,一维数据很容易处理,直接比较数据的大小,满足左子树小于根、右子树大于根即可。多维数据需要选择一个维度 Di,在维度 Di 上进行大小比较。例如,对于二维平面上的两个点 A(2,4)、B(5, 3),按照第 1 维比较,则 A<B ;按照第 2 维比较,则A>B。
二 创建 KD 树
KD 树是二叉树,表示对 K 维数据的划分,每个节点都对应 K 维空间划分中的超矩形区域,KD 树可以省去大部分的搜索工作,提高搜索效率。
对 K 维数据划分左右子树时,需要考虑两个问题:
① 选择哪个维度划分?
② 选择哪个划分点可以使左右子树的大小大致相等?
众所周知,二叉搜索树在极不平衡的情况下退化为线性,效率最差,在平衡的情况下时间复杂度为 O(logn)。
1 维度划分
维度划分指选择哪一维进行划分,即选择哪一维作为分辨器。KD 树可以根据不同的用途选择不同的分辨器,最常见的是轮转法和最大方差法。
• 轮转法
按照维度轮流作为分辨器,对于二维数据(x , y),第 1 层按 x 划分,第 2 层按 y 划分,第 3 层按 x 划分,以此重复进行。奇数层按 x 划分,偶数层按 y 划分,按照维度轮流划分,创建一棵 KD 树。如同切豆腐块,竖着切一刀,横着切一刀,以此重复进行。扩展到 K 维数据,若当前层按照第 i 维划分,则下一层按照第(i +1) % K 维划分,i=0,1,…, K-1。
最大方差法:若数据在维度D i 上方差最大,则选择维度D i
• 最大方差法
若数据在维度 Di 上方差最大,则选择维度 Di 作为分辨器。方差公式为:

1万+

被折叠的 条评论
为什么被折叠?



