et l’algorithme d´etectera la pr´esence ´eventuelle d’un cycle strictement n´egatif accessible
depuis l’origine.
Nous avons donc un graphe oriene valu´e G=(S, A, w)avecw:A!R.
Id´ee de l’algorithme. Comme pour Dijkstra, on met `a jour progressivement une sur-
estimation d[v] de la distance d’un PCC entre l’origine set le sommet v. On appelle
cette technique la m´ethode du ”relˆachement” : ´etant donn´es deux sommets uet vet les
surapproximations d[u] et d[v] ainsi qu’un arc (u, v)2A, on peut mettre `a jour d[v] si
d[v]>d[u]+w(u, v)carlarc(u, v) permet d’am´eliorer l’estimation d[v]. . .
Proedure PCC-Bellman-Ford(G, s)
//G=(S, A, w): un graphe orient´e, valu´e avec w:A!R.
//s2S: un sommet origine.
begin
pour chaque u2Sfaire
[u]:=nil
d[u]:=(0siu=s
1sinon
pour i=1`a |S|1faire
pour chaque (u, v)2Afaire
si d[v]>d[u]+w(u, v)alors
d[v]:=d[u]+w(u, v)
[v]:=u
pour chaque (u, v)2Afaire
si d[v]>d[u]+w(u, v)alors
return (?,,)
return (>,d,)
end
Algorithme 7 : Algorithme de Bellman-Ford
La complexit´e est directe : l’algorithme est en O(|S|·|A|).
La premi`ere propri´et´e est que d[v] est bien un majorant de (s, v):
Propri´et´e 16 Soit G=(S, A, w)un graphe orient´e valu´e. Soit s2S. A tout moment de
l’algorithme on a d[v](s, v).
Preuve : C’est vrai au d´ebut de l’algorithme avec l’initialisation avec 1pour tout
v6=set `a 0 pour s. Ensuite, la seule mani`ere de changer d[v] est par ”relˆachement” avec
un arc (u, v) : on remplace l’ancienne valeur de d[v]pard[u]+w(u, v), or cette nouvelle
valeur est aussi un majorant de (s, v)(car(s, v)(s, u)+w(u, v)).
29
1 / 1 100%