A*(えーすたー)
最終更新:2026/4/27
A*は、ヒューリスティック関数を用いて最適な経路を効率的に探索するグラフ探索アルゴリズムである。
別名・同義語 A-starA star
ポイント
A*アルゴリズムは、ダイクストラ法を拡張したもので、より効率的に最短経路を見つけることができる。特に大規模なグラフにおいて有効である。
A*アルゴリズムとは
A*(エー・スター)は、グラフ上のノード間における最短経路を見つけるための探索アルゴリズムです。1968年にアルト・アーサーとピーター・ハートレイによって開発されました。ダイクストラ法と同様に、始点から各ノードへのコストを評価しますが、A*はそれに加えて「ヒューリスティック関数」を使用することで、探索の効率を大幅に向上させています。
ヒューリスティック関数
ヒューリスティック関数とは、あるノードから目標ノードまでの「推定コスト」を計算する関数です。この推定コストは、実際のコストよりも小さくなるように設計されており、Aアルゴリズムは、この推定コストと始点から現在のノードまでの実際のコストを組み合わせて、次に探索するノードを決定します。適切なヒューリスティック関数を選択することで、Aはダイクストラ法よりも高速に最短経路を見つけることができます。
アルゴリズムの概要
A*アルゴリズムは、以下の手順で動作します。
- 始点をオープンリストに追加します。
- オープンリストから、f(n) = g(n) + h(n) が最小のノードnを選択します(f(n): 評価関数、g(n): 始点からnまでのコスト、h(n): nから目標までの推定コスト)。
- nが目標ノードであれば、経路を復元して終了します。
- nをクローズドリストに追加します。
- nの隣接ノードを調べます。
- 隣接ノードがオープンリストまたはクローズドリストに存在しない場合、g(n) + cost(n, neighbor) を計算し、h(neighbor) を計算して f(neighbor) を求め、neighbor をオープンリストに追加します。
- 隣接ノードがオープンリストまたはクローズドリストに存在する場合、新しい経路の方がコストが低いかどうかを調べ、コストが低い場合は経路を更新します。
- オープンリストが空になるまで、手順2〜7を繰り返します。
A*アルゴリズムの応用例
A*アルゴリズムは、様々な分野で応用されています。
注意点
ヒューリスティック関数の選択は、A*アルゴリズムの性能に大きく影響します。不適切なヒューリスティック関数を使用すると、最短経路を見つけられない場合があります。