クラスカルのアルゴリズムのこの高密度バージョンはよく知られていますか?


15

約1年前、友人と私は、通常のバウンドよりも優れた密度のグラフのクラスカルのアルゴリズムを実装する方法を考えました(事前にソートされたエッジを想定せずに)。具体的には、隣接行列を使用して実装された場合のプリムと同様に、すべての場合でを実現します。OmログmΘn2

C ++コードやベンチマークなど、アルゴリズムについて少しブログに投稿しましたが、一般的な考え方は次のとおりです。

  • 接続されたコンポーネントごとに1つの代表ノードを維持します。最初は、すべてのノードが自分自身を表しています。

  • dist[i]すべてのコンポーネントについてi、に入射するコンポーネント交差エッジが最も軽いようにベクトルを維持しiます。

  • パーティションを横切る最も軽いエッジを見つけるとき、線形時間でiの重みを最小にする単純なものを見つけますdist[i]

  • 接合2つの成分が場合と、隣接行列変更、そのような今ですべてのコンポーネントのためのK、及びマーク接続されたコンポーネントの代表ではなくなったijのみが残ります)。ccjAAi,k=min{Ai,k,Aj,k}kij

したがって、最も軽いエッジの収縮と前記エッジの検出の両方を線形時間で行うことができます。これをn1回実行して、MSTを見つけます。MSTにどのエッジを追加するかを実際に見つけるには、少しの簿記が必要ですが、複雑さは増しません。したがって、ランタイムはΘ(n2です。実装は、forループのほんの一部です。

クラスカルのこのバージョンは文献でよく知られていますか?

回答:


19

Iこの達成するための具体的な方法についてはよく分からない時間、しかしでクラスカルを実行するための2つの異なる方法時間は高速階層的クラスタリングと、動的に最も近いペアの他のアプリケーション」私の論文に記載されています"(SODA 1998、arXiv:cs.DS / 9912014、およびJ. Experimental Algorithms 2000):On2On2

  1. 代わりにPrim–Dijkstra–Jarníkを使用し、エッジを並べ替えて、Kruskalが提供する挿入シーケンスを取得します。または

  2. 論文で説明されているクアッドツリーの最も近いペアのデータ構造を使用し、Kruskalを各ステップで最も近い2つのクラスターをスーパークラスターにマージする標準的な凝集クラスタリング手順として表示します。 。

ソリューション2は、説明した内容と精神的には似ていますが、クラスター間の距離を追跡する方法の詳細はわずかに異なります。クラスター距離行列の行方向の最小値を維持し、線形時間でこの行最小値のリストをスキャンしてグローバルな最小値を見つけることができますが、私の論文は同じ行列に四分木を重ね、それぞれの最小値を追跡しますクワッドツリースクエア。あなたの方法は簡単ですが、他のいくつかの動的な最近接ペアの問題に対しては柔軟性が低くなります(2つのクラスターをマージすると他のクラスターとの距離が短くなるという事実に依存します。

2011年にウィキペディアの記事で最近隣チェーンアルゴリズムについて書いたように、そのアルゴリズムは時間でクラスカルを実行するためにも使用できます。ただし、(最近隣チェーンアルゴリズムの他のアプリケーションとは異なり)スペースを節約できないため、(4分木法やメソッドのように)スペースはまだです。対照的に、Prim + sortingは 、入力の保存に必要なスペースを超えるスペースのみを使用できます。On2On2On

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.