精确最近邻算法的实证比较
1. 最近邻搜索(NNS)概述
在数据处理和分析中,最近邻搜索(NNS)是一个重要的问题。对于维度 ( d \leq 2 ) 的情况,存在理想的解决方案,其查询时间为 ( O(d \log n) ),空间复杂度为 ( O(dn) ),预处理时间为 ( O(dn \log n) )。当 ( d = 1 ) 时,可使用排序数组上的二分搜索;当 ( d = 2 ) 时,可使用 Voronoi 图和快速平面点定位算法。然而,当 ( d > 2 ) 时,所有提出的 NNS 算法都不太理想,大多数算法仅在预期情况下和中等维度(( d \leq 10 ))下表现良好。在高维度下,这些算法会受到维度灾难的影响,查询时间性能甚至不如简单的线性搜索。不过,对于 NNS 的一些松弛问题,如近似最近邻搜索、近邻搜索和近似近邻搜索,存在在高维度下查询时间性能更好的算法。
2. 三种数据结构简介
2.1 KD - 树
KD - 树由 Bentley 首次提出,它通过将点空间划分为相互排斥的超矩形区域来工作。具体操作步骤如下:
1. 首先使用与轴平行的超平面将点空间划分为两个子区域。
2. 然后递归地对每个子区域应用划分过程。
3. 对于给定的查询 ( q ),只检查可能包含第 ( k ) 个最近邻的区域。
4. 当子区域内的数据点数量低于给定阈值,或者矩形子区域的最大相对宽度(相对于整个点空间)低于给定阈值时,停止递归划分。
KD - 树的每个节点与它所代表的点空间的矩形区域相关联。内部节点除了其区域外,还与一个划分其区域的与轴平行的超平面相关联。本文使用“最宽边滑动中点”划分策略,该策略
超级会员免费看
订阅专栏 解锁全文
811

被折叠的 条评论
为什么被折叠?



