1

テキストの壁で申し訳ありませんが、それは私ができる限り簡潔です!

私は 1 つの非常に大きな有向グラフ G と、G 内からの頂点のサブセット S を持っています。私がやりたいことは、S によって誘導される G の部分グラフを見つけることです。 p と G の頂点 q で、誘導されたサブグラフのこれら 2 つの頂点の間にエッジが存在すること。これが重要です。通常の誘導されたサブグラフの問題よりも少し複雑です(私はそう思います)。

問題を解決するために私が考えることができる最も基本的な方法は次のとおりです(おそらく最も効率的ではないことを認識しています。実装するのに複雑すぎない他の提案があれば教えてください):S内の頂点のすべてのペアについて、G でそれらの間のパスの存在をテストします。そのようなパスが存在する場合、誘導された部分グラフの p と q の間にエッジを挿入します。私の目的では、n^2 時間はそれほど悪くありません。

したがって、2 つの質問があると思います。1) 2 つの頂点間にパスが存在するかどうかを判断する最速の方法は何ですか? パスが存在するかどうかだけで、パスを知る必要はありません。さらに、この計算を高速化するためにグラフ全体に対して実行できる前処理がある場合、頂点の各ペア間でこの計算を実行する必要があるため、それは何でしょうか?

2)私が説明した誘導サブグラフのタイプを見つけるために私が提案した方法よりも速い方法はありますか?

助けてくれてどうもありがとう!

4

1 に答える 1

1

2 つの頂点間に経路が存在するかどうかを見つける問題は、推移閉包問題と呼ばれ、一般的な場合の行列の乗算と同じくらい困難です。まず、グラフで強連結成分アルゴリズムを実行して、サイクルを単一のノードに圧縮し、有向グラフを形成します。運が良ければ、いくつかの大きなサイクルが発生し、その後の推移的な問題が簡単になります。次に、そのグラフで Floyd Warshall の全ペア最短パス アルゴリズムを実行して、推移閉包を計算します。コーディングが非常に簡単だからです。おそらく、o(n^3) 行列乗算ベースのアルゴリズムの 1 つがより高速になるでしょうが、定数が非常に低いため、それほど高速になるとは思えません Floyd Warhsall.

これは、強連結成分の高速アルゴリズムです。

これには、行列の乗算と推移閉包の等価性の証明が含まれています。

元の問題を解決するために推移閉包の計算を回避する良い方法があるかどうかはわかりません。そうではないと思いますが、一方で、賢い人が素晴らしいことを思いつくこともあります。

于 2011-06-03T01:20:27.753 に答える