kd树

kd树的作用:
数据量大时快速找到临近的k点
避免每次重新计算距离,算法会把距离信息保存在一棵树里,需要时直接调用

kd树原理:

kd树核心:

1.树的建⽴;

建立kd树的核心原理:⼩于等于就进⼊左⼦树分⽀,⼤于就进⼊右⼦树分 ⽀直到叶⼦结点


取数据集:T={(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)} x轴按顺序排列选出中位数(x选出来后因为是二维向量坐标所以y也出来了(7,2))
1.在根节点先比较x坐标,比较完后,在下个坐标点比较y坐标
此处的作用是根据二分法的原理不断缩小范围来减少比较次数


最终把各个范围距离缩短绘画出这样的图形:

2.最近邻域搜索(Nearest-Neighbor Lookup)


样本集{(2,3),(5,4), (9,6), (4,7), (8,1), (7,2)}

重点来了,重点是运用最临近域搜索找出下面的这两个点,这两个点找出来你就完全弄懂了!

查找点(2.1,3.1)


在(7,2)点测试到达(5,4),在(5,4)点测试到达(2,3),然后search_path中的结点为<(7,2),(5,4), (2,3)>,从search_path中 取出(2,3)作为当前最佳结点nearest, dist为0.141;
然后回溯⾄(5,4),以(2.1,3.1)为圆⼼,以dist=0.141为半径画⼀个圆,并不和超平⾯y=4相交,如上图,所以不必跳到结 点(5,4)的右⼦空间去搜索,因为右⼦空间中不可能有更近样本点了。
于是再回溯⾄(7,2),同理,以(2.1,3.1)为圆⼼,以dist=0.141为半径画⼀个圆并不和超平⾯x=7相交,所以也不⽤跳到结 点(7,2)的右⼦空间去搜索。
⾄此,search_path为空,结束整个搜索,返回nearest(2,3)作为(2.1,3.1)的最近邻点,最近距离为0.141。

查找点(2,4.5)

核心:运用两点之间的距离公式找到最终距离查找点最小的点 与超平面轴对比如果圆半径小于到轴的距离,相当于到了二分法的有用范围的这边,另一边就不用看了


在(7,2)处测试到达(5,4),在(5,4)处测试到达(4,7)【优先选择在本域搜索】,然后search_path中的结点为<(7,2),(5,4), (4,7)>,从search_path中取出(4,7)作为当前最佳结点nearest, dist为3.202;
然后回溯⾄(5,4),以(2,4.5)为圆⼼,以dist=3.202为半径画⼀个圆与超平⾯y=4相交,所以需要跳到(5,4)的左⼦空间去 搜索。所以要将(2,3)加⼊到search_path中,现在search_path中的结点为<(7,2),(2, 3)>;另外,(5,4)与(2,4.5)的距离为 3.04 < dist = 3.202,所以将(5,4)赋给nearest,并且dist=3.04。
回溯⾄(2,3),(2,3)是叶⼦节点,直接平判断(2,3)是否离(2,4.5)更近,计算得到距离为1.5,所以nearest更新为(2,3), dist更新为(1.5) 回溯⾄(7,2),同理,以(2,4.5)为圆⼼,以dist=1.5为半径画⼀个圆并不和超平⾯x=7相交, 所以不⽤跳到结点(7,2)的右⼦ 空间去搜索。
⾄此,search_path为空,结束整个搜索,返回nearest(2,3)作为(2,4.5)的最近邻点,最近距离为1.5。

总结:

一. 总结kd树的构建过程
1.构造根节点
2.通过递归的⽅法,不断地对k维空间进⾏切分,⽣成⼦节点
3.重复第⼆步骤,直到⼦区域中没有示例时终⽌ 需要关注细节:a.选择向量的哪⼀维进⾏划分;b.如何划分数据
二. kd树的搜索过程【知道】
1.⼆叉树搜索⽐较待查询节点和分裂节点的分裂维的值,(⼩于等于就进⼊左⼦树分⽀,⼤于就进⼊右⼦树分 ⽀直到叶⼦结点)
2.顺着“搜索路径”找到最近邻的近似点
3.回溯搜索路径,并判断搜索路径上的结点的其他⼦结点空间中是否可能有距离查询点更近的数据点,如果有 可能,则需要跳到其他⼦结点空间中去搜索
4.重复这个过程直到搜索路径为空

