Université de Bordeaux Licence Informatique, 3e année
Année 2016-2017 TD/TP: feuille 4
Techniques Algorithmiques et Programmation
Complément sur l’algorithme A*
On rappelle l’algorithme A* vu en cours :
Algorithme A* (du cours)
Entrée : un graphe G, potentiellement asymétrique, arête-valué par une fonction de poids
ωtelle que ω(e)>0,s, t ∈V(G), et une heuristique h(x, y)>0estimant la distance
entre les sommets xet ydans G.
Sortie : un chemin entre set tdans G, une erreur s’il n’a pas été trouvé.
1. Poser P:= ∅,Q:= {s},cout[s] := 0,parent[s] := ⊥,f[s] := cout[s] + h(s, t)
2. Tantque Q6=∅:
(a) Choisir u∈Qtel que f[u]est minimum
(b) Si u=t, alors renvoyer le chemin de sàtgrâce à la relation parent[u]:t→parent[t]→
parent[parent[t]] → · · · → s
(c) Ajouter uàP
(d) Pour tout voisin v /∈Pde u:
i. Poser c:= cout[u] + ω(u, v)
ii. Si v /∈Q, ajouter vàQ
iii. Sinon, si c>cout[v]continuer la boucle
iv. cout[v] = c,parent[v] = u,f[v] = c+h(v, t)
3. Renvoyer l’erreur : « le chemin n’a pas été trouvé »
On dit que l’heuristique hest monotone si h(x, t)6ω(x, y) + h(y, t)pour tout voisin yde x. On
dit que l’heuristique hsous-estime la distance si h(x, y)6distG(x, y)pour tous sommets x, y tels
que h(x, y)est définie.
Dans le cours on a vu la propriété suivante qu’on admettra : si hest monotone et sous-estime la
distance alors l’algorithme A* calcule un plus court chemin entre set t(s’il existe).
Question 1. Montrer que si hvérifie l’inégalité triangulaire et sous-estime la distance, alors l’algo-
rithme A* calcule correctement un plus court chemin entre set t(s’il existe).
Question 2. Construisez un exemple où hne sous-estime pas la distance et A* ne trouve pas le plus
court chemin entre set t, alors qu’il existe.
L’algorithme présenté dans le cours est en fait une variante de l’algorithme A* original. Dans sa
version originale, A* peut modifier cout[u]pour un sommet de udéjà dans Pet le remettre dans Q.
L’analyse de sa complexité est alors plus complexe. On peut montrer que l’algorithme original A*
calcule toujours un court chemin entre set tdès que hsous-estime la distance.
Question 3. Construisez un exemple où l’algorithme A* vu en cours ne calcule pas correctement le
plus court chemin entre set t(qui existe par ailleurs) alors que hsous-estime la distance.