いくつかの最短経路アルゴリズムの比較

いくつかの最短経路アルゴリズムの比較

最短経路問題は、グラフ理論研究における古典的なアルゴリズム問題であり、グラフ(ノードとパスで構成される)内の 2 つのノード間の最短経路を見つけることを目的としています。

アルゴリズムの具体的な形式は次のとおりです。

出発点を決定する最短経路問題: つまり、出発ノードがわかっている場合に最短経路を見つける問題。

終点がわかっている最短経路問題は、始点を決定する問題の逆です。この問題は、終点ノードがわかっている場合に最短経路を見つけることです。無向グラフでは、この問題は開始点を決定する問題とまったく同じです。有向グラフでは、この問題はすべてのパスの方向を逆にして開始点を決定する問題と同等です。

開始点と終了点を決定する最短経路問題。つまり、開始点と終了点が与えられた場合、2 つのノード間の最短経路を見つけます。

グローバル最短経路問題: グラフ内のすべての最短経路を見つけます。

フロイド

複数のソースがあり、負の重みエッジがない最短パスを見つけます。マトリックスを使用してグラフを記録します。適時性は低く、時間計算量は O(V^3) です。

フロイド・ワーシャル アルゴリズムは、任意の 2 点間の最短経路を解くアルゴリズムです。有向グラフや負の重み付き最短経路問題を正しく処理できます。

Floyd-Warshall アルゴリズムの時間計算量は O(N^3) で、空間計算量は O(N^2) です。

フロイド・ワーシャルの原理は動的計画法です。

Di,j,k を、中間ノードとして (1..k) セット内のノードのみを持つ i から j への最短パスの長さとします。

最短経路が点 k を通過する場合、Di,j,k = Di,k,k-1 + Dk,j,k-1 となります。

最短経路が点 k を通過しない場合は、Di,j,k = Di,j,k-1 となります。

したがって、Di,j,k = min(Di,k,k-1 + Dk,j,k-1 , Di,j,k-1) となります。

実際のアルゴリズムでは、スペースを節約するために、元のスペースに対して直接反復処理を実行し、スペースを 2 次元に縮小することができます。

Floyd-Warshall アルゴリズムの説明は次のとおりです。

  1. k ← 1 から nまで 
  2. i ← 1 から nまで 
  3. j 1 から nまで 
  4. (Di,k + Dk,j < Di,j)の場合
  5. Di,j ← Di,k + Dk,j;

ここで、Di,j はポイント i からポイント j までのコストを表します。Di,j が ∞ の場合、2 つのポイント間に接続がないことを意味します。

ダイクストラ

単一のソースと負の重みのない最短パスを見つけます。適時性は良好で、時間計算量は O (V*V+E) です。

ソースポイントが到達可能な場合、O(V*lgV+E*lgV)=>O(E*lgV)。

疎グラフの場合、E = V * V / lgVなので、アルゴリズムの時間計算量はO(V ^ 2)になります。フィボナッチ ヒープを優先キューとして使用する場合、アルゴリズムの時間計算量は O (V*lgV + E) になります。

ベルマンフォード

単一のソースから最短経路を見つける場合、負の重み付きループがあるかどうかを判断できます (ある場合、最短経路はありません)。この方法は時間効率が良く、時間計算量は O(VE) です。

ベルマン・フォード アルゴリズムは、単一ソースの最短経路問題を解決するためのアルゴリズムです。

単一のソース ポイントに対する最短経路問題とは、重み付き有向グラフ G とソース ポイント s が与えられた場合に、グラフ G 内の任意のポイント v について、s から v への最短経路を見つけることを意味します。

Dijkstra アルゴリズムとは異なり、Bellman-Ford アルゴリズムでは、エッジの重みは負になることがあります。グラフ内にサイクル(v から始まり、いくつかの点を通過して v に戻る)が見つかり、このサイクル内のすべてのエッジの重みの合計が負であるとします。そして、このループを通じて、ループ内の任意の 2 点間の最短経路は無限に小さくなる可能性があります。この負のループが処理されない場合、プログラムは永久に実行されます。 Bellman-Ford アルゴリズムには、このような負のループを区別する機能があります。

SPFA

これは、比較的適時性と時間計算量が O(kE) に優れたベルマン・フォード キュー最適化です。 (k<<V)。

Bellman-Ford アルゴリズムと同様に、SPFA アルゴリズムは一連の緩和操作を使用して、グラフ内の特定のノードから他のすべてのノードへの最短パスを取得します。違いは、SPFA アルゴリズムがキューを維持するため、ノードの現在の最短パスが更新された後、他のノードをすぐに更新する必要がないため、繰り返し操作の数が大幅に削減されることです。

SPFA アルゴリズムは、ダイクストラ アルゴリズムとは異なり、負のエッジ重みを持つグラフに使用できます。

Dijkstra アルゴリズムや Bellman-ford アルゴリズムとは異なり、SPFA の時間効率は不安定です。つまり、異なるグラフに必要な時間は大きく異なります。

最良のケースでは、各ノードは一度だけキューに入れられ、アルゴリズムは実際には幅優先のトラバーサルになり、時間の複雑さは O(E) のみになります。一方、各ノードが (V-1) 回キューに入れられる例もあり、その場合、アルゴリズムは時間計算量が O(VE) のベルマンフォード アルゴリズムに退化します。

SPFA アルゴリズムは、負のエッジ重みグラフ上の Bellman-Ford アルゴリズムを完全に置き換えることができ、スパース グラフでも優れたパフォーマンスを発揮します。ただし、非負のエッジ重みグラフでは、最悪の事態を回避するために、より効率的で安定した Dijkstra アルゴリズムとそのヒープ最適化バージョンが通常使用されます。従来の SPFA アルゴリズムは、グリッド グラフのクラスではパフォーマンスが低下します。

【編集者のおすすめ】

  1. 階乗関連のアルゴリズムとその C++ 実装
  2. 「スペースを時間で交換する」アルゴリズムはキャッシュの世界へとあなたを導きます
  3. 文字の組み合わせをソートするJavaアルゴリズム
  4. 現在世界で最も重要な古典的アルゴリズムトップ10

<<:  ダイクストラアルゴリズムに関する予備的研究

>>:  現在世界で最も重要な古典的アルゴリズムトップ10

ブログ    
ブログ    

推薦する

ビッグデータの機械理解の秘密:クラスタリングアルゴリズムの詳細な説明

この記事では、いくつかのクラスタリング アルゴリズムの基本的な概要を示し、シンプルでありながら詳細な...

...

スイッチング技術を使用した負荷分散アルゴリズム

アプリケーション スイッチング テクノロジには、主に次の 4 つの主要テクノロジが含まれます。 ◆ト...

Reverse Midjourneyがオンラインになりました!デジタルアーティストがスティーブ・ジョブズに魅了され、写真がボルヘスの精神世界に入る

ブラウザに住むアーティストが開発した、ニューヨーク発のAIカメラアプリが人気を集めている。もしスティ...

MITが脳制御ロボットを開発:脳波を使ってロボットのエラーを修正できる

ロボットが人間のように行動するためには、人間を理解する必要があります。多くの場合、それは妥協しなけれ...

無料の Python 機械学習コース パート 2: 多重線形回帰

Python で任意の数の変数に対する多重線形回帰をゼロから開発する方法を学びます。線形回帰はおそら...

...

GPT-3 に匹敵するものでしょうか? EleutherAIがGPT-Jをオープンソース化

2020年、マイクロソフトはOpenAIと合意に達し、MicrosoftはGPT-3のソースコードに...

...

...

...

ビッグデータと人工知能の関係、総合的な分析

ビッグデータはクラウドコンピューティングを採用PaaS レイヤーの複雑な汎用アプリケーションは、ビッ...

AlphaFold2の最初の公開PyTorchバージョンが複製可能になりました。コロンビア大学のオープンソースで、1,000以上のスターが付いています。

ちょうど今、コロンビア大学のシステム生物学助教授であるモハメッド・アルクライシ氏が、AlphaFol...