9

在哪里可以找到 k-最近邻算法的串行 C/C++ 实现?
你知道任何有这个的图书馆吗?
我找到了 openCV,但实现已经是并行的。
我想从串行实现开始,并使用 pthreads openMP 和 MPI 将其并行化。

谢谢,
亚历克斯

4

3 回答 3

5

安呢?http://www.cs.umd.edu/~mount/ANN/。我曾经使用过 kdtree 实现,但还有其他选择。

从网站上引用:“ANN 是一个用 C++ 编写的库,它支持数据结构和算法,用于在任意高维度上进行精确和近似最近邻搜索。”

于 2012-11-21T11:03:41.903 回答
3

我为最近邻搜索的 KD 树编写了C++ 实现。您可以通过添加优先级队列轻松地将其扩展到 K 近邻。

更新:我添加了对 N 维中 k-最近邻搜索的支持

于 2012-12-10T21:37:47.133 回答
1

实现这一点的最简单方法是遍历所有元素并将 K 存储在最近的位置。(只是比较)。复杂性O(n)不是很好,但不需要预处理。所以现在真的取决于你的应用程序。您应该使用一些空间索引来划分您搜索 knn 的区域。对于某些应用程序基于网格的空间结构就可以了(只需将您的世界划分为固定块并仅在关闭块内搜索)。当您的实体均匀分布时,这很好。更好的方法是使用像 kd-tree 这样的层次结构......这真的完全取决于你需要什么

有关包括伪代码在内的更多信息,请查看这些演示文稿:

http://www.ulozto.net/xCTidts/dpg06-pdf

http://www.ulozto.net/xoh6TSD/dpg07-pdf

于 2012-11-21T09:47:36.957 回答