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.

Algoritm Floyd-Warshall<br />

Floyd-Warshall(G)<br />

Pentru (i = 1 ; i ≤ n ; i++)<br />

PPentru t (j = 1 ; j ≤ n ; j++) // inițializări i iți li ă i<br />

d 0 (i,j) = w(i,j)<br />

Dacă (w(i,j) == ∞)<br />

p 0 (i,j) = null;<br />

Altfel p 0 (i,j) = i;<br />

Pentru (k = 1 ; k ≤ n ; k++)<br />

Pentru (i = 1 ; i ≤ n ; i++)<br />

Pentru (j = 1 ; j ≤ n ;j ; j++) )<br />

Observație<br />

Proiectarea Algoritmilor 2010<br />

Complexitate?<br />

O(V 3 )<br />

Complexitate<br />

spațială?<br />

O(V3 O(V )<br />

Dacă (d k-1 (i,j) > d k-1 (i,k) + d k-1 (k,j)) // <strong>de</strong>terminăm <strong>minim</strong>ul<br />

d k (i,j) = d k-1 (i,k) + d k-1 (k,j)<br />

p k (i,j) = p k-1 (k,j); // si actualizăm părintele<br />

Altfel<br />

d k (i,j) = d k-1 (i,j)<br />

p k (i,j) = p k-1 (i,j);<br />

Putem folosi o singură matrice in loc <strong>de</strong> n?<br />

Problemă: in pasul k, pt k < i si k < j, d(i,k) si d(k,j) folosite la<br />

calculul d(i,j) sunt d k (k,j) si d k (i,k) in loc <strong>de</strong> d k-1 (k,j) si d k-1 (i,k).<br />

Dacă <strong>de</strong>m. că d k (k,j)= d k-1 (k,j) si d k (i,k)=d k-1 (i,k), atunci<br />

putem folosi o singură matrice.<br />

Dar:<br />

dk (k j) = dk-1 (k k) + dk-1 (k j) = dk-1 d (k j)<br />

k (k,j) = dk 1 (k,k) + dk 1 (k,j) = dk 1 (k,j)<br />

dk (i,k) = dk-1 (i,k) + dk-1 (k,k) = dk-1 (i,k)<br />

Algoritm modificat pentru a folosi o singura matrice <br />

complexitate spațială: O(n 2 ).<br />

Proiectarea Algoritmilor 2010<br />

5/8/2010<br />

12

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

Saved successfully!

Ooh no, something went wrong!