随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

KD-tree

之前看过一个关于kd_tree的形象的解释,现在想重新看下,可惜找不到了,网上很多关于这个解释太教条化,不够简单。在此记录下自己的肤浅的理解。

如图,这个图的建立就不解释了,网上很容易搜到,主要是利用X方向和Y方向数据的方差大小去确定第一次画线是横着画还是竖着画,应该是这样:数据在横向更分散(方差更大)的话第一次画线就竖着画,数据在竖向更分散的话第一次画线就横着画。

现在只说建好图之后的回溯,网上用回溯一词,我感觉没必要说的那么高大上,就是回看。现在需要找到离星号P点距离最近的点,这里可以认为点P是一个新点(newpoint)。

1.从A点开始很容易通过一直比较x坐标和y标的大小找到点E,比如说A点左区域与A点右区域比较的话,A点左区域中的点一定离P点更近(因为XP>XA>XB),找到点E后,没法再往下找了。

2.以P为圆心,以PE的长度为半径画圆,此圆与C点所在的直线若没有交点,那最临近点就是E,针对本例而言,是有交点的,这说明C点所在直线的上面有可能存在离P点更近的点。

3.关注P点上面的点。首先比较PC与PE,发现PC>PE,则更新E点为C点。

4.比较PC与PD的长度(因为离C最近的节点是叶子节点D),结果是C点不被更新,比较PC与PF的长度,结果是不被更新,比较PC与PG的长度,结果是PG<PC,则C点被更新为G点。

5.现在走到G点了,再回看。F,D,C,这三个点都被比较过了,所以不用管它们了。以P为中心,以PG为半径画圆,与A点所在直线没有交点,说明A点右边区域内的点离P点只会比G点离P点更远,而不会更近。

6.G点就是要找的最临近点。

最近邻搜索意在树中搜索得到与给定点最近的点。最近邻搜索可以kdtree树高效地实现,因为kdtree可以快速地移除不满足搜索条件的搜索空间。

posted on   一杯明月  阅读(253)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示