K-最近邻C / C ++实现

时间:2012-11-21 07:45:04

标签: c++ c parallel-processing nearest-neighbor knn

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

谢谢,
亚历

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

我用最近邻搜索写了C++ implementation for a KD-tree。您可以通过添加优先级队列轻松地将其扩展为K个最近邻居。

更新:我在N维

中添加了对k近邻搜索的支持

答案 2 :(得分:1)

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

有关包括伪代码在内的更多信息,请参阅以下演示文稿:

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

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