A* Arama
Graflar O(E) O(V)Bir sezgiselle yönlendirilen en-iyi-öncelikli en kısa yol: en düşük g + düz-çizgi tahminine sahip düğümü genişletir.
Başlangıç
Hedef
1/32
Hedef 5. g[0] = 0, f[0] = h = 32.
DeğişmezKapatılmış bir düğüm için g nihaidir. Bunun için h'nin kalan mesafeyi asla fazla tahmin etmemesi gerekir.
a-star.c
#define V 6#define INF 1000000/* h[v] = straight-line estimate from v to the goal */int aStar(int graph[V][V], int h[V], int src, int goal) {int g[V], f[V], closed[V] = {0};for (int i = 0; i < V; i++) { g[i] = INF; f[i] = INF; }g[src] = 0;f[src] = h[src];for (int count = 0; count < V; count++) {int u = -1;for (int v = 0; v < V; v++)if (!closed[v] && (u == -1 || f[v] < f[u]))u = v;if (u == goal) return g[goal];closed[u] = 1;for (int v = 0; v < V; v++)if (graph[u][v] && g[u] + graph[u][v] < g[v]) {g[v] = g[u] + graph[u][v];f[v] = g[v] + h[v];}}return -1;}
A* Arama nasıl çalışır?
Yön duygusu olan Dijkstra: sınırı g(n) + h(n) ile sırala — o ana dek maliyet artı hedefe iyimser tahmin. Kabul edilebilir h ile asla daha kısa yolu kaçırmaz ama grafın çoğunu görmezden gelir.
En iyi durum
Mükemmel sezgisel — yalnızca optimal yolun düğümlerini genişletir.
En kötü durum
h ≡ 0 düz Dijkstra'ya döner.
Ne zaman kullanılır?
Geometrik hedefli yol bulma: oyunlar, robotik, haritalar (h olarak kuş uçuşu mesafe).