1.KD树简介
kd树是一种树形结构,树的每个节点存放一个k维数据,某一节点的子节点可以看作是由过该节点一个平面切割后产生的,其具体演示如图:
(找到中间点,比中间点小的放到一起,比中间点大的放到一起)
2.为什么要使用KD树
kd树可以方便快速查找指定信息,节约时间提高效率
3.构建KD树的代码实现
from math import sqrt
class KDNode:
def __init__(self, point, left=None, right=None,split_dim=0):
self.point = point
self.left = left
self.right = right
self.split_dim=split_dim #用于记录当前节点的分割维度,方便后续进行搜索时判断
#注意:这里常见了KDNode类,用于构建KD树的节点,可以理解为数据储存结构
class KD_Tree_builder:
def build_tree(self, points, depth=0):
#退出递归条件
if len(points) == 0:
return None
#求维度
k = len(points[0])
#循环维度
axis = depth % k
points.sort(key=lambda x: x[axi