之手算KD-tree
转自:https://zhuanlan.zhihu.com/p/27453420
数据集:
kd-tree构建过程:
第一步:进行第一次split
从上图可以看出,X轴的方差更大一些,所以先从X轴进行split。split value取point 1和point 2的平均值,即(0.89+0.04) / 2 = 0.465
分成如下两个结点:
在每个结点,我们记录下它的tight coordinate bound,这个是为了在查询的时候剪枝用的。
这个时候,这棵树的样子:
第二步:递归进行split
我们先来确定我们用的启发式方法:
a.选择哪个轴进行split?方差大的,或者还没有使用过的轴
b.如何确定split value:(smallest value + biggest value) / 2
c.什么时候stop?在本例子中选择node只含有<=2个point的时候
因为第一次是用的x轴split,为了充分利用信息,第二次使用y轴split
现在就树是这个样子了:
同样对node 1进行split:
树变成这个样子:
因为node 5的point有3个,所以需要继续split,因为上次用Y轴split,所以这次用x轴。
最终的树:
kd-tree查询过程:
比如我们的query point是红色点:
从kdtree里可以找到属于node 6:
它到data point 0的距离是0.256,所以最近邻居一定出现在以0.256为半径的圆里。
我们来tranverse back:
但是node7的tight bounding box并不在圆里,所以prune掉。
继续向上找:
node4只有一个点,而这个点不在圆里,prune掉。
继续tranverse:
node0包含两个结点,node0本身在圆里,所以就想看node2和node3
计算node2和node3到query point的距离:
这个时候data point3到query point的距离最小,而已缩小搜索圆了,搜索圆的半径减小到0.18439。
这个时候继续搜索,但是所有结点都搜索完了,所以data point3是最近邻。
之手算KD-tree的更多相关文章
- AOJ DSL_2_C Range Search (kD Tree)
Range Search (kD Tree) The range search problem consists of a set of attributed records S to determi ...
- k-d tree 学习笔记
以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...
- 【BZOJ-2648&2716】SJY摆棋子&天使玩偶 KD Tree
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2459 Solved: 834[Submit][Status][Discu ...
- K-D Tree
这篇随笔是对Wikipedia上k-d tree词条的摘录, 我认为解释得相当生动详细, 是一篇不可多得的好文. Overview A \(k\)-d tree (short for \(k\)-di ...
- K-D Tree题目泛做(CXJ第二轮)
题目1: BZOJ 2716 题目大意:给出N个二维平面上的点,M个操作,分为插入一个新点和询问到一个点最近点的Manhatan距离是多少. 算法讨论: K-D Tree 裸题,有插入操作. #inc ...
- k-d Tree in TripAdvisor
Today, TripAdvisor held a tech talk in Columbia University. The topic is about k-d Tree implemented ...
- k-d tree算法
k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构.主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索). 应用背景 SIFT算法中做特征点匹配的时候就会利用到k ...
- k-d tree模板练习
1. [BZOJ]1941: [Sdoi2010]Hide and Seek 题目大意:给出n个二维平面上的点,一个点的权值是它到其他点的最长距离减最短距离,距离为曼哈顿距离,求最小权值.(n< ...
- [模板] K-D Tree
K-D Tree K-D Tree可以看作二叉搜索树的高维推广, 它的第 \(k\) 层以所有点的第 \(k\) 维作为关键字对点做出划分. 为了保证划分均匀, 可以以第 \(k\) 维排名在中间的节 ...
- BZOJ3489 A simple rmq problem K-D Tree
传送门 什么可持久化树套树才不会写呢,K-D Tree大法吼啊 对于第\(i\)个数,设其前面最后的与它值相同的位置为\(pre_i\),其后面最前的与它值相同的位置为\(aft_i\),那么对于一个 ...
随机推荐
- P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
- JavaScript 获得 坐标
<!DOCTYPE html> <html> <head> <title>location</title> <meta http-eq ...
- 洛谷P4145 上帝造题的⑦minutes ②
又是线段树. 区间开平方求和,套路题. 如果开到了1就不用再开下去了,否则直接到底. 记得 l > r 时交换 l r #include <cstdio> #include < ...
- 【ATcoder】Xor Sum 2
题目大意:给定一个 N 个点的序列,求有多少个区间满足\(\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]\). 题解: 小结论:\(a\oplus b=a+b\r ...
- 【POJ3635】Full Tank 优先队列BFS
普通BFS:每个状态只访问一次,第一次入队时即为该状态对应的最优解. 优先队列BFS:每个状态可能被更新多次,入队多次,但是只会扩展一次,每次出队时即为改状态对应的最优解. 且对于优先队列BFS来说, ...
- Java: md5 加密中文 & 注意编码
今天使用java的md5加密一个字符串(含有部分中文),遇到问题,百思不得其解. 后面网上搜索了一下,才知道是[编码]的问题. 以前在asp中用md5加密的时候,了解 gb2312和utf-8编码下, ...
- Eclipse导入模板格式Xml配置文件
Eclipse一般常用的可以导入两处 *.xml 格式的模板,一个是常用的注释格式模板,另一个是代码格式化时用的模板,导入方法如下: 假设: 1.xml 是代码注释格式模板 2.xml 是代码 ...
- Centos7.2安装搜狗拼音
方法一: Fedora 19/20/21/rawhide 使用以下命令添加源: # yum install dnf-plugins-core # dnf copr enable mosquito/my ...
- Docker:使用Jenkins构建Docker镜像
Docker 彭东稳 1年前 (2016-12-27) 10709次浏览 已收录 0个评论 一.介绍Jenkins Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从 ...
- C#面向对象设计的七大原则
本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 . 1. 开闭原则(Open-Closed Principle, OCP) 定义:软件实 ...