グラフにおける最短経路問題

主要な最短経路アルゴリズムを調査:重みなしのBFS、非負の重みのDijkstra、負の重みのBellman-Ford、全ペアのFloyd-Warshall。計算量とユースケースを比較します。

Shortest Path

詳細な説明

最短経路問題

ノード間の最短経路を見つけることは、コンピュータサイエンスで最も研究されている問題の一つです。異なるグラフの特性には異なるアルゴリズムが必要です。

アルゴリズム選択ガイド

シナリオ アルゴリズム 時間計算量
重みなしグラフ BFS O(V + E)
非負の重み Dijkstra O((V+E) log V)
負の重み Bellman-Ford O(V · E)
全ペア Floyd-Warshall O(V³)
DAG(任意の重み) DAG緩和 O(V + E)

重みなしグラフのBFS

すべての辺が等しい重み(または重み1)の場合、BFSは自然に最短経路を見つけます。

非負の重みのDijkstra

Dijkstraアルゴリズムは貪欲アプローチを使用:常に最も近い未訪問ノードを処理します。

負の重みのBellman-Ford

Bellman-FordはすべてのV-1回辺を緩和します。負のサイクルを検出できます。

A*探索

Aはヒューリスティック関数h(n)でDijkstraを拡張します。ヒューリスティックが許容的な場合、Aは最適でDijkstraより高速です。

ユースケース

GPSナビゲーションシステムはDijkstraまたはA*を使用して走行ルートを見つけます。OSPFやIS-ISなどのネットワークプロトコルはパケットルーティングに最短経路アルゴリズムを使用します。ゲームAIはマップ上のキャラクターパスファインディングにA*を使用します。

試してみる — Graph Visualizer

フルツールを開く