kd tree建立

  • 计算各个维度方差最大的那一个。方差大说明沿该轴方向上的数据分散的越开。下图所示。
  • 选择该特征的中位数作为分割点,小于该数的为左子树,大于的为右子树。这里用中位数是为了让左子树和右子树的数据量一直,便于二分查找。
  • 然后用上述方法进行判断其他维度数据,直到所有数据都位于节点上为止。

kd树搜索过程:

我们来查找点(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)的右子空间去搜索

高维数据:
kd树在高维空间中,效率会大幅下降。一般的准则是:在k维情况下,数据点数目N应当远远大于2^k次方。随着维度K的增大,与Q的超球面相交的超矩形(子树分支所在的区域)就会增加,这就意味着需要回溯判断的树分支就会更多,从而算法的查找效率便会下降很大。注:可以通过一定的方法来限制回溯的次数,但是相应的降低精度。

代码:

from sklearn.neighbors import KDTreeimport numpy as np
from sklearn.neighbors import KDTreenp.random.seed(0)
X = np.array([[2, 3], [5, 4], [9, 6], [4, 7], [8, 1], [7, 2]])tree = KDTree(X, leaf_size=2)
dist, ind = tree.query(X[:1], k=3)print(dist)  # 3个最近的距离
print(ind)  # 3个最近的索引
print(X[ind])  # 3个最近的点

参考

kd-tree_百度百科​baike.baidu.com

图像检索:向量索引​yongyuan.name

k-d tree算法的研究-UnderTheHood-51CTO博客​blog.51cto.com

回溯法排序树怎么画_kd tree(k-dimensional树的简称)相关推荐

  1. kd树 python实现_KD Tree的原理及Python实现

    提到KD-Tree相信大家应该都不会觉得陌生(不陌生你点进来干嘛[捂脸]),大名鼎鼎的KNN算法就用到了KD-Tree.本文就KD-Tree的基本原理进行讲解,并手把手.肩并肩地带您实现这一算法. 完 ...

  2. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例

    本文实例讲述了Python基于回溯法子集树模板解决找零问题.分享给大家供大家参考,具体如下: 问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元, ...

  3. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例

    本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...

  4. 消消乐实验回溯法(深大算法实验3)报告+代码

    实验代码 + 报告资源: 链接: https://pan.baidu.com/s/1CuuB07rRFh7vGQnGpud_vg 提取码: ccuq 目录 写在前面 实验要求 求解问题的算法原理描述 ...

  5. 【算法导论07】回溯法-旅行售货员问题

    07回溯法-旅行售货员问题 问题描述: 已知有m个城市,城市之间由n条不同长度的道路相连.一个售货员从一座城市出发,途径所有城市,并最终回到原点,设计算法计算售货员所走的最短路径结点. 问题分析: 从 ...

  6. 回溯法采用的搜索策略_下列那种函数是回溯法中为避免无效搜索采取的策略( )_学小易找答案...

    [填空题]图示刚架,单元编号.结点编号和结点位移编号如图所示,则单元 3的单元定位向量为 _________ .提示:写成 [ , , , , ,]T的形式 [单选题]下列测量仪器中,最适宜用于多点水 ...

  7. 【回溯法】机器零件加工-最优加工顺序

    题目 有n个机器零件{J1,J2,-,Jn},每个零件必须先由机器1处理,再由机器2处理.零件Ji需要机器1,机器2的处理时间为t(1i),t(2i).如何安排零件加工顺序,使第一个零件从机器1上加工 ...

  8. 【回溯法】01 - 回溯法的算法框架

    回溯法以深度优先策略搜索解空间树. 1. 用回溯法解题时,要明确定义问题的解空间树. 2. 通常将解空间树组织成树或图的形式. 回溯法求解问题的所有解时,要回溯到根,且根节点的所有子树都已被搜索到才结 ...

  9. 八皇后问题(回溯法)C语言求解

    方法一: //N_Queen #include<iostream> using namespace std; #define N 100 //定义最多求解100皇后问题 int x[N]; ...

最新文章

  1. 1000+个常用的Linux命令!看完通关!随手玩Linux!
  2. 机器人会模仿人类微笑了,但我总觉得这笑容……
  3. php sql server配置文件路径,云服务器初始化 第六章:更改MySQL数据文件存放路径...
  4. 程序员羽化之路--假如需要一百万个对象
  5. 每日一题(36)—— 什么是预编译 , 何时需要预编译?
  6. javascript官方文档_基于Javascript编写的开源Markdown和HTML相互转换器——showdown
  7. js 异步执行_JS Asynchronous — JS 异步编程极简史
  8. 亮剑:PHP,我的未来不是梦(6)
  9. 用vs2008编写和调试linux程序 ----VisualGDB 使用教程
  10. 2021年山东省职业院校技能大赛中职组”网络安全“正式赛题
  11. 用命令设置 ip 地址
  12. HTML中的空格符号( nbsp; ensp; emsp; )介绍以及中文对齐方式
  13. 安旭生物科创板上市:曾遭弃购1400万元,凌世生夫妇控制60%股份
  14. CodeForces 1437F Emotional Fishermen(计数dp)
  15. 通过PC发送手机短信
  16. 微信跑腿小程序怎么做
  17. 云服务器1M带宽是上传吗,云主机1m带宽能干嘛?
  18. python123 io平台-Java Review(三十六、IO)
  19. 首迷防脱小课堂:避免脱发的八种方法
  20. SAP FICO全解析之-定义国家代码

热门文章

  1. 数据库中数据类型和约束(整数类型、字符串、时间类型)
  2. JavaScript实现自动评论哔哩哔哩视频
  3. 可复现的图像降噪算法总结——超赞整理
  4. 你需要知道的20个常用的Python技巧
  5. 【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)
  6. 浅谈RNN,LSTM和GRU
  7. 栈与队列3——用递归和栈操作逆序一个栈
  8. 用python画小猪佩奇(非原创)
  9. 交换机工作原理、MAC地址表、路由器工作原理详解
  10. Oracle表空间管理