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

9

我想知道在哪里可以找到k最近邻算法的串行C/C++实现?
你是否知道有哪个库具有这个功能?
我已经找到了openCV,但是它的实现已经是并行的。
我想从串行实现开始,并使用pthread、openMP和MPI进行并行化。

谢谢,
Alex


1
你将应用这个算法解决什么问题?KNN非常简单,你可以尝试实现自己的方法。 - Tomasz Dzięcielewski
3个回答

5

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

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


3

我编写了一个C++实现的KD树,可以进行最近邻搜索。您可以通过添加优先队列轻松扩展它以进行K个最近邻搜索。

更新:我添加了对N维度中K个最近邻搜索的支持。


1
实现这个的最简单方法是循环遍历所有元素并存储K个最近邻居(只是比较)。复杂度为O(n),这并不好,但不需要预处理。因此,现在真正取决于您的应用程序。您应该使用一些空间索引来分区搜索knn的区域。对于一些应用程序,基于网格的空间结构就足够了(只需将世界分成固定块,并首先仅在关闭块内进行搜索)。当你的实体均匀分布时,这是很好的选择。更好的方法是使用一些分层结构,如kd-tree……这确实取决于您的需求。
有关详细信息(包括伪代码),请查看以下演示文稿:

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

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


谢谢回复。实际上我必须从一个已经实现的版本开始。 - alexsardan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接