1. 算法简介# KD-tree(K-Dimensional),是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。 主要应用于多维空间关键数据的搜索。 KD-tree 的本质是一棵平衡树,将空间内的区域划分为一个超长方体,然后存储为节点进行维护。 以下为一个k=2时的 KD-tree。 2. 算法理论# 考虑如何维护一个...
Kd树在维度较小时(比如20、30),算法的查找效率很高,然而当数据维度增大(例如:K≥100),查找效率会随着维度的增加而迅速下降。假设数据集的维数为D,一般来说要求数据的规模N满足N>>2的D次方,才能达到高效的搜索。 为了能够让Kd树满足对高维数据的索引,Jeffrey S. Beis和David G. Lowe提出了一种改进算法——Kd-...
- 光线追踪:在光线追踪算法里,需要判断光线与场景中众多物体是否相交。KD - Tree可以将场景中的物体按照空间位置组织起来,通过对KD - Tree进行遍历,能快速定位光线可能相交的物体,减少不必要的相交测试,从而显著提高光线追踪的效率。例如在渲染复杂的三维场景(如电影特效、游戏场景)时,可大大缩短渲染时间。- ...
KD tree可以用来: 最近邻搜索; 范围查询; 快速查找... 由于在性能上与二叉搜索树相似,这种数据结构的运行速度也非常快;它的常见运用如输入一张图片(高维数据),查找图片库里与之相近的一张或者多张图片等等,也有人用它来做AB test的分群; 3. 原理 3.1 ...
【算法】kd-tree kd-tree 是一种实现多维 k-nearest neighbor(kNN)的方法。 原文传送门 Moore, Andrew W. "An intoductory tutorial on kd-trees." (1991). 特色 一种用来找多维向量最近邻的数据结构和相应算法,可用于 kNN。这篇文章除了讲了基本原理和算法,还给出了扩展性能的分析。
算法:构建k-d树(createKDTree) 输入:数据点集Data-set和其所在的空间Range 输出:Kd,类型为k-d tree 1.If Data-set为空,则返回空的k-d tree 2.调用节点生成程序: (1)确定split域:对于所有描述子数据(特征矢量),统计它们在每个维上的数据方差。以SURF特征为例,描述子为64维,可计算64个方差。挑选出最大...
本人用全宇宙最简单的编程语言——Python实现了KD-Tree算法,没有依赖任何第三方库,便于学习和使用。简单说明一下实现过程,更详细的注释请参考本人github上的代码。 2.1 创建Node类 初始化,存储父节点、左节点、右节点、特征及分割点。 class Node(object): ...
Kd-Tree的构建算法: (1) 在K维数据集合中选择具有最大方差的维度k,然后在该维度上选择中值m为pivot对该数据集合进行划分,得到两个子集合;同时创建一个树结点node,用于存储; (2)对两个子集合重复(1)步骤的过程,直至所有子集合都不能再划分为止;如果某个子集合不能再划分时,则将该子集合中的数据保存到叶子结...