すべての頂点のDAG内の到達可能な頂点の数


11

ましょう出次数任意頂点となるように、非環式有向グラフであるO ログ| V |Gのすべての頂点について、すべての頂点からdfsを実行するだけで、到達可能な頂点の数をカウントできます。これにはO | V | | E |時間かかります。この問題を解決するより良い方法はありますか?G(V,E)O(log|V|)GO(|V||E|)



1
@Raduはこれはまっすぐな複製ですか?それはそれのように聞こえる
スレシュヴェンカト

@Suresh、私の質問と比較して、これは頂点の次数に上限があり、下限を求めていません。これらは私の意見のわずかな違いであるため、重複していると考えますが、それについては強く感じません。
ラドゥグリゴール

1
わかりましたので、そのままにします。
スレシュヴェンカト

4
私の質問に対するvirgiの答えは、このアルゴリズムのアルゴリズムを暗示しています。O(|V|2)
ラドゥグリゴール

回答:


5

最も正確なアルゴリズムは、高速バイナリ行列乗算を使用して、時間O(min {mn、n ^ 2.38})で実行されます。しかし、そこにランダムな時間Oで実行されたアルゴリズム、(M + N)であり、小さな相対誤差と、各ノードから到達可能なノードの数を推定し、用紙」をご覧ください推移閉包と到達可能性への応用でサイズ、推定フレームワークエディット・コーエン作。


-1

私はここの専門家ではありません。試してみます。

1)DAGであるため、シンク頂点、つまりoutdegree 0の頂点が必要です。xと言うシンク頂点を見つけ、Neighbor(x)に到達可能な頂点として{x}を追加します。xを削除し、グラフが空になるまでプロセスを繰り返します


出次数は制限されているので、ソースから始める方が便利だと思いますか?
アンドラスサラモン

@ andras-salamon:いいえ、ソースから到達可能なノードの数が自明ではないためです。ただし、シンクに対しては(ゼロ)しません。
マーティンB.

O(|V||E|)xO(|V|)O(|V|)O(|V|)O(|V||E|)

-2

(Prabuのソリューションに似ていますが、より詳細です)

N(v)vreach(v)

  1. O(|V|+|E|)
  2. vreach(v)=nN(v)reach(n)

|E|O(|V|+|E|)

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