NND今天终于把KD树弄懂了,花了劳资两个小时的有效时间相关推荐

  1. 终于完全弄懂了KMP(个人理解篇)

    前阵子在学习KMP相关的内容,其他部分都挺好理解的,最后在next数组和k=next[k]这个递推公式上迷糊了好久,看了不少人写的博客,有的写着写着最后的结论又跳跃了,有的是写清楚了,但是感觉写的有过 ...

  2. 快速傅里叶变换(研二的我终于弄懂了)

    研二的我仍然对快速傅里叶变换一知半解,于是乎,本着待在家里,能耗时间就多耗点,不知道何年马月我才可以在外面快乐的奔跑~~ 快速傅里叶变换的实现(c++版本) 在做项目的时候,需要用到matlab里的f ...

  3. 计算机考研英语一和英语二的区别,考研英语一和英语二的区别 今天终于弄懂了!...

    原标题:考研英语一和英语二的区别 今天终于弄懂了! 大家在最后三个月冲刺需要注意: 1.建议留几套真题,做考前模拟,精读真题可以用 <考研圣经>(英语二用)98-07 年的真题,都是逐词逐 ...

  4. 淘宝特价版拉新赚钱的页面怎么做?我终于弄懂了

    淘宝的同胞兄弟特价版,虽然长的朴实无华以至于经常被人问起淘宝特价版靠谱吗?2021年淘宝特价版可谓大火了一把,阿里巴巴不计成本的大力推广淘宝特价版,目的也非常明确要把拼多多占领的市场掠夺回来.最近还传 ...

  5. 这一次,终于弄懂了协变和逆变

    一.前言 刘大胖决定向他的师傅灯笼法师请教什么是协变和逆变. 刘大胖:师傅,最近我在学习泛型接口的时候看到了协变和逆变,翻了很多资料,可还是不能完全弄懂. 灯笼法师:阿胖,你不要被这些概念弄混,编译器 ...

  6. 终于弄懂KMP算法了

    1.简例弄懂KMP-点此链接查看 看了上面的文章,你肯定大概明白了KMP的运作原理,但是你可能对于文章提到的"部分匹配值"的又来还存在疑惑,那么请继续往下看: 我们先抛出两个问题, ...

  7. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  8. 这一次,彻底弄懂 JavaScript 执行机制

    本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定 ...

  9. 硬核艿艿,新鲜出炉,直接带你弄懂 Spring Boot Jar 启动原理!

    " 摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/jar/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MANIFEST.MF 3. J ...

最新文章

  1. The Minimum Cycle Mean in a Digraph 《有向图中的最小平均权值回路》 Karp
  2. 支付宝分库分表中间件--zdal简介
  3. 放置奇兵 算法 月度活动 破碎时空记录 第七关 阿姨(阿伊达)+暗战(阿斯布)
  4. 树莓派hdmi输出没声音_树莓派 4 开箱记
  5. Uncaught SyntaxError - unexpected end of input
  6. 【音视频安卓开发 (三)】OpenGL ES 直接绘制YUV
  7. Cuda:invalid device pointer
  8. 修改配置nginx,限制无良爬虫频率
  9. 为翻译软件提供云端语料库支持,Tmxmall 瞄准了语言领域的大数据
  10. 完整计算器java代码_计算器java代码
  11. 一天入门Tableau详细教程(上)
  12. R. Shankar《Principles of Quantum Mechanics (2nd)》(山卡《量子力学原理(第二版)》)双语目录
  13. 使用CrossApp实现版本更新管理(iOS端给AppStore链接,android端下载apk并替换)
  14. 2021-09-21用pyecharts做全球各个国家的gdp色彩深度图
  15. JDBC查询超时时间设置
  16. SkeyeRTSPLive传统视频监控互联网实现利器解决方案
  17. [CryptoHack] ELLIPTIC CURVES-STARTER Write-Up
  18. 使用回环地址建立bgp邻居
  19. 计算机设置鼠标关灯,鼠标灯怎么关?通过BIOS设置即可解决!
  20. 服务器构成,分类,操作系统;机械硬盘,固态硬盘,光模块,光纤接口,跳线;计算虚拟化

热门文章

  1. c语言messagebox显示变量,Messagebox.Show()常用参数设置
  2. 有效制定年度经营计划-王磊老师企业量化管理1
  3. Android 简单使用输入法
  4. 医学影像切面方向与坐标系统
  5. Flux数据脚本语言
  6. 我是一只it小小鸟阅读笔记
  7. 找了几个 Solon 框架的商业落地项目案例!
  8. 举个栗子!Tableau 技巧(174):饼图部分下钻的两种方法
  9. (游戏运行性能)优化
  10. Mybatis的CRUD 增删改查