Documente Academic
Documente Profesional
Documente Cultură
“Descoperirea” algoritmilor de
identificare a drumurilor de cost minim.
s V – nodul sursă;
d = 10 d=7
s v s v
Prin logaritmare
Maximizarea
produsul se
se transformă
transformă în
în minimizare
sumă.
dacă toate
arcele sunt
negate.
d[4] = 7, p[4] = 5
Pentru fiecare (u,v) din E
Dacă d[v] > d[u] + w(u,v) atunci
Eroare (”ciclu negativ”);
cazul defavorabil:
Pentru i de la 1 la |V| - 1 V
*
Pentru fiecare (u,v) din E E
Dacă d[v] > d[u] + w(u,v) atunci
O(VE)
d[v] = d[u] + w(u,v);
p[v] = u;
Observație!
Dacă d[v] nu se modifică la pasul i atunci nu
trebuie sa relaxăm niciunul din arcele care
pleacă din v la pasul i + 1.
=> păstrăm o coadă cu vârfurile modificate
(o singură copie).
d[v] = d[u] + w(u,v);
p[v] = u;
Dacă (marcat[v] == false) {marcat[v] = true; Introdu(Q,v);}
Dem:
Prin inducție după k dem. că dk(i,j) = δk(i,j). (next slide)
Pt. k = n, i..j trece prin v ∊ V si avem dk(i,j) ≤ dk-1(i,j),
k = 1,n dn(i,j) ≤ dk-1(i,j), k = 1,n
Din dk(i,j) = δk(i,j) dn(i,j) = δn(i,j) ≤ dk-1(i,j)= δk-1(i,j), k
= 1,n dn(i,j) = δn(i,j) = δ(i,j)
Dar:
dk(k,j) = dk-1(k,k) + dk-1(k,j) = dk-1(k,j)
dk(i,k) = dk-1(i,k) + dk-1(k,k) = dk-1(i,k)
d(i,j) = w(i,j)
Dacă (w(i,j) == ∞)
Complexitate?
p(i,j) = null; O(V3)
Altfel p(i,j) = i;
Complexitate
Pentru k de la 1 la n spațială?
Pentru i de la 1 la n
Pentru j de la 1 la n O(V2)
Dacă (d(i,j) > d(i,k) + d(k,j)) // determinăm minimul
d(i,j) = d(i,k) + d(k,j)
Închidere_tranzitivă(G) 1 0 0 0
1 2 0 1 1 1
Pentru i de la 1 la n T(3) = 0 1 1 1
Pentru j de la 1 la n 4 3 1 1 1 1
E* (i,j) = (i,j) ∊ E v i =
j // inițializări
Pentru k de la 1 la n 1 0 0 0
1 2
1 1 1 1
Pentru i de la 1 la n
T(4) = 1 1 1 1
Pentru j de la 1 la n
4 3 1 1 1 1
E* (i,j) = E* (i,j) v (E*
(i,k) /\ E* (k,j))
Nu funcționează!!!!
Proiectarea Algoritmilor 2017
Construcție w1 (II)
Idee 2: w1(u,v) = w(u,v) + h(u) - h(v);
unde h : V ;
se adaugă un nod s;