程序员的日常

【基础不牢,地动山摇】K-D树

2019-07-22  本文已影响0人  鱼香土豆丝

为什么在这里介绍最为基础的数据结构“树”呢?
因为在最近邻算法中树有很重要的作用。首先回顾一下二叉树:

二叉树

二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。二叉树常被用于实现二叉查找树和二叉堆。一张图快速理解二叉树:
[图片上传失败...(image-d630b-1563793502634)]
二叉树的搜索和构造就不再这里介绍了,大家可以参考这篇文章。link

K-D树

为什么在上一节介绍二叉树?因为K-D树是每个节点都为k维点的二叉树。是一种对K维空间内的实例点进行存储,以便对其进行快速的搜索的方法。构造K-D 树相当于不断的用垂直与座标轴的超平面将K维空间切分。K-D树的每个节点对应一个K维超矩形区域。很拗口?来个例子吧

例子

一个二维数据集
T=\{(2,3)^T,(5,4)^T,(9,6)^T,(4,7)^T,(9,6)^T,(4,7)^T,(8,1)^T,(7,2)^T\}

point_list.sort(key=itemgetter(axis))
median = len(point_list) // 2 # choose median
location=point_list[median]
在这里插入图片描述
如何构造KD树?
具体的算法流程如下所是:
输入: K维空间的数据集
输出: KD树

K-D树搜索

输入: KD树,目标点x
输出: KD树

上一篇 下一篇

猜你喜欢

热点阅读