変化する無向グラフのコンポーネントを追跡するオンラインアルゴリズムはありますか?


12

問題

時間の経過とともに変化する無向グラフ(マルチエッジ)があり、ノードとエッジが挿入および削除される場合があります。グラフを変更するたびに、このグラフの接続コンポーネントを更新する必要があります。

プロパティ

追加のプロパティは、2つのコンポーネントが再接続されないことです。明らかに、グラフは任意の量のサイクルを持つことができます(そうでなければ、解は簡単になります)。エッジノードが含まれていない場合、そのノードは採用されません。ただし、、それが可能に変える。ennene

アプローチ

私はこれまでに2つの可能なアプローチを持っていますが、あなたが見るようにそれらは恐ろしいです:

遅い状態なし

毎回、変更された要素からグラフを検索(dfs / bfs)できます。これはスペースを節約しますが、変更ごとにO(n + m)があるため低速です。

ステートフルfast(-er)(?)アプローチ

各ノードのすべての可能なパスをすべての可能なノードに保存できますが、正しく表示された場合、O(n ^ 4)のメモリが必要になります。しかし、ランタイムの改善がどのようになっているのかわかりません(1つでもあれば、同じコンポーネント内のすべてのノードの情報を最新に保つ必要があるため)。

質問

その問題について、またはおそらく構築できるいくつかのアルゴリズムについて、どのように指針を持っていますか?

注意

ランタイム/メモリの大幅な改善があれば、2つのコンポーネントが1つであると時々言う非最適なソリューションで生きることができますが、もちろん最適なソリューションを好むでしょう。


「プロパティ」の最後の2つの文を読んだ場合、減少問題のみに関心があるようです。その場合は、デクリメンタルダイナミックコネクティビティに関するThorupの作業を確認してください。(引用はJeffEのポインターを介して見つけることができます。これは、問題の完全に動的なバージョンに関するものです。)
Maverick Woo

@Maverick Woo:常に新しいエッジ/ノードが存在する可能性があります。まさにこの理由で、最後の特性はそれほど強くないと思います。減分としてまだ適格ですか?
ビットマスク

おっと、最初の文をどのように見逃したかわかりません...以下の「答え」をご覧ください。
マーベリックウー

回答:


16

多対数時間でエッジの挿入、エッジの削除、接続クエリ(これらの2つの頂点は同じ接続コンポーネントにありますか?)をサポートするデータ構造がいくつかあります。


これはすごいことだと思います。論文を読んだら、これを受け入れるでしょう。
ビットマスク

6

連結成分分解のための動的グラフアルゴリズムと呼ばれるものを探していると思います。Holm、de Lichtenberg、Thorup [HLT01]によるアルゴリズムは、エッジの更新ごとに多対数時間を償却しています。前回問題を調べてからずっと経ちましたので、おそらくもっと最近の進展があるでしょう。

[HLT01]ジェイコブ・ホルム、クリスチャン・デ・リヒテンベルク、ミケル・ソーラップ。接続性、最小スパニングツリー、2エッジ、および双連結性のための多対数決定論的完全動的アルゴリズム。 ACMのジャーナル、48(4):723から760、2001年7月 http://doi.acm.org/10.1145/502090.502095


ジンクス。あなたは私にコークスを借りている。
ジェフ

@JeffE:私はそのゲームについて知りませんでした。しかし、ルールによれば、私はゲームに負けていない(私はただ「ジンクス」状態にある)ので、私はさらに話さない限り、あなたにコークスを借りない...ああ、ちょっと待って。
伊藤剛

あなたが評判ポイントで取引できる場合のみ:)
Suresh Venkat

5

(とりあえず、接続クエリだけに固執させてください。残念ながら、これはアプリケーションにとって十分ではないかもしれません。)

動的な接続性の問題に関する以前の作業の多くは、エッジ更新モデルにあります。頂点の数が固定されていると仮定し、クエリの作成中にエッジを挿入または削除できます。挿入(削除)しかできない場合、それは増分(減分)です。両方を実行できる場合、それは完全に動的です。JeffE(およびコメント内の私)が指摘したThorupの作業は、すべてエッジの更新用です。

私の知る限り、CS理論コミュニティは、一般的なグラフの頂点の更新のみを検討し始めています。FOCS 2008でChan、Pătraşcu、およびRodittyによる画期的な作業が行われました。ごく最近(2010年9月)の改訂とその中の参照については、このリンクを参照してください。


なぜホルムら。al。アプローチは私の問題のために機能しませんか?私はそれを採用するつもりでした。
ビットマスク

グラフの次数が制限されている場合、理論的には、一連のエッジ更新を使用して頂点更新をエミュレートできます。それ以外の場合、単一の頂点の更新(たとえば、スターグラフの中心の削除)は、グラフの接続性を大幅に変更する可能性があります。その場合、Chan et al。の結果が必要です。
マーベリックウー

そうですか。元の質問で述べたように、頂点の削除はまれであるため、エッジごとに実行する余裕があります。
ビットマスク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.