疎グラフのすべての最短パスを見つけるための最速のアルゴリズムは何ですか?


24

ような頂点とエッジを持つ重みのない無向グラフで、グラフ内のすべての最短経路を見つける最速の方法は何ですか?あるFloyd-Warshallよりも速く実行できますが、反復ごとに非常に高速ですか?E 2 V > E O V 3VE2V>EO(V3)

グラフが重み付けされている場合はどうですか?

回答:


32

これは重み付けされていないグラフであるため、グラフのすべての頂点から幅優先検索(BFS)を実行できます。BFSを実行するたびに、開始頂点から他のすべての頂点までの最短距離(およびパス)が得られます。1 BFSのための時間の複雑さはある以来、あなたのまばらなグラフに。回実行すると、時間の複雑さが生じます。vO(V+E)=O(V)E=O(V)VO(V2)

重み付き有向グラフの場合、Yuvalによって提案されたJohnsonのアルゴリズムは、スパースグラフで最速です。それは取りあなたのケースであることが判明。重み付き無向グラフの場合、各ノードからダイクストラのアルゴリズムを実行するか、各無向エッジを2つの反対方向の有向​​エッジに置き換えてジョンソンのアルゴリズムを実行できます。これらは両方とも、上記のジョンソンのスパースケースのアルゴリズムと同じ漸近時間を示します。また、上記のBFSアプローチは、有向グラフと無向グラフの両方で機能することに注意してください。O(V2logV+VE)O(V2logV)



7

スパース行列でより高速なバージョンのFloyd-Warshallを作成してみてください。

まず、このアルゴリズムが何をするのか思い出してみましょう。

してみましょう距離の行列とします。アルゴリズムM iの最初ではjはエッジi jの重みです。このエッジが存在しない場合、M i j = です。MMi,jijMi,j=

アルゴリズムにはステップがあります。ステップでk個のノードのすべてのペアのためのアルゴリズムの、I Jの我々のセットVki,j

Mi,jmin{Mi,j,Mi,k+Mk,j}.

明らかに、またはM k j = ∞の場合、更新を実行する必要はありません。したがって、このアルゴリズムの最初のステップで、我々は、概ね実行する必要がD のE GをI NK D 、E 、G 、O 、U TK の比較ここで、D 、EのG I NK D 、E 、G 、O 、UはtMi,k=Mk,j=degin(k)degout(k)degin(k)は、 k番目のノードの着信エッジと発信エッジの数をそれぞれ示します。アルゴリズムが進行するにつれて、行列 Mのエントリが増えていきます。そのため、最後の手順にはさらに時間がかかる場合があります。degout(k)kM

マトリックスの番目の行と列にある非無限セルでのみ反復する効率的な方法が必要であることに注意してください。これは、すべてのノードの着信エッジと発信エッジのセットを保持することで実行できます。k

E=O(V)k=0O(1)MO(V)k=|V|O(V2)O(V3)

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