学习了KD树算法,用来进行最近邻匹配,其伪代码如下:
# KD树算法的伪代码
# 节点结构:
# node{
# node_data # 节点数据
# node_left # 左子树
# node_right # 右子树
# node_parrent# 父节点
# node_s # 维度序号
# }
# 建立KD树:
# 输入:点集list
# 输出:KD树根节点
def build_tree(list):
if list is None:
return None
# 计算所有点在每一维的方差并排序,从方差最大的维度vi维开始建树
# 提取点集在vi维的中间点,该点为根节点tree_node
for point in other_points:
if point[vi] < tree_node[vi]:
left_points.append(point)
else:
right_points.append(point)
build_tree(left_points)
# 设置点集 left_points 根节点的父节点为 tree_node
build_tree(right_points)
# 设置点集 right_points 根节点的父节点为 tree_node
# 查找最近邻:
# 输入:KD树根节点kd, 目标点target
# 输出:与 target 最近点 min_node, 最近距离 min_dis
def find_nn(kd, target):
if kd is None:
return 'kdTree is None'
while kd is not None: # 步骤1:二叉树搜索