[解決済み] グラフが半連結であるか否かを判定する
質問
有向グラフG=(V,E)は、Vにおけるすべての頂点u,vの組に対して、u-> vまたはv-> uのパスを持つ場合、半連結であるという。 Gが半連結であるか否かを判定する効率的なアルゴリズムを述べよ。
どのように解決するのですか?
トリビアル
O(V^3)
を使用することで、解決できます。
フロイド・ウォーシャル
をすべて最短パスにする必要がありますが、これは(時間の複雑さの点から)やりすぎです。
で行うことができます。
O(V+E)
.
クレーム
DAGはトポロジカルソートで半連結であり、各々について
i
が存在し、エッジ
(vi,vi+1)
証明する。
トポロジカルソートを持つDAGが与えられたとき
v1,v2,...,vn
:
エッジがない場合
(vi,v(i+1))
いくつかの
i
というパスも存在しない。
(v(i+1),vi)
(DAGのトポロジー的なものなので)、グラフは半連結ではありません。
もし、すべての
i
というエッジがあります。
(vi,vi+1)
であれば、各
i,j
(i < j)のパスが存在します。
vi->vi+1->...->vj-1->vj
となり、グラフは半連結となる。
これより、アルゴリズムを求めることができる。
- グラフ内の最大SCCを探す。
-
次のようなSCCグラフG'=(U,E')を構築する。
U
はSCCの集合である。E'= { (V1,V2) | there is v1 in V1 and v2 in V2 such that (v1,v2) is in E }
. - G'のトポロジカルソートを行う。
- すべてのiについて、エッジVi,V(i+1)があるかどうかをチェックする。
正しさの証明。
グラフが半連結である場合、あるペアに対して
(v1,v2)
が存在する場合、そのようなパスは
v1->...->v2
- そのSCCをV1, V2とする。V1 と V2 のすべてのノードが強く結ばれているので、V1 から V2、ひいては v1 から v2 への経路が存在する。
このアルゴリズムが真を得た場合、任意の2つのノードv1, v2について、それらがSCC V1, V2内にあることがわかる。V1からV2へのパスがあり(一般性を損なわず)、したがってv1からv2へのパスもある。
余談ですが、すべての半連結グラフにもルート(頂点
r
すべての頂点につながる)。
証明する。
ルートが存在しないと仮定する。定義
#(v) = |{u | there is a path from v to u}|
(からのパスを持つノードの数)。
v
を含む)。
選ぶ
a
そのような
#(a) = max{#(v) | for all v}
.
a
はルートではないので、何らかのノード
u
からのパスを持たない
a
になります。グラフは半連結なので、このグラフから
u->...->a
. しかし、それはつまり
#(u) >= #(a) + 1
(から到達可能なすべてのノード)。
a
で、さらに
u
).
の最大性とは矛盾する。
#(a)
したがって、ルートが存在する。
関連
-
[解決済み] 最小スパニングツリーは負の重みを恐れているのか?
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] 線形時間でのソート?[クローズド]
-
[解決済み] T = {<M> | Mはwを受け入れるときはいつでも$w^R$を受け入れるTMである}とする。Tが決定不可能であることを示せ
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] 地図上のA地点からB地点への道順を計算するアルゴリズムは?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] クイックソートとマージソートの比較 [重複]。
-
[解決済み] ある問題がNP完全であることをどのように証明するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] 定数時間や対数時間よりも、nやnlog(n)の方が良いのでしょうか?
-
[解決済み] Octave : ロジスティック回帰 : fmincg と fminunc の違い
-
[解決済み] ベルマンフォードとダイクストラの比較。どのような状況下でベルマンフォードが優れているか?
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] 決定論的クイックソートとは何ですか?
-
[解決済み] Bogosort (a.k.a Monkey Sort)よりも悪いソートアルゴリズムはあるのか?[クローズド]
-
[解決済み] は、「減少しない」列が「増加する」のか?
-
[解決済み] log(n!)=Θ(n-log(n))でしょうか?
-
[解決済み] 線形時間でのソート?[クローズド]