Table of Contents
A*とDijkstraのアルゴリズムは、パスファインディングとグラフのトラバーサルの根本的です。それらは、ナビゲーションシステム、ロボティクス、ネットワークルーティングで広く使用されています。数学的基礎を理解することは、その性能と適用性を最適化するのに役立ちます。
グラフの表現
どちらのアルゴリズムも、ノード(vertices)とエッジで構成されるグラフで動作します。Edgesは、コスト、距離、または時間を表す重量を持つことがあります。グラフは、方向または間接することができ、重量は通常非負です。
コスト機能とヒューリスティック
これらのアルゴリズムのコアは、各ノードに到達するためにコストを計算することを含みます。 Dijkstraのアルゴリズムは、スタートノードから累積コストを使用します。 A*は、残りのコストの目標に、コストのヒューリスティックな見積もりを追加します。 ヒューリスティックは、それが真のコストを過小評価しないという意味で、承認されなければなりません。
数学の公式
G = (V, E) は、V と Edge E の頂点を持つグラフになります。各エッジ (u, v) は、重量 w(u, v) を持っています。この目標は、スタートノードからゴールノード t までの最短パスを見つけることです。
Dijkstraのアルゴリズムは、d(s) = 0 と d(v) = v ∞ として初期化した、各頂点 v の間隔 d(v) を更新します。 これにより、最も小さい d(v) で頂点を反復し、隣接するエッジをリラックスさせます。
A*は、vからtまでのコストを推定するh(v)を組み込むことでこれを変更します。優先関数はf(v) = d(v) + h(v)になります。このアルゴリズムは、最も低いf(v)に基づいてノードを拡大します。
アルゴリズムの効率
効率性は、使用されるデータ構造に依存します。 Dijkstraのアルゴリズムは、優先キューでO(|E|+|V|ログ |V|)の時間の複雑さを持っています。 ヒューリスティックがうまく設計されていて、ノードの数を減らすとA*は高速になります。
- 負の体重が少ないグラフ
- A*の承認可能なヒューリスティック
- ノード選択の優先キュー
- エッジのリラックスと更新コスト