在哪里可以找到k-最近邻算法的串行C / C ++实现?
你知道有这个库吗?
我找到了openCV,但实现已经并行了
我想从串行实现开始,并将其与pthreads openMP和MPI并行化。
谢谢,
亚历
答案 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这样的层次结构......这完全取决于你需要什么
有关包括伪代码在内的更多信息,请参阅以下演示文稿: