Documente Academic
Documente Profesional
Documente Cultură
Notaii
l[i] , 0 i C*
l[]
l[0] s
pentru v V execut
l[] v
d[v]
sfrit pentru
d[s] 0
p0
ct timp p < C* execut
ct timp l[p] execut
v l[p]
pentru (v, u) cu d[u] > d[v] + w(v, u)
execut
l[d[u]] a v
d[u] d[v] + w(v, u)
l[d[u] u
sfrit pentru
sfrit ct timp
pp+1
sfrit ct timp
focus
41
focus
GInfo nr. 13/6 - octombrie 2003
42
Corectitudinea algoritmului
Vom arata c atunci cnd algoritmul se ncheie, vom avea
d[v] = (s, v) pentru orice v V. Vom demonstra mai nti
cteva rezultate intermediare.
Lema 1: Dac un nod v este extras n linia 12, atunci
toate nodurile u care sunt legate de v (direct sau indirect)
prin muchii de cost 0 vor fi procesate la aceeai iteraie (a ciclului care ncepe la linia 10), ca i v, i vor avea d[u] = d[v].
Demonstraia se realizeaz prin inducie dup numrul de muchii de cost 0 dintre u i v. Toate nodurile adiacente cu v vor fi descoperite de codul din linia 13, vor avea
d[u] = d[v] datorit liniei 15 i vor fi adugate n lista curent la linia 16. Prin inducie, dac nodurile aflate la
distana k de v au fost procesate, atunci nodurile aflate la
distana k + 1 de v vor fi descoperite de codul din linia 13
i procesate. Deci, toate nodurile legate de v prin muchii
de cost 0 vor fi procesate i vor avea d[u] = d[v].
Lema 2: La sfritul fiecrei iteraii a ciclului care ncepe la linia 10 toate nodurile v pentru care (s, v) p au fost
procesate.
Demonstraia se realizeaz tot prin inducie. Primul
nod extras este s. Din moment ce costurile muchiilor sunt
nenegative, singurele noduri pentru care (s, v) 0 sunt cele
pentru care (s, v) = 0. Orice nod pentru care (s, v) = 0
trebuie s fie conectat de surs prin muchii de cost 0. Conform lemei 1, toate nodurile de acest tip vor fi procesate.
La pasul p, datorit ipotezei de inducie, toate nodurile
x pentru care (s, v) < p au fost procesate. Fie v un nod
astfel nct (s, v) = p. Fie u predecesorul direct al lui v pe
un drum de cost minim s:
(s, v) = (s, u) + w(u, v) p = (s, u) + w(u, v).
Dac w(u, v) > 0, atunci (s, u) < p, deci u a fost procesat la o iteraie precedent. Deoarece u a fost procesat
atunci cnd muchia (u, v) a fost relaxat, nodul v a fost
inserat n lista l[p] (dac nu era inserat deja n list). Deoarece toate nodurile din l[p] sunt procesate la pasul p, atunci
nodul v va fi procesat.
Cazul n care w(u, v) = 0 nu prezint interes, deoarece,
conform lemei 1, toate nodurile legate prin muchii de cost
0 de nodul u sunt procesate la aceeai iteraie ca i u. Deci,
dac am dovedit c toate nodurile pentru care (s, v) = p i
care sunt legate de predecesorii direci prin muchii de cost
pozitiv sunt procesai la pasul p, atunci toate nodurile pentru care (s, v) = p sunt procesate la pasul p.
Teorem: Atunci cnd un nod este extras n linia 12 el
va avea d[v] = (s, v).
Demonstraia se realizeaz tot prin inducie. Primul
nod extras este s i va avea d[s] = (s, s) = 0.
Fie v un nod arbitrar extras din l[p] cu operaia de la linia 12. Prin inducie avem calculate costurile drumurilor minime pentru toate nodurile care au fost extrase naintea lui.
Datorit lemei 2 toate nodurile pentru care costul drumului
minim este mai mic dect p au fost procesate. Astfel avem:
d[u] = (s, u), pentru toi u astfel nct (s, u) < p.
t
Fie un drum de cost minim de la s la v: s
uv.
Vom avea (s, v) = (s, u) + w(u, v).
Bibliografie