KDTree 解析 、构建

其实KDTree 就是一个二叉树,KDTree的创建、查询和二叉树方法都是类似的,只不过在划分二叉树的时候要考虑k维来划分,而二叉树只考虑一维。

定义:

KDTree是每个节点都为k维点的二叉树。所有非叶子节点可以视作用一个超平面把空间分割成两部分。在超平面左边的点代表节点的左子树,在超平面右边的点代表节点的右子树。超平面的方向可以用(n mod k)(n可以认为是数的层级数,比如k为3 ,即x、

、z三维,那么第一次分就是按x值来分(第一层级)、第二次分就按y值分(第二层级)。。。第四层级又按x值来分二叉树等等。。。。来选择:每个节点都与k维中垂直于超平面的那一维有关。因此,如果选择按照x轴划分,所有x值小于指定值的节点都会出现在左子树,所有x值大于指定值的节点都会出现在右子树。这样,超平面可以用该x值来确定,其法矢为x轴的单位向量。以使用在多种应用场合,如多维键值搜索。KDtree是二叉树的一种特殊情况。如下图所示:



第一次划分(红色)把根节点(白色)划分成两个节点,然后它们分别再次被划分(绿色)为两个子节点。最后这四个子节点的每一个都被划分(蓝色)为两个子节点。至此已经不能再被划分,最后得到的八个节点称为叶子节点。


有时间传上具体代码 作参考。。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值