利用Dijkstraの見を最小全域木?
-
19-09-2019 - |
解決
厳密には、答えはノーです。ダイクストラのアルゴリズムは、グラフ上の2つの頂点間の最短経路を発見します。しかし、アルゴリズムの非常に小さな変化を効率的にMSTを生成ない別のアルゴリズムを生成します。
アルゴリズムの設計マニュアルのは、私は答えを見つけた最高の本ですこのような質問ます。
他のヒント
答えはnoです。なぜ、最初の説明があり、問題はこのように:
Q:のための接続undirected,重み付きグラフ G = (V, E, w)
け負でない端の重量は、前身であるsubgraph作Dijkstraのアルゴリズム形成の最小全域木G?
(ご注意undirectedグラフの特別クラスの向グラフで完全に利用しDijkstraのアルゴリズムにundirected。また、MSTの定義のみを接続しundirectedグラフは、自明な場合、グラフが重な制限するお問い合わせること。)
A: Dijkstraのアルゴリズム 各ステップにも貪欲でなければな選定は次の端に最も近いも ソース頂s.これまで"s"はその頂点のグラフで表示します。明示し、継承するとともに、subgraph生み出されるが及ぶの木 G
, ものではあ和のエッジウエイトの最小化?
ツンのアルゴリズム, ることが知られている生産の最小全域木、共通性の高いDijkstraのアルゴリズムが、各段階におい欲張を選択し、次の端に最も近い 任意の頂点は、現在のMSTでステージ.プログラムを利用しましょうこの観測を反例.
反例:を考慮するundirectedグラフ G = (V, E, w)
場所
V = { a, b, c, d }
E = { (a,b), (a,c), (a,d), (b,d), (c,d) }
w = {
( (a,b) , 5 )
( (a,c) , 5 )
( (a,d) , 5 )
( (b,d) , 1 )
( (c,d) , 1 )
}
取 a
ソースとしての頂点。
Dijkstraのアルゴリズムは、エッジ { (a,b), (a,c), (a,d) }
.
これにより、総重量はわ木 5 + 5 + 5 = 15.
ツンのアルゴリズムは、エッジ { (a,d), (b,d), (c,d) }
.
これにより、総重量はわ木 5 + 1 + 1 = 7.
プリム法には、ダイクストラ法と同じ基本原理を使用します。
私は、プリムのか、クラスカルのよう貪欲アルゴリズムに保つと思います。私はそれがノードのペアの間ではなく、木全体のコストを最小限に抑えるという理由だけで、Djikstraのはしないだろう恐れています。
もちろん、それは最小スパニングツリーのためにダイクストラを使用することが可能です。
dijsktra(s):
dist[s] = 0;
while (some vertices are unmarked) {
v = unmarked vertex with
smallest dist;
Mark v; // v leaves “table”
for (each w adj to v) {
dist[w] = min[ dist[w], dist[v] + c(v,w) ];
}
}
ここでは、スパニングツリーのためのダイクストラの使用例を示し
あなたはアルゴリズムの本、第4章、セクション2の基盤の更なる説明を見つけることができます。
このヘルプを願っています。