質問

Dijkstraの 一般的に使用し、最短距離のノードグラフにすることが出来ます。できるのを見つけるために使われます最低限の 広樹?どうすれば良いですか。

編集:このな課題かもしれませんが、同じような問題は、古い練習試験を受けました。

役に立ちましたか?

解決

厳密には、答えはノーです。ダイクストラのアルゴリズムは、グラフ上の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 ソースとしての頂点。

Picture of the Graph G

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の基盤の更なる説明を見つけることができます。

このヘルプを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top