DAG内の到達可能ノードのカウントにはどのような境界を設定できますか?


23

与えられたは一瞬です。各ノードに到達可能なノードの数で各ノードにラベルを付けます。は自明な上限です。は下限です(と思います)。より良いアルゴリズムはありますか?下限を改善できると信じる理由はありますか(関連:推移的閉包の下限について正確に知られていること)?O(V(V+E))Ω(V+E)

動機:folフォーミュラをダグとして表現しながら、これを数回しなければなりませんでした。

編集:を実行するだけで、到達可能なノードではなくパスをカウントことに注意してください。(これは、多くの人が、この単純な解決策は削除された回答で見た票で機能すると考えていたため、これを追加しました。)実際、この問題は、「共有」部分、複数のパス。また、それらが解決される場合、有向グラフを解決するのは簡単だからです。cx=1+xycy



@Suresh:任意の重みが問題を難しくするかどうかは、別の興味深い質問のように思えます。
ラドゥグリゴール

回答:


10

エッジと個の頂点を持つ有向グラフの推移閉包は、時間よりもわずかに高速に計算できますが、それほど多くは計算できません。時間アルゴリズムは、APSP(Algorithmica 2008年のジャーナル版)にチャンの2005年WADS紙の脚注に記載されています。のわずかな改善については、VassilevskaのBlellochによるICALP'08論文「A New Combinatorial Approach for Sparse Graph Problem」を参照してください。ウィリアムズ。そうは言っても、実際に子孫を見つけるよりも子孫を数えるほうが簡単かどうかはわかりませんmnO(mn)O(n2+mn/logn)O(n2+mnlog(n2/m)/log2n)


4
また、Edith Cohenの論文「Transitive Closure and Reachabilityへのアプリケーションを備えたサイズ推定フレームワーク」もご覧ください。子孫の数を効率的に推定するランダム化アルゴリズムを提供します。
virgi

この結果は、DAGだけでなく、すべての有向グラフに適用されることに注意してください。
トンファ

はい。結果は、cstheory.stackexchange.com
questions /

7

行列乗算を使用してDAGの推移的閉包を計算し、必要なカウントとして近傍の数を使用できると思います。私は文献の専門家ではありませんが、推移的閉包は行列乗算と同じ時間、つ​​まり時間で計算できると思います:http : //www.computer.org/portal/web/csdl/ doi / 10.1109 / ACSSC.1995.540810nω


ありがとう、それは面白い!シンボリック式を表すダグはまばらになる傾向があることを付け加えなければならないので、このケースにもう少し興味があります。
ラドゥグリゴー

1

コンテキストでは役に立たないかもしれませんが、Synopsis Diffusion(http://www.cs.cmu.edu/~sknath/sd.htm)を使用して近似値を取得できます。これでO(V + E)になると思います。ユニプロセッサでシノプシスの拡散をシミュレートすると、O(V + E)のように見えます(最初にトポロジソートを行う必要があります。これはO(V + E)でもあります)。

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