2011-11-16 14 views
7

弱い非環式有向グラフを使用しています。グラフを強く接続するための線形時間アルゴリズム

また、度合がゼロのGの頂点を保持する集合Aと、外れ度ゼロを持つ頂点を保持する集合Bが与えられます。 (AのサイズはBのサイズより小さい)。

さらに、AとBの項目が特定の順序(たとえばA = a1、a2、...、amとB = b1、b2、...、bn)を持つ場合DFSはaiで始まり、bi(1≦i≦m)で始まる。

できるだけエッジを少なくすることでGを強く結びつける線形時間アルゴリズムを設計することは可能ですか?

+0

- > math.stackexchange.com? – Vlad

+0

「aiで開始されたDFSはbi(1≦i≦m)を訪問しました。取得しないでください。あなたのグラフは特殊な性質を持っています。頂点のin-degree zeroから始まり、out-degree zeroの厳密に一つの頂点を得ることができます(3)。 (その場合あなたの説明を与える)。 –

答えて

4

追加アークB J - > J J = 1 + 1、...、M-1及びアークB J - > J = mについて、... 、n。

AさんとBさんが強く加え円弧によって接続され、 Iからのパスは、すべてのノードxについて、 IをBおよびするため、得られたグラフが強く接続され、I、Jような存在が元のグラフには、 iからxまでの経路と、元のグラフのxからbまでの経路がある。 j

発信アークは、B の各々に添加しなければならないので...、 N bが我々は、より少数のアークを使用することはできません。編集

+0

非常に簡単です。しかし、疑問があります。元の声明にあいまいさがあります**私は**について尋ねました。無指向性グラフが無向グラフの場合、連結グラフであり、度数ゼロ(A)の頂点の数が外れ度ゼロ(B)の頂点数以下である場合、そのことを意味しませんあなたはAとBの間のマッチングがあります。**あなたがそれを証明できれば - それをしてください。この事実から、それは答えではありません**。 –

+0

@ Wisdom's Windなぜ、私は現在の質問文言ではっきりとした仮説が何かを証明しなければならないのですか? – Per

+0

このソリューションに問題がある可能性があります。 2つのリングXとYと孤立点からなるグラフを考えてみましょう。XからYへ、Yから孤立点へのリンクがあります。孤立した点は集合Bの唯一のメンバーです。それは非循環グラフとして接続されていますが、YからX、または孤立した節点からYには到達できないため、強く結びついていません。Aには要素がないので、リンクを追加しないでください。 – mcdowella

1

- 以下は、少なくともリンクで溶液を生成しません:

あなたは線形時間でhttp://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithmを実行することができます。私はあなたがこれを行い、「後継者の前に強く結びついた構成要素は特定されない」と述べることを提案する。したがって、グラフの中の最初の強固なコンポーネントは、他のコンポーネントのいずれかの後継であってはなりません。後継のない強力に接続されたコンポーネントを発行するたびに、最初のコンポーネントに接続するリンクを追加することをお勧めします。また、再帰的にstrongconnect()を呼び出し、最初のコンポーネントを再起動する頂点に接続して、Tarjanアルゴリズムを本質的に再起動するたびにリンクを追加することをお勧めします。

これらのリンクを使用すると、最初の強力なコンポーネントから他のすべてのコンポーネントまで、他のすべてのコンポーネントから最初の強力なコンポーネントにアクセスできます。 - 残念ながら、これは必ずしもリンクの少ないソリューションではありません - 下記の2番目のコメントを参照してください。

+0

先行技術のない複数のコンポーネントをどのように処理しますか? – Per

+0

私の意図は、前任者のない二次コンポーネントは、Tarjanアルゴリズムが非再帰呼び出しで再起動するコンポーネントであるため、最初のコンポーネントからのリンクを取得し、そこから到達可能になります。彼らの後継者、またはそれ自身は、最初のコンポーネントへのリンクを取得し、サイクルを完了します。しかし、私があなたの答えを上げた点が間違っていたので、おそらく私もここで間違っていますか? – mcdowella

+0

アルゴリズムが正しく理解されていれば、{a1-> b1、a1-> b2、a2-> b2}のグラフで強い成分{a1}が最初に放出され、{b1}と{b2}したがって、b1とb2はa1へのリンクを返します。 a1とa2を接続するには、b1-> a2、b2-> a1の接続に必要な2つに対して、合計3つのリンクが1つ必要です。 – Per

関連する問題