まず、N * N距離行列を取得しました。各ポイントについて、最近傍を計算したので、N*2行列が作成されました。次のようになります。
0 -> 1 1 -> 2 2 -> 3 3 -> 2 4 -> 2 5 -> 6 6 -> 7 7 -> 6 8 -> 6 9 -> 8
2番目の列は、最近傍のインデックスでした。したがって、これは特別な種類の有向グラフであり、各頂点には1つの次数しかありませんでした。
もちろん、最初にN * 2行列を標準のグラフ表現に変換し、BFS/DFSを実行して連結成分を取得することもできます。
しかし、この特別なグラフの特徴を考えると、仕事をするための他の速い方法はありますか?
本当にありがたいです。
アップデート:
ここでは、この場合 の簡単なアルゴリズムを実装しました。
ほら、私はユニオン検索アルゴリズムを使用しませんでした。データ構造によって物事がそれほど簡単ではなくなる可能性があるためです。私の場合、それが最速の方法であるかどうかは疑問です(私は実際に意味しました)。
_mergeプロセスには時間がかかる可能性があると主張することもできますが、新しいラベルを割り当てながらエッジを連続した場所に入れ替えると、マージにかかる費用はほとんどかかりませんが、元のインデックスをトレースするにはさらにN個のスペースが必要です。