関係構成を計算する


7

定義:を自己ループのないDAGとし、およびをグラフとします。G=(V,E)XGYG

入力:。出力:リレーショナル構成リレーショナル構成 in。X,Y XYO(|E||V|)

  • ケース1:。およびに対する2つのforループ:ランタイム。|E||V|E(X)E(Y)O(|E|2)O(|E||V|)
  • ケース2:|V||E|
    1. グラフを描く:(。エッジをから黒、赤と呼びます。(V(G),E(X)E(Y))(O(|V|)+O(|2E|)))E(X)E(Y)
    2. トポロジカルにソートします(Kahn:)。最初のレベルをにすると、エッジはレベルから高いレベルに移動します。O(|V|)+O(|E|)0
    3. このグラフを2回描画します。
    4. 最初のコピーで、偶数レベルで始まるすべての赤いエッジと奇数レベルで始まるすべての黒いエッジを削除します:。O(E)
    5. 2番目のコピーでは、「黒の偶数」と「赤の奇数」をすべて削除します:。O(E)
    6. 最初のコピーの場合:
      • レベルすべてのノードu2i
      • レベルすべてのノードv2i+1
      • レポートエッジ(実行時)。(u,v)O(V2)O(EV)
    7. 2番目のコピーの場合: " " についても同じです。2i+1
    8. 報告されたノードを結合し、重複する を破棄します(グラフ表現でこれが可能であることを願っています)。O(V2)<=O(EV)

いくつかの人が私のアルゴリズムを調べて、

  • 合ってます
  • それはであるO(|E||V|)

正しい場合、私のアルゴリズムはすでに「存在」していますか?そうでない場合、代替案を提供できますか?私は最初の答えを受け入れますが、他にチェックしてくれる人がいる場合は賛成票を投じます。

編集:ステップ6はあるようです。これが本当ではないことを望みます。動作しているアルゴリズムはありますか?O(E2)

回答:


4

問題はステップ6にあります(私の理解から)。

基本的に、あなたはおよびかどうかシーケンスをチェックすることをお勧めします。このようなシーケンスでは、2つのエッジがお互いの後に来る必要があるため、トポロジカルソートは正しいです。(u,w)(w,v)(u,w)E(X)(w,v)E(Y)

エッジは、属している場合は黒です。エッジが属している場合そのエッジは赤です。この場合、エッジは2色になることがあります。 (u,w)E(X)(w,v)E(Y)

ノード各隣接をチェックします [ST場合は黒である]赤色エッジ有するその近隣のために。この場合:uw(u,w)w(w,v)uVdeg(u).wN(x)deg(w)=O(E2)

私が理解したことから:不要なエッジをいくつかフィルタリングしました(ステップ4,5)。ただし、よりも複雑になる最悪のケースがあるかもしれません。 O(E2)


ありがとう、あなたは正しいです!すべてのノードペアを報告することはできません。エッジを追跡する必要があります。うーんはい、これはつながると思います。私のアルゴリズムではそれができないと思います:(O(E2)
Johannes

それであなたの質問に答えますか?
2012年

まあ、多かれ少なかれ。誰かがステップ6の代替案を見つけてくれることを望みますが、受け入れられます。
ヨハネス

6

SippuおよびSoisalon-Soininen の解析理論の60ページの定理2.29は、2つの関係の構成を(関係に関する他の演算の中で)計算するためのアルゴリズムを提供します。アルゴリズムは時間で実行されます。ここで、は頂点のセットに対してユニオンまたは割り当て演算を実行するために必要な時間です。この操作の結果は、その近傍を表す頂点ごとの頂点のセットです。このアルゴリズムは、非循環グラフだけでなく、任意のグラフでも機能します。O(t(|V|+|E|))t


この本にはアクセスできませんが、大学からでもアクセスできませんが、見栄えがいいです:(
Johannes

@ヨハネス、あなたの大学の図書館を試してみてください-私もその本にアクセスできず、大学の図書館からも入手しました。
アレックステンブリンク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.