Algoritmalar

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.

141418131318131300f3212345
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).