KD Tree

本文介绍了如何使用kd树进行二维平面内的矩形范围查询。kd树是一种数据结构,用于高效地存储和检索二维空间中的点。通过预处理将点组织成kd树,可以在O(logn)的时间复杂度内找到矩形范围内的点。构造kd树的过程是沿着垂直或水平方向递归切分,确保每个节点对应一个矩形区域。在查找时,根据矩形与节点区域的关系,递归地深入子树。这种方法在地理信息系统、计算机图形学等领域有广泛应用。
摘要由CSDN通过智能技术生成

Motivation

一维范围查询:先进行预处理(在 O(n * log n) 时间内组织成一个有序向量),然后在 O(log n) 时间内找到起始位置,遍历找出范围内的点。

那么,如何查询二位平面内,矩形范围内的点?


kd树是一棵递归定义的平衡二叉搜索树。树上的每个节点都对应二位平面上的一个矩形区域。父节点对应的区域等于子节点对应区域之和。

构造算法

若当前节点深度为偶(奇)数,则沿垂直(水平)方向切分,所得子区域随同包含的输入点分别构成左、右孩子。重复,直到子区域只剩单个点。

这里约定每个区域的边和边包含在区域边和边在区域


查找

在任一节点处,

  • 若子树仅包含单个节点,则直接判断
  • 若节点对应区域在矩形内,则直接输出所有子节点
  • 若节点对应区域在矩形外,则所有子节点都不在矩形内,不必再向下
  • 否则,继续递归深入左右子树

时间复杂度O\left ( \sqrt{n} \right )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值