首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

KD-

KD-是二叉的一种特殊形式,可以看作是二分搜索(BST)的推广,但适用于多个维度。本文记录相关内容。...简介 kd(k-dimensional的简称),是一种分割k维数据空间的数据结构,其中的每一个节点都是k维的数据,主要应用于多维空间关键数据的近邻查找(Nearest Neighbor)和近似最近邻查找...在构造1维BST类似,只不过对于Kd,在当前节点的比较并不是通过对K维数据进行整体的比较,而是选择某一个维度d,然后比较两个K维数据在该维度 d上的大小关系,即每次选择一个维度d来对K维数据进行划分...kd算法就是空间的分割线(多维空间即为分割平面,一般为超平面)。下面就要通过一步步展示kd是如何确定这些分割线的。...为了能够让Kd满足对高维数据的索引,Jeffrey S. Beis和David G.

8410

KNN近邻,KD

KDD的实现:KD 2.1 构建KD 2.2 KD的插入 2.3 KD的删除 2.4 KD的最近邻搜索算法 2.5 kd近邻搜索算法的改进:BBF算法 2.6 KD的应用 3....下面,咱们依次来看kd的插入、删除、查找操作。 2.2 KD的插入 元素插入到一个K-D的方法和二叉检索类似。本质上,在偶数层比较x坐标值,而在奇数层比较y坐标值。...2.3 KD的删除 KD的删除可以用递归程序来实现。我们假设希望从K-D中删除结点(a,b)。如果(a,b)的两个子树都为空,则用空来代替(a,b)。...2.4 KD的最近邻搜索算法 k-d查询算法的伪代码如下所示: ? 我写了一个递归版本的二维kd tree的搜索函数你对比的看看: ? 举例 星号表示要查询的点查询点(2,4.5)。...2.5 kd近邻搜索算法的改进:BBF算法 实例点是随机分布的,那么kd搜索的平均计算复杂度是O(logN),这里的N是训练实例

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PCL中Kd理论

    01 Kd简介 K-D是二进制空间分割的特殊的情况。...用来组织表示K维空间中点的几何,是一种带有其他约束的二分查找,为了达到目的,通常只在三个维度中进行处理因此所有的kd_tree都将是三维的kd_tree,kd_tree的每一维在指定维度上分开所有的字节点...03 构建算法 k-d是一个二叉,每个节点表示一个空间范围。表1给出的是k-d每个节点中主要包含的数据结构。 ?...最后生成的k-d如图3所示。 ? 04 PCL中k-d的最邻近查找 在k-d中进行数据的查找也是特征匹配的重要环节,其目的是检索在k-d中与查询点距离最近的数据点。...那么各种编程语言实现Kd tree的代码网址: https://rosettacode.org/wiki/K-d_tree PCL中关于K-D的算法已经实现,是实现其他算法的基础,比如在使用滤波算法,

    1K20

    k近邻和kd

    kd 当训练集很大时,计算输入实例和每一个训练实例的距离相当耗时。为了提高 ? 近邻搜索的效率,我们使用特殊的结构存储训练数据来减少计算距离的次数,比如 ? 方法。 ?...一、构造kd 输入: ? 维空间数据集 ? ,其中 ? 输出: ? 构造对应包含 ? 的 ? 维空间的超矩形区域:以 ? 为坐标轴, ? 中所有实例的 ?...的思想和二分法很像,并且都能提高搜索的效率。 二、搜索kd 注意 ? 中的 ? 指特征维度数,但 ? 近邻算法中的 ? 表示最邻近的 ? 个点。 搜索方法如下: 输入: 已知的 ?...,目标点 ? 输出: ? 的最近邻 先找到 ? 中包含目标点 ?...的平均计算复杂度是 ? ? 更适用于训练实例数远大于空间维数的 ?

    60620

    机器学习算法之kd

    kd :为了避免每次都重新计算一遍距离,算法会把距离信息保存在一棵里,这样就可以在每次计算之前从里查询距离信息,尽量避免重新计算。...(4)通常,循环的选择坐标轴对空间切分,选择训练实例点在坐标轴上的中位数为切分点,这样得到的 kd 是平衡的 平衡二叉:它是一棵空,或其左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是平衡二叉...kd 中每个节点是一个向量,和二叉按照数的大小划分不同的是, kd 每层需要选定向量中的某一维,然后根据这一维按左小右大的方式划分数据。...kd 是一种二叉,表示对 k 维空间的一个划分,构造 kd 相当于不断地用垂直于坐标轴的超平面将 K 维空间切分,构成一系列的 K 维超矩形区域。kd 的每个结点对应于一个 k 维超矩形区域。...4.示例 4.1 的建立 给定一个二维空间数据集:T={(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},构造一个平衡 kd。 ?

    1.3K30

    KD和LSH局部敏感哈希

    文档结构 文档表示 距离度量 KD 原理 构建 查询 复杂度 KD的KNN KD的逼近KNN 不适用高维数据 LSH LSH潜在的问题 LSH算法 复杂度 概率逼近 多表 文档结构 文档表示 词袋模型...KD brute-force搜索的KNN复杂度太高,单次1NN的复杂度是O(N)O(N),单次KNN的复杂度是O(NlogK)O(N\log K )。如果N很大,查询次数很多的话,那么效率很低。...原理 KD通过不断划分样本到不同的子空间,构建二叉的结构,通过剪枝实现了效率更高的查询,在低维空间表现较好。...KD的KNN 保留距离的时候,只需要把1NN中的离查询点最小的距离改成离查询点最小的第K个距离即可。...KD的逼近KNN 实际计算的时候,假设已获得的离查询点最近的距离是rr,那么剪枝的标准由d>rd>r变成d>r/α(α>1)d>r/\alpha(\alpha>1),相当于更容易剪枝。

    1.8K80

    数据结构和算法——kd

    kd便是其中的一种方法。 二、kd kd是一种对kk维空间中的实例点进行存储以便对其进行快速检索的树形数据结构,且kd是一种二叉,表示对kk维空间的一个划分。...2、kd的概念 kd与二叉排序的基本思想类似,与二叉排序不同的是,在kd中,每一个节点表示的是一个样本,通过选择样本中的某一维特征,将样本划分到不同的节点中,如对于样本{(7,2),(5,4)...通过第一维可以构建如下的二叉模型: ? 在kd的基本操作中,主要包括kd的建立和kd的检索两个部分。...3、kd的建立 构造kd相当于不断地用垂直于坐标轴的超平面将kk维空间切分成一系列的kk维超矩阵区域。...参考文献 K近邻算法基础:KD的操作 k近邻法的C++实现:kd An intoductory tutorial on kd-trees Range Searching using Kd Tree

    1.3K90

    k近邻(KNN)之kd算法原理

    来源:http://www.icvpr.com/kd-tree-tutorial-and-code/ 本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd-Tree(Kd)。...Kd-tree Kd-Tree,即K-dimensional tree,是一棵二叉中存储的是一些K维数据。...在介绍Kd-tree的相关算法前,我们先回顾一下二叉查找(Binary Search Tree)的相关概念和算法。...答案是肯定的,只不过推广到K维空间后,创建二叉和查询二叉的算法会有一些相应的变化(后面会介绍到两者的区别),这就是下面我们要介绍的Kd-tree算法。 怎样构造一棵Kd-tree?...Kd-Tree与一维二叉查找之间的区别: 二叉查找:数据存放在中的每个结点(根结点、中间结点、叶子结点)中; Kd-Tree:数据只存放在叶子结点,而根结点和中间结点存放一些空间划分信息(例如划分维度

    3.9K20

    【学习】K近邻算法基础:KD的操作

    Kd-概念 Kd-其实是K-dimension tree的缩写,是对数据点在k维空间中划分的一种数据结构。其实,Kd-是一种平衡二叉。...为了能有效的找到最近邻,Kd-采用分而治之的思想,即将整个空间划分为几个小部分。六个二维数据点生成的Kd-的图为: ?...3D 对应的kd的平面划分 k-d算法可以分为两大部分,一部分是有关k-d本身这种数据结构建立的算法,另一部分是在建立的k-d树上如何进行最邻近查找的算法。...一、Kd-的构建 Kd-是一个二叉,每个节点表示的是一个空间范围。下表表示的是Kd-中每个节点中主要包含的数据结构。 Range域表示的是节点包含的空间范围。...KD的查找算法: 在k-d中进行数据的查找也是特征匹配的重要环节,其目的是检索在k-d中与查询点距离最近的数据点。 这里先以一个简单的实例来描述最邻近查找的基本思路。

    1.2K50

    ikd-Tree:增量KD在机器人中的应用

    摘要 本文提出ikd,一种有效的动态空间划分的数据结构,ikd只使用加入的数据点来增量的更新k-d,比现有静态k-d的计算时间少很多,除了逐点操作外,ikd还支持一些功能,例如在机器人应用中实际有用的逐个区域操作和向下采样...(b) :插入点和重新平衡后的k-d,蓝色立方体表示重新平衡后的空间,而其余多数不变 主要内容 这里将描述如何在ikd中设计、构建和更新增量k-d,以允许增量操作(例如插入、重新插入和删除)和动态重新平衡...空间复杂度:增量kd树上的每个节点记录的点信息、大小、无效点数和点分布,对于逐框操作,在每个节点上都会维护额外的标志,例如惰性标签。...)进行匹配至关重要,由于地图通过匹配和合并新扫描而动态增长,因此每次合并新扫描时都必须重新构建k-d,现有方法通常使用PCL中的静态kd,并基于地图(或子地图)中的所有点重建整个,这导致了大量的计算成本...,例如点配准、状态估计和kd相关操作(包括查询和更新),kd相关操作的时间分解如图6(b)所示,ikd的平均增量更新时间为0.23 ms,仅为使用静态k-d(5.71 ms)的4%。

    1.2K10

    Kd-Trees

    KD 有许多应用,从对天文物体进行分类到计算机动画,再到加速神经网络,再到挖掘数据再到图像检索等。 下面以普林斯顿大学算法课第 5 次作业为例,长老向大家分享这种高效、神奇的数据结构。...Kd-Trees 插入示意 相对于 BST 的主要优势在于,它支持范围搜索和最近邻居搜索的高效实现。每个节点对应于单位正方形中与轴对齐的矩形,该矩形将其子树中的所有点都包含在内。...如果不进行剪枝,那么就算你的代码功底非常好,在规定时间内求得了正确解,没有超时,也一样不能通过测评: - student sequence of kd-tree nodes involved in calls...to Point2D methods: A D F I G B C E J - reference sequence of kd-tree nodes involved in calls to Point2D...findNearest(p, node.right); findNearest(p, node.left); } } 为了代码实现的方便,二叉当然要用递归的写法啦

    81320

    每周学点大数据 | No.27高维外存查找结构——KD

    今天我们要讲的二维空间内查找结构叫作KD ,之所以讲它,是因为它的性质比较容易保证。 小可:那什么又是KD 呢? Mr. 王:简单来说,KD 很像是将两个二叉叠在一起。...而将两棵二叉的层次交替存储,就合并成了KD 。 小可:KD 具体是如何定义的呢? Mr....也就是说,每一片叶子都已经仅仅代表一个节点,KD 就建好了。 小可:哦,这样我就明白多了。那么对一棵建好的KD 又是怎样进行查询的呢? Mr....为了将查找树结构引入到磁盘上,我们引入了B 。这次我们也可以发展KD ,引入一种适合存储在硬盘上的数据结构——kdB 。 小可:kdB 是不是就是把KD 和B 融合到一起啊? Mr....王:是的,kdB 结合了KD 和B 的思想,使得KD 更加适合磁盘存储。在具体的实现中,逻辑结构依然采用KD ,当叶子包含B/2 到B 个点时停止分割。在内部节点的BFS 块。

    1.5K80

    从K近邻算法、距离度量谈到KD、SIFT+BBF算法

    本文各部分内容分布如下: 第一部分讲K近邻算法,其中重点阐述了相关的距离度量表示法, 第二部分着重讲K近邻算法的实现–KD,和KD的插入,删除,最近邻查找等操作,及KD的一系列相关改进(包括BBF...,M等); 第三部分讲KD的应用:SIFT+kd_BBF搜索算法。...下面,咱们依次来看kd的插入、删除、查找操作。 2.3、KD的插入 元素插入到一个K-D的方法和二叉检索类似。本质上,在偶数层比较x坐标值,而在奇数层比较y坐标值。...2.4、KD的删除 KD的删除可以用递归程序来实现。我们假设希望从K-D中删除结点(a,b)。如果(a,b)的两个子树都为空,则用空来代替(a,b)。...2.6、kd近邻搜索算法的改进:BBF算法 咱们顺着上一节的思路,参考《统计学习方法》一书上的内容,再来总结下kd的最近邻搜索算法: 输入:以构造的kd,目标点x; 输出:x 的最近邻

    94620

    【硬核】使用替罪羊实现KD-Tree的增删改查

    因为KD-Tree和二叉搜索不同,KD-Tree中的节点存储的元素都是高维的。每一棵子树的衡量的维度都不同,这会使得旋转操作变得非常麻烦,甚至是不可行的。...问题是KD-Tree当中我们在不同深度判断元素大小的维度不同,我们旋转之后节点的深会发生变化,会导致判断标准发生变化。这样会导致旋转之后不再满足KD-Tree的性质。...我们用刚才的图举个例子: 我们给每个节点标上了数据,在深为0的节点当中,划分维度是0,深为1的节点划分维度是1。当我们旋转之后,很明显可以发现KD-Tree的性质被打破了。...这还只是二维的KD-Tree,如果维度更高,会导致情况更加复杂。 通过这个例子,我们证明了平衡旋转的方式不适合KD-Tree。 那么,除了平衡旋转的方法之外,还有其他方法可以保持平衡吗?...实际上不只是KD-Tree如此,很多平衡都不支持修改,比如我们之前介绍过的LSMT就不支持。当然不支持的原因多种多样,本质上来说都是因为性价比太低。

    1.6K21

    kd-tree理论以及在PCL 中的代码的实现

    k-d (k-dimensional的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。K-D是二进制空间分割的特殊的情况。...用来组织表示K维空间中点的几何,是一种带有其他约束的二分查找,为了达到目的,通常只在三个维度中进行处理因此所有的kd_tree都将是三维的kd_tree,kd_tree的每一维在指定维度上分开所有的字节点...k-d算法可以分为两大部分,一部分是有关k-d本身这种数据结构建立的算法,另一部分是在建立的k-d树上如何进行最邻近查找的算法。 构建算法 k-d是一个二叉,每个节点表示一个空间范围。...由位于该节点分割超平面左子空间内所有数据点所构成的k-d Right k-d 由位于该节点分割超平面右子空间内所有数据点所构成的k-d parent k-d 父节点 先以一个简单直观的实例来介绍...k-d算法。

    1.4K30

    nanoflann库

    在动态点云数据集上进行KD查找:dynamic_pointcloud_example.cpp 旋转组(SO2)上的KD查找:SO2_example.cpp 旋转组(SO3)上的KD查找:SO3_...example.cpp 使用外部适配器类在点云数据集上查找KD:pointcloud_adaptor_example.cpp KD-tree使用在Eigen::Matrix:matrix_example.cpp...A.建立具有单一索引的KD(没有随机化的KD,没有大致的搜索)。快速,线程安全地查询KD树上最近的邻居。接口是: 1....2.如何选择KD参数? 2.1 KDTreeSingleIndexAdaptorParams::leaf_max_size KD它有一个根节点,一组中间节点,最后是没有孩子的“叶”节点。...由于模板化代码的原因,在构建KD索引时还节省了一些时间,避免在辅助矩阵中复制数据(下图中的时间以毫秒为单位): ? 4.其他KD项目 FLANN - Marius Muja和David G.

    4K21
    领券