最小スパニングツリーと最短パス


45

最小スパニングツリーアルゴリズムと最短パスアルゴリズムの違いは何ですか?

私のデータ構造クラスでは、2つの最小スパニングツリーアルゴリズム(PrimおよびKruskal)と1つの最短パスアルゴリズム(Dijkstra)を取り上げました。

最小スパニングツリーとは、すべての頂点にまたがるグラフ内のツリーであり、ツリーの総重量は最小です。最短経路は非常に明白であり、ある頂点から別の頂点への最短経路です。

私が理解していないのは、最小スパニングツリーの総重量が最小であるため、ツリー内のパスは最短パスではないということです。誰かが私に欠けていることを説明できますか?

どんな助けも大歓迎です。


最短スパニングツリーが最短パスと同じではないことを証明する同様の質問に対する私の例を次に示します。cs.stackexchange.com/a/43327/34363
atayenel

また、これは興味深いかもしれません。最大スパニングツリーには、各パスがボトルネックパスであるノード間のパスがあります。つまり、合計を最小化する代わりに最小重みを最大化します。おそらく、最小スパニングツリーの間にも同様の関係があります。
ユージン

回答:


38

単位重みを持つ三角形グラフを考えてみましょう-3つの頂点があり、3つのすべてのエッジ重みはです。任意の2つの頂点間の最短パスは直接パスですが、それらをすべてまとめると、ツリーではなく三角形になります。このグラフでは、2つのエッジのすべてのコレクションが最小スパニングツリーを形成しますが、(たとえば)と、最短パス。x,y,z{x,y},{x,z},{y,z}1{x,y},{y,z}{x,z}

結論として、すべての最短パスをまとめると、必ずしもツリーが得られるとは限りません。


32

あなたは、ダイクストラ(単一の開始ノードからの最短経路)とプリム(特定のノードから開始する最小重みスパニングツリー)の2つのアルゴリズムが非常によく似た構造を持っていることは正しいです。どちらも貪欲で(現在の観点から最高のエッジを取ります)、グラフにまたがるツリーを構築します。

ただし、最小化する値は異なります。ダイクストラは、次のエッジとして、ツリーから開始ノードに最も近いまだ選択されていないノードにつながるエッジを選択します。(この選択により、距離が再計算されます。)プリムは、これまでに構築されたツリーからリードする最短のエッジをエッジとして選択しました。そのため、両方のアルゴリズムが「最小エッジ」を選択しました。主な違いは、最小に選択された値です。ダイクストラの場合は、開始ノードから候補ノードまでの完全なパスの長さであり、プリムの場合は、その単一エッジの重みです。

違いを確認するには、何が起こるかを確認するためにいくつかの例を構築する必要があります。それは本当に有益です。異なる動作を示す最も単純な例は、長さ2のエッジおよび を持つ三角形であり、 長さは1です。ダイクストラは および (長さ2の2つのパスを与える)を選択し、プリムは および(のスパニングツリーを与える重量3)。x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

木:ダイクストラvsクラスカル

クラスカル、それはわずかに異なっています。最小スパニングツリーを解決しますが、実行中にツリーを形成しない可能性のあるエッジを選択し、サイクルを回避します。そのため、部分的なソリューションが切断される場合があります。最後に、ツリーを取得します。


12

最小スパニングツリーと最短パスアルゴリズムの計算は似ていますが、2つの異なる要件に焦点を当てています。

MSTでは、各頂点に1回到達する(グラフツリーを作成する)必要があり、すべての可能な組み合わせの中で各頂点に到達する総(集合)コストが最小である必要があります。

最短パスの要件は、ソース頂点から可能な限り低いコスト(最短の重み)で宛先頂点に到達することです。そのため、ここでは各頂点に到達することを心配せず、代わりにソースとデスティネーションの頂点、および違いのある場所にのみ焦点を当てます。

以下に、MSTが2つの頂点間の最短パスを必ずしも提供しない理由を明確にする例を示します。

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

MSTの場合、エッジAB。BCは総重量10でMSTになります。したがって、MSTでAからCに到達するコストは10です。

ただし、最短パスの場合、AからCまでの最短パスはACであり、7です。ACはMST上にありませんでした。


4

違いは、このアルゴリズムの究極の目標は何ですか?

ダイクストラ-ここでの目標は、最初から最後まで到達することです。この2つのポイントのみを心配し、それに応じてパスを最適化します。

Krusal's-ここでは、任意のポイントから開始し、グラフ内の他のすべてのポイントにアクセスする必要があります。したがって、2つのポイントの最短パスを常に選択するとは限りません。代わりに、他のすべてのポイントのより短いパスに導くパスを選択することが焦点です。


1

例がより明確になると思います。

ここに画像の説明を入力してください

スパニングツリーは次のようになります。これは、この構成でエッジを合計すると、可能な限り最小の合計コスト 2 + 5 + 14 + 4 = 25が得られるためです。

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

スパニングツリーを目で見ることで、最短パスが得られると誤って考えるかもしれませんが、実際にはそうではありません。我々はノードから行きたいと思った場合を例に(1)(4)、それは私たちが元のグラフにダイクストラのアルゴリズムを使用している場合しかし、7かかるだろう、我々はノードから直接行くことができることを見つけるだろう(1)(4)のコストで5


-1

違いを示す実用的な例>

町に電車で到着し、ホテルに行きたいとしましょう。

オプション1:タクシーを利用する:タクシーは、駅からホテルまでの最短経路をたどります。ドライバーがステーションを中心とした最短経路ツリーに沿った経路をたどる場合。

オプション2:バスに乗る。バス会社は、あなただけではなく、多くの人々に応えたいと思っています。理想的なパスは、町のすべての重要なポイントを取ります。したがって、最小スパニングツリーに沿ったパスをたどります(*)。それがバスが遅い理由ですが、コストが分担されるのでより安くなります。

(*)最小スパニングツリーが使用された場合、実際に人々は文句を言うでしょう(バスの旅が長すぎます)。したがって、実際には混合ソリューションであり、Alpha-Tree(最小スパニングツリーと最短パスツリーの中間)を使用します。


1
サイトへようこそ。バスが通るルートはスパニングツリーとはあまり関係がないように思えるので、あなたのアナロジーは良いものだとは思いません。特に、それはまたがっておらず(町のすべての地点を訪れているわけではありません)、木でもありません。むしろ、妥当な限り多くの重要なポイントを訪れたり通過したりする経路(またはサイクル)であるため、この経路はかなり多くの人々にとって合理的に役立ちます。
デビッドリチャービー

-1

これらは2つの異なるプロパティに基づいています。最短スパニングツリーはカットプロパティに基づいていますが、最短パスはエッジリラックスプロパティに基づいています。

カットは、グラフを2つのコンポーネントに分割します。複数のエッジが関係する場合があります。MSTでは、重みが最小のエッジを選択します。

Edge Relaxingは、AとBの間の距離がわかっている場合:dist(a、b)およびAとCの間の距離:dist(a、c)、dist(a、b)+ edge(b、c)が以下の場合dist(a、c)、edge(ac)を緩和できます。すべてのエッジを緩和した後、最短経路を取得します。

Robert Sedgewick教授のグラフアルゴリズムに関するビデオをご覧になることを強くお勧めします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.