2012-04-10 8 views
1

ほとんどの質問は、類似性(pidgeonholes)に基づいてノードをグループ化することですが、単純に近接性に基づいてノードをグループ化したいと思います。ノードを効率的にグループ化しますか?

私は、ノードの大規模で密集したコレクションを持っています。画面上にはある程度のスペースがあるので、サイズがあると考えることができます。

私がしようとしているのは、これらのノードを単一のノードを効率的にグループ化し、処理時間とコンテナあたりのノード数を集めることです。

現在の試行は遅すぎるか、動作しませんでしたが、私が念頭に置いているのと同じ解決策に基づいています:ノードを取ることによって多くの可能なコンテナを計算し、周囲のノードをランダムにそれらをグループ化し、最も効果的なコンテナを選びます。

あなたのアイデアは何ですか、特定の言語ではありませんが、私はこれにPHPやJavaScriptを使用します。

私はそれが無制限のノードを受け入れる必要があるので、ノードが数百万までのために、新しいコンテナを作成したり、必要に応じて削除、彼らが来るとしてコンテナにそれらを入れて、中にストリーミングされることを言及するのを忘れてしまった
Edit 

コンテナ。それが最も理想的です。

答えて

1

この問題をクラスタリングといいます。ノードのセットと、任意の2つのノード間の距離を計算する関数mがあります。各クラスタ内のすべてのノード間の距離の合計が最小になるようにクラスタを検索します。

これを行う簡単なアルゴリズムがいくつかあります。たとえば、k-Meansおよびk-Medoidを検索します。これらの2つはあなたのアプローチに非常によく似ています。より効率的なバージョンはCLARANSアルゴリズム[NH94]です。私はあなたのための良い情報源が見つかりませんでしたが、ここに行く:

(ドイツ語)一般的なクラスタリングのスクリプト。 CLARANS http://bib.dbvis.de/uploadedFiles/232.pdf

紙についてCLARANS名で http://www.comp.nus.edu.sg/~atung/publication/pakdd002.pdf

"k" はクラスタの数があると説明ページ45 http://www.informatik.hu-berlin.de/forschung/gebiete/wbi/teaching/archive/ws1112/vl_datawarehousing/15_clustering_12.pdf

英語スクリプトの擬似コードでCLARANSが含まれています。これら3つのアルゴリズムでは、先験的にクラスターの数を指定する必要があります。

別のアプローチについては、DBSCANアルゴリズムを参照してください。このアルゴリズムではクラスタの数は必要ありませんが、ノードについて他の知識が必要です。ウィキペディアの記事でこれについて非常によく説明されています。 :-)

+1

私は自分のコードでクラスタリングという用語を使用しています。これはまさに私が望むものです。アルゴリズムをありがとう。私はそれらを見て、それらが適切な解決策であるかどうかを知らせます。 – DanRedux

+0

これらのアルゴリズムを見ると、私にとってはうまくいくものを設計しました。私は自分の "k"コンテナをランダムに配置し、各ノードに最も近いコンテナを見つけ、それらのグループを意味し、そこにコンテナを移動し、それを数回繰り返す。私が改善しなければならない部分はループです..一部のノードは範囲外です。他のノードの範囲内にあるノードをループするより速い方法があるのだろうかと思います。ノードの範囲が範囲外である非常にまばらな領域が存在する可能性があります。 – DanRedux

+0

既にDBSCANに関する記事を読んでいますか?これはあなたが望むものと思われます。 – Basti

関連する問題