2012-11-21 14 views
7

k-nearest neighborアルゴリズムのシリアルC/C++実装はどこにありますか?
これを持っているライブラリを知っていますか?
私はopenCVを見つけましたが、実装はすでに並行しています。
シリアル実装から始め、pthreads openMPとMPIで並列化したいと考えています。

K-nearest neighbor C/C++の実装

おかげで、

アレックス
+1

におけるk最近傍探索のためのサポートを追加し、このアルゴリズムを適用するつもりですか? KNNは本当にシンプルで、独自のアプローチを実装しようとすることができます。 –

答えて

4

ANNはどうですか? http://www.cs.umd.edu/~mount/ANN/。私はかつてkdtree実装を使用しましたが、他にもオプションがあります。

「ANNはC++で書かれたライブラリで、任意の高次元で正確かつ近似的な近似検索のためのデータ構造とアルゴリズムをサポートしています。

+0

ありがとう、ANNは良い出発点です。 – alexsardan

1

これを実現する最も簡単な方法は、すべての要素およびストアK最寄りをループです。 (ちょうど比較して)。これの複雑さはO(n)であまり良くありませんが、前処理は必要ありません。今は本当にあなたのアプリケーションに依存します。 knnを検索する領域を分割するには、空間インデックスを使用する必要があります。いくつかのアプリケーショングリッドベースの空間構造は、ちょうど良い(ちょうどあなたの世界を固定ブロックに分割し、最初に閉ブロック内でのみ検索する)。これは、エンティティが均等に分散されている場合に適しています。より良いアプローチは、KDツリーのようないくつかの階層構造を使用することです...それは本当にすべてあなたがこれらのプレゼンテーションでの擬似コードの外観などの詳細は、

が必要なものに依存します:

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

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

+0

返事をありがとう。実際には、すでに実装されているバージョンから始めなければなりません。 – alexsardan

2

私は最近隣の検索でC++ implementation for a KD-treeを書きました。プライオリティキューを追加することで、K最近隣のユーザのために簡単に拡張できます。

アップデート:私は何の問題についてはN次元

+0

ありがとうございますが、ライセンス情報は表示されません。 –