KD 树原理详解

一 点睛

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 作为分辨器。方差公式为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值