我正在尝试为最近邻搜索问题实现一种有效的算法。
我已阅读有关某些数据结构的教程,这些数据结构支持此类问题的操作(例如, R-tree ,封面树等),但是所有这些都难以实施。
此外,我找不到这些数据结构的示例源代码。我知道C ++,我试图用这种语言来解决这个问题。
理想情况下,我需要描述如何使用源代码实现这些数据结构的链接。
答案 0 :(得分:11)
快速最近邻搜索库有几种不错的选择。
ANN,基于Mount和Arya的工作。这项工作记录在S. Arya和D. M. Mount的论文中。 “固定维度的近似最近邻居查询”。在Proc。第四届ACM-SIAM Sympos。离散算法,第271-280页,1993年。
FLANN,基于Marius Muja&在2009年,计算机视觉理论与应用国际会议(VISAPP'09)上有一篇由Marius Muja和David G. Lowe撰写的论文,“自动算法配置的快速近似最近邻”。 FLANN的代码可在github
FLANN在某些情况下似乎更快,并且是一个更现代的代码版本,具有针对许多其他语言的可靠绑定,可以快速合并更改。如果你想要一个经过良好测试的标准库,ANN可能是一个不错的选择。
编辑以回应评论
这两个库都有大量的文档和示例。
ANN的示例代码可在Manual的2.1.4节
中找到FLANN的示例代码可在FLANN存储库examples directory中找到,例如/examples/flann_examples.c
答案 1 :(得分:2)
你可以尝试使用lineweep算法来找到最接近的点对:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lineSweep。