【2d-Tree】Kd-tree的特例

在Coursera的算法课程中,2D-tree的实现深入探讨了二叉查找树(BST)的应用。重点在于2D-tree中range search和nearest point搜索的实现技巧。range search通过判断查询矩形与root的交集进行递归搜索;而nearest point搜索采用深度优先搜索和剪枝策略,根据目标节点与root的最短距离决定是否继续搜索。以下是相关的伪代码和Java实现示例。
摘要由CSDN通过智能技术生成

最近在学习coursera上的算法4,讲的确实很精彩,2d-tree的实现是基于二叉查找树(BST),但是其中有有很多小的tricks需要与大家分享。


需要注意的是在node数据结构的选取上:

		private Point2D point;
		private Node left;
		private Node right;
		private boolean flag;
		private RectHV rect;
前三个理所当然是链表必备要素,后面flag和rect则是为了方便实现range search和nearest point search所添加,rect为node节点所占据的空间,flag表明当前节点是以x还是y划分。

range search的实现基于以下原理:

首先判断需要搜索的矩形rect是否与root所占据的空间有交集,如果有,判断root是否在rect中,然后向下搜索。

nearest point 的实现

nearest的实现比较好玩,利用二叉树的深度优先搜索配合剪枝!

首先判断目标节点与root所占据空间的最短距离dist是否比best大,如果dist>best,则剪枝。贴出伪代码供大家学习



再给出java实现的代码


package kd
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值