29.06.2013 Views

Curs 8 - Drumuri de cost minim [pdf] - Andrei

Curs 8 - Drumuri de cost minim [pdf] - Andrei

Curs 8 - Drumuri de cost minim [pdf] - Andrei

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!