K-D Tree初学

本文介绍了K-D Tree的构建过程,包括如何确定分割线、计算Node-data,以及如何在构建的K-D树上进行最邻近查找算法。通过具体的二维数据示例详细解释了每个步骤,包括节点数据结构、Split域和Node-data的计算,以及在不同子空间的递归操作。
摘要由CSDN通过智能技术生成


K-d tree:是一种分割k维数据空间的数据结构,主要应用于多维空间 关键数据的搜索

确定k维空间的分割线,画k-d树

k-d树是一个二叉树,每个节点表示一个空间范围;

每个节点中主要包含的数据结构

(1) Node-data:一组数据的中值点;
(2) Range:该节点所代表的空间范围;
(3) Split:垂直于分割超平面的方向轴序号;
(4) Left:左子树
(5) Right:右子树
(6) Parent:父节点

1. Split域的计算

计算每维(x\y\z轴)数据的方差,挑选出最大值,即该维就是split域的值。
初始化split={0,1,2,3,……}0代表x轴,1代表y轴,2代表z轴。

2. Node-data的计算

点集中按split域的值(哪个轴)排序,位于正中间的数据点即为该值;
通过该点并垂直于split的值做超平面;
此时范围空间分为左子空间和右子空间,接下来继续对左子空间和右子空间的数据点重复根节点的操作。
例:(2,3)(8,1)(5,4)(4,7)(9,6)(7,2)
(1)Split的初始值为{0,1},因为该数据是二维数据。
计算方差:
x轴:

  • 均值(2+8+5+4+9+7)/6=5.83
  • 方差
    [ ( 2 − 5.83 ) 2 + ( 8 − 5.83 ) 2 + ( 5 − 5.83 ) 2 + ( 4 − 5.83 ) 2 + ( 9 − 5.83 ) 2 + ( 7 − 5.83 ) 2 ] / 6 = 10.79 [(2-5.83)^2 +(8-5.83)^2+(5-5.83)^2+(4-5.83)^2+(9-5.83)^2+(7-5.83)^2] / 6=10.79 [(25.83)2+(85.83)2+(55.83)2+(45.83)2+(9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值