C++ 最近邻搜索的高效实现

C++ 最近邻搜索的高效实现,c++,tree,nearest-neighbor,C++,Tree,Nearest Neighbor,我正在尝试实现一个有效的算法来解决最近邻搜索问题 我读过一些关于数据结构的教程,这些数据结构支持针对此类问题的操作(例如,R-树、覆盖树等),但它们都很难实现 我也找不到这些数据结构的示例源代码。我知道C++,我正在尝试用这个语言解决这个问题。 理想情况下,我需要描述如何使用源代码实现这些数据结构的链接。快速最近邻搜索库有几种不错的选择 ,这是基于Mount和Arya的工作。这项工作记录在S.Arya和D.M.Mount的一篇论文中。“固定维度中的近似最近邻查询”。在过程中。第四届ACM-暹罗

我正在尝试实现一个有效的算法来解决最近邻搜索问题

我读过一些关于数据结构的教程,这些数据结构支持针对此类问题的操作(例如,R-树、覆盖树等),但它们都很难实现

我也找不到这些数据结构的示例源代码。我知道C++,我正在尝试用这个语言解决这个问题。
理想情况下,我需要描述如何使用源代码实现这些数据结构的链接。

快速最近邻搜索库有几种不错的选择

  • ,这是基于Mount和Arya的工作。这项工作记录在S.Arya和D.M.Mount的一篇论文中。“固定维度中的近似最近邻查询”。在过程中。第四届ACM-暹罗研讨会。离散算法,第271-280页,1993年

  • ,这是基于Marius Muja&Co.的工作。Marius Muja和David G.Lowe在2009年国际计算机视觉理论与应用会议(VISAPP'09)上发表了一篇论文,“具有自动算法配置的快速近似近邻”。FLANN的代码在上提供

在某些情况下,FLANN似乎更快,并且是一个更现代的版本,它为许多其他语言提供了可靠的绑定,可以快速合并更改。如果您想要一个经过良好测试的标准库,ANN可能是一个不错的选择

根据评论进行编辑

这两个库都有大量的文档和示例

ANN的示例代码见第2.1.4节中的


FLANN的示例代码可在FLANN存储库中找到,例如/examples/FLANN_examples.c

您可以尝试使用线条扫描算法来查找最近的点对:.

如何使用它,例如我有(x1,y1)(x2,y2)…(xn,yn)?@dato-答案已更新,包括每个项目文档中权威示例的链接。我需要instal yes FLANN库?是的,你会的。使用FLANN(或ANN)需要在包含和库路径上使用适当的文件,就像用其他非平凡C++一样。library@AndrewWalker你能补充一下答案吗?这是弗兰的叉子,显然更快。这是一个C++11头唯一的库,非常方便。感谢和问候您的数据的维度是什么?对于二维点数据,我建议使用Kd树。它很容易实现。对于其他类型的数据/几何图形,您可能希望查看R树(boost 1.54支持rtree索引)