近邻搜索之制高点树(VP-Tree)

本文介绍了制高点树(VPTree)的概念,这是一种用于近邻搜索的数据结构。VPTree不同于kd-tree,它的划分策略是基于选择一个数据点作为制高点,根据其他点与其的距离来划分数据。文章详细阐述了VPT的构造过程,并提出了查询算法,包括如何在给定查询点和半径条件下,有效地搜索目标区域。此外,还提到了简易实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子

近邻搜索是一种很基础的又相当重要的操作,除了信息检索以外,还被广泛用于计算机视觉、机器学习等领域,如何快速有效的做近邻查询一直是一项热门的研究。较早提出的方法多基于空间划分(Space Partition),最具有代表性的如kd-tree(kdt),球树等。本篇将介绍基于空间划分方法中的一种,制高点树(Vantage Point Tree,vpt),最初在1993年提出,比kdt稍晚,提供了一个不一样的建树思路。

VPT结构

和kdt一样,vpt也是一类二叉树,不同的是在每个节点的划分策略。略微回顾一下kdt,它在每个节点选择一个维度,根据数据点在该维度上的大小将数据均分为二。而在vpt中,首先从节点中选择一个数据点(可随机选)作为制高点(vp),然后算出其它点到vp的距离大小,最后根据该距离大小将数据点均分为二。建树算法如下:

  1. 选择某数据点v作为vp
  2. 计算其它点{Xi}到v的距离{Di}
  3. 求出{Di}中值M,小于M的数据点分给左子树,大于M的数据点分给右子树
  4. 递归地建立左子树和右子树
这里提供一个简单的例子如图,框中为平面上的点,其中红框为选中的vp,根据其它点到vp的距离进行了子树划分。

VPT查询算法


vpt查询是 准确近邻查询,较适合范围查询,可方便扩展为k近邻查询。

进行近邻查询时,假定查询点为q

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值