KDTREE 2:用于在多维欧几里得空间中高效搜索近邻的Fortran 95和C++软件
数据分析、统计与概率
2007-05-23 v2 计算物理
摘要
许多基于数据的统计算法要求在一组点中为给定向量找到近邻或最近邻,通常具有欧几里得拓扑。k-d数据结构和搜索算法是经典二叉搜索树向高维空间的推广,因此可以在O(log N)时间内定位示例向量的近邻,而不是暴力O(N)时间,其中N是数据库的大小。KDTREE2是一个Fortran 95模块,以及一组并行的C++类,实现树构建和搜索例程,以找到一组m个最近邻或所有在某个欧几里得距离r内的邻居。这两个版本是独立的,并且完全独立运行。在搜索方法的实现中给予了相当大的关注,导致计算效率显著提高(高达一个数量级),优于作者先前通过互联网分发的版本。架构改进包括为内存缓存友好性能的重新排列、用于大m搜索的基于堆的优先级队列,以及通过几何约束更有效地修剪搜索路径以避免浪费精力。这些改进在更困难和更慢的情况下最为有效:更大的数据库大小、包含数据集的高维流形,以及要搜索的更多邻居数量。C++实现需要安装标准模板库以及BOOST C++库。
引用
@article{arxiv.physics/0408067,
title = {KDTREE 2: Fortran 95 and C++ software to efficiently search for near neighbors in a multi-dimensional Euclidean space},
author = {Matthew B. Kennel},
journal= {arXiv preprint arXiv:physics/0408067},
year = {2007}
}
备注
Software is available at ftp://lyapunov.ucsd.edu/pub/nonlinear/kd_tree/kdtree2.tar.gz