Curs 8 - Drumuri de cost minim [pdf] - Andrei
Curs 8 - Drumuri de cost minim [pdf] - Andrei
Curs 8 - Drumuri de cost minim [pdf] - Andrei
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Cicluri <strong>de</strong> <strong>cost</strong> negativ<br />
δ(u, v)=<br />
Σ w(x,y), (x,y)∈u..v (u..v<br />
fiind drumul optim);<br />
∞, dacă nu există drum<br />
u..v.<br />
Dacă există pe drumul u..v un<br />
ciclu <strong>de</strong> <strong>cost</strong> negativ x..y <br />
δ(u,v) = δ(u,v) + <strong>cost</strong>(x..y) < δ(u,v)<br />
valoarea lui δ(u,v) va scă<strong>de</strong>a<br />
continuu <strong>cost</strong>ul este -∞ 1-3-4 ciclu <strong>de</strong> <strong>cost</strong><br />
δ(u,v) = -∞<br />
negativ(-1) toate<br />
<strong>cost</strong>urile din graf sunt -∞<br />
Proiectarea Algoritmilor 2010<br />
Algoritmul Bellman-Ford<br />
BellmanFord(G,s) // G=(V,E),s=sursa<br />
Pentru fiecare v in V[G] // inițializări<br />
d[v] = ∞;<br />
p[v] = null;<br />
d[s] = 0; // actualizare distanță <strong>de</strong> la s la s<br />
Pentru i <strong>de</strong> la 1 la |V| -1 // pentru fiecare pas <strong>de</strong> la s spre V-s<br />
Pentru fiecare (u,v) in E[G] // pentru arcele ce pleacă <strong>de</strong> la nodurile<br />
// <strong>de</strong>ja consi<strong>de</strong>rate<br />
Dacă d[v] > d[u] + w(u,v) atunci // se relaxează arcele corespunzătoare<br />
d[v] = d[u] + w(u,v); w(u v);<br />
p[v] = u;<br />
Pentru fiecare (u,v) in E[G]<br />
Dacă d[v] > d[u] + w(u,v) atunci<br />
Eroare (”ciclu negativ”);<br />
Proiectarea Algoritmilor 2010<br />
5/8/2010<br />
6