頂点/サブグラフの挿入と削除を含む完全に動的なグラフの接続性の決定


8

私は次の問題の解決策を探しています。このトピックに関する既存の研究を誰かが私に指摘できるかどうか疑問に思っています。私はグラフの実際のアプリケーションから来ているので、私の用語が正確でない場合は我慢してください。

ユーザーが関係を作成、削除、変更してオブジェクトを追加、削除、移動できるデータベースシステムがあります。そのため、オブジェクトをグラフの頂点として見ることができ、関係はエッジであり、関係のタイプ(構成、関連付け、または集約)に応じてエッジに重みを付けることができます。

ユーザーの観点から見ると、新しい要素の追加はシングルクリックで可能で、フードの下で、プログラムは関係によってリンクされたオブジェクトのグラフを作成します。このグラフは、データベース全体を定義するメイングラフに追加されます。要素を削除すると、リンク/エッジが切断され、グラフが2つのばらばらなグラフになり、1はデータベース、もう1つは要素とそのサブ要素によって形成される頂点で構成されます。

素なグラフがある場合と、素な2つのグラフが再び1になる場合を判断するための本当に迅速な方法が必要です。Holm、de Lichtenberg、およびThorup(2001 ; pdf)をざっと見ました。それは進むべき道のようですが、著者は頂点の数が固定されたグラフのみを検討していると述べました。アルゴリズムは通常、エッジの追加を段階的に実行するだけで、頂点の追加/削除に拡張されますか?それとも、そのようなシナリオに特化した作品はありますか?

回答:


4

これは簡単な質問ではありません。このためのアルゴリズムを見つけることの問題の1つは、動的グラフでの作業の分離(意図されたしゃれ)です。Thorup et al。の仕事(あなたが言及したもの)は、おそらく、あなたが探している種類のものの最良の出発点です。

Bhadra&Ferreiraを試すこともできます。おそらく、あなたが望むものについて少し話題から外れていますが、役立つ他の資料への参照があります。


1

頂点の更新は、次のようにエッジの更新を使用して処理できます(ただし、エッジの更新関数をdeg(u)で呼び出すため、少し非効率的です)。

AddVertex(G,u,Adj(u)):- 
  /* Adj(u) is the vertices adjacent to u after adding u */  
  For each v in Adj(u) do 
    AddEdge(G, (u,v))

DeleteVertex(G,u):- 
  For each v in Adj(u) do
    DeleteEdge(G, (u,v)) 

ソラップ他 Alの実行時間分析では、更新時間はエッジ更新ごとの償却時間であると述べています。だから、それは直接何らかのポリを意味するものではありません。頂点更新時の対数更新時間の結果。

更新操作が頂点/追加削除もサポートするいくつかの作業があります。[1]のDynamic All Pairs Shortest Paths問題では、基本的に、新しい重みを指定することにより、頂点に付随するエッジを更新できます。頂点を削除したり、頂点を追加したりするために、それらをすべて+ infinityに更新できます。

参照[2]と[3]は、動的グラフアルゴリズムから始めたばかりの場合に役立ちます。[2]は、動的接続の問題への現在のアプローチについて、優れた高レベルのアイデアを提供します。

参考文献

  1. 動的なすべてのペアの最短パスへの新しいアプローチ、Demetrescu。等 Al、JACM 2004 Voume 51発行6、2004

  2. チェンナイのIMScで開催された「最近のデータ構造とアルゴリズムの進歩」ワークショップのSurender Baswana博士による動的グラフアルゴリズムに関する講演のスライド

  3. Camil Demetrescu and Pino Italiano、Dynamic graphs、Handbook on Data Structures and Applications、Chapter 36. Dinesh Mehta and Sartaj Sahni(eds。)、CRC Press Series、in Computer and Information Science、2005年1月[ドラフト(pdf)]


0

Holm et。alのアルゴリズムは、任意の数の頂点で機能しますが、説明からはそれほど明確ではありません。彼らのプレゼンテーションの主な困難は、彼らが森のレベルにどのようにラベルを付けるかです。代わりに、最大レベルの林を設定するのであれば、あなたからカウントを開始アップし、レベルのすべての木は、私が最大で大きさを持っていることを不変2ように修正代わりに場合、グラフの頂点の数に制限はなくなり、自由に頂点を挿入および削除できます。 F 0 nFlg(n)F0 2in2i2i

これを(JavaScriptで)実装した例については、次のGitHubリポジトリをご覧ください。

https://github.com/mikolalysenko/dynamic-forest

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