zoukankan      html  css  js  c++  java
  • KD-tree

    之前看过一个关于kd_tree的形象的解释,现在想重新看下,可惜找不到了,网上很多关于这个解释太教条化,不够简单。在此记录下自己的肤浅的理解。

    如图,这个图的建立就不解释了,网上很容易搜到,主要是利用X方向和Y方向数据的方差大小去确定第一次画线是横着画还是竖着画,应该是这样:数据在横向更分散(方差更大)的话第一次画线就竖着画,数据在竖向更分散的话第一次画线就横着画。

    现在只说建好图之后的回溯,网上用回溯一词,我感觉没必要说的那么高大上,就是回看。现在需要找到离星号P点距离最近的点,这里可以认为点P是一个新点(newpoint)。

    1.从A点开始很容易通过一直比较x坐标和y标的大小找到点E,比如说A点左区域与A点右区域比较的话,A点左区域中的点一定离P点更近(因为XP>XA>XB),找到点E后,没法再往下找了。

    2.以P为圆心,以PE的长度为半径画圆,此圆与C点所在的直线若没有交点,那最临近点就是E,针对本例而言,是有交点的,这说明C点所在直线的上面有可能存在离P点更近的点。

    3.关注P点上面的点。首先比较PC与PE,发现PC>PE,则更新E点为C点。

    4.比较PC与PD的长度(因为离C最近的节点是叶子节点D),结果是C点不被更新,比较PC与PF的长度,结果是不被更新,比较PC与PG的长度,结果是PG<PC,则C点被更新为G点。

    5.现在走到G点了,再回看。F,D,C,这三个点都被比较过了,所以不用管它们了。以P为中心,以PG为半径画圆,与A点所在直线没有交点,说明A点右边区域内的点离P点只会比G点离P点更远,而不会更近。

    6.G点就是要找的最临近点。

    最近邻搜索意在树中搜索得到与给定点最近的点。最近邻搜索可以kdtree树高效地实现,因为kdtree可以快速地移除不满足搜索条件的搜索空间。

  • 相关阅读:
    CUDA运行时 Runtime(一)
    CUDA C++程序设计模型
    CUDA C++编程手册(总论)
    深度学习到底有哪些卷积?
    卷积神经网络去雾去雨方法
    马斯克如何颠覆航天? 1/5385成本,c++和python编程!
    CUDA 9中张量核(Tensor Cores)编程
    利用表达式调用全局变量计算出错原因
    述函数的作用,浏览器执行函数的过程
    表达式的差异和相同点
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/9858432.html
Copyright © 2011-2022 走看看