Dijkstra :
Il a une fonction de coût, qui est la valeur du coût réel de la source à chaque nœud : f(x)=g(x)
.
Il trouve le chemin le plus court de la source à chaque autre nœud en ne considérant que le coût réel.
Recherche A* :
Il a deux fonctions de coût.
-
g(x)
: même chose que Dijkstra. Le coût réel pour atteindre un noeud x
.
-
h(x)
: coût approximatif du nœud x
au nœud de but. Il s'agit d'une fonction heuristique. Cette fonction heuristique ne doit jamais surestimer le coût. Cela signifie que le coût réel pour atteindre le nœud d'objectif à partir du nœud x
doit être supérieure ou égale à h(x)
. Elle est appelée heuristique admissible.
Le coût total de chaque nœud est calculé par f(x)=g(x)+h(x)
La recherche A* ne développe un nœud que s'il semble prometteur. Elle se concentre uniquement sur l'atteinte du nœud cible à partir du nœud actuel, et non sur l'atteinte de tous les autres nœuds. Elle est optimale, si la fonction heuristique est admissible.
Ainsi, si votre fonction heuristique permet d'approximer le coût futur, vous devrez explorer beaucoup moins de nœuds que Dijkstra.
50 votes
xkcd.com/342
3 votes
@SLaks A* utilise plus de mémoire que dijkstra ? Comment se fait-il que A* n'emprunte que des chemins prometteurs alors que dijkstra les essaie tous ?