Sunteți pe pagina 1din 5

Algoritmul Dantzing 2.

Determina distantele minime intr-un graf


orientat G=(X, U) cu n varfuri. Fie X = {x1, x2,...,xn } multimea de varfuri. Fie t functia distanta minima de la x1 la celelalte varfuri, t(xp)=dmin(x1,xp). Notam cu Xq o submultime cu q varfuri ale grafului G. Pasul 1. Notam X1={x1},si definim t(x1)=0. Pasul 2. Daca s-a determinat multimea Xq={xi1,xi2,,xiq} , pentru fiecare varf xip din Xq se determina varful yip care nu se gaseste in Xq si este cel mai apropiat de xip, adica lungimea arcului (xip,yip) este minima in multimea lungimilor arcelor care pleaca din xip catre varfuri care nu se afla in Xq, daca aceasta multime de arce este nevida. Daca exista mai multe varfuri, se alege un yip la intamplare. Se determina acel varf yis care verifica egalitatea: t(xis)+l(xis,yis)= min {t(xij)+l(xij,yij)} si definim Xq+1=Xq {yis},
j{1, 2,..., q}

definindu-se functia in yis prin t(yis)= t(xis)+l(xis,yis). Daca functia t nu poate fi definita intr-un varf w, rezulta ca nu exista nici un drum de la x1 la w. Exemplu. Vom folosi acelasi graf ca la algoritmul Dantzing 1. Pasul 1. X1={x1}, t(x1)=0. Cel mai apropiat varf de x1este unic determinat si este x2, deci X2={x1,x2}, t(x2)=t(x1)+l(x1,x2)=0+1=1. Pasul 2. Cele mai apropiate varfuri de x1 si x2 , care nu apartin multimii X2, sunt y1=x3 si y2=x3, obtinute astfel: min{t(x1)+l(x1,x3), t(x2)+l(x2,x3), t(x1)+l(x1,x4),t(x2)+l(x2,x4)}= =min{0+2,1+1,0+4,1+2}=2, atins pentru x3. Deci, vom avea X3={x1, x2, x3}. Pasul 3. X3={x1, x2, x3} si y1=y2=y3=x4. Avem t(x1)+l(x1,x4)=4, t(x2)+l(x2,x4)=1+2=3, t(x3)+l(x3,x4)=2+1=3. Minimul este 3, deci t(x4)=3.

Algoritmul lui Yen. Fie G=(X, U) un graf orientat cu n varfuri. Fie


X = {x1, x2,...,xn } multimea de varfuri. Pornind de la matricea

47

distantelor directe D, algoritmul determina distantele minime de la varful x1 la celelalte varfuri x2, x3,...,xn. Pasul 1. In matricea distantelor directe D, se determina, pe linia 1, minimul distantelor directe d12,d13,,d1n. Daca acesta se atinge pentru i0, care poate sa nu fie unic, atunci distant minima este sansforma astfel: d1*i0 d1i o min{ d1i }.
i{1,..., n}

Pasul 2. Toate elementele din prima linie a matricei D, cu exceptia elementelor d11=0 si d1i0 , se transforma astfel d1i min (d1i , d1i0 d i0 i ).
i {1,i0 }

Din matricea astfel obtinuta, se elimina linia si coloana i0, pastrandu-se rangurile initiale pentru liniile si coloanele ramase. Daca matricea obtinuta are rangul 2, atunci elementul d12 din aceasta matrice reprezinta reprezinta distant minima de la x1 la xk, unde k este rangul coloanei a doua din aceasta ultima matrice. Cu ajutorul acestui algoritm, putem determina si drumurile de lungime minima. Daca (xk , xj) este ultimul arc al unui drum minim de * * la xi la xj, atunci d ij d ik d kj .(*) Se cauta in matricea D, pe coloana varfului xj toate varfurile care sunt adiacente cu xj si care verifica relatia (*). Aceste varfuri se vor gasi inaintea varfului xj intr-un drum minim de la xi la xj. Se repeta procedeul pentru aceste varfuri. Exemplu. Consideram un graf cu urmatoarea matrice a distantelor directe: 1 0 D= 2 1 3 4 2 0 4 5 2 0 5 8 5 3 0 6 5 1 0 1 2 3 4 5 6

48

Vom aplica algoritmul Yen. Pasul 1. Minimul pe prima linie este d12=1, deci va fi distant minima * dintre varful x1 si varful x2, d12 1. Celelalte elemente de pe linia 1, cu exceptia d11=0 si d12, se transforma astfel: d13=min(d13, d12+d23)=min(4,1+2)=3; d14=min(d14, d12+d24)=min( ,1+5)=6; d15=min(d15, d12+d25)=min( ,1+8)=9; d16=min(d16, d12+d26)=min( ,1+ )= . Eliminam linia si coloana 2. Obtinem urmatoarea matrice care pastreaza vechile ranguri ale liniilor si coloanelor matricei distantelor directe pentru graful initial:

1 0 D1=

3 3

4 6 2 0

5 9 5 3 0

6 5 1 0 1 3 4 5 6

Pasul 2. Minimul de pe prima linie a matricei D1 este 3 si se atinge * pentru pozitia 3, deci d13 3 . Celelalte elemente de pe linia 1 se transforma astfel: d14=min(d14, d13+d34)=min(6,3+2)=5; d15=min(d15, d13+d35)=min(9,3+5)=8. d16=min(d16, d13+d36)=min( ,3+ )= . Eliminam linia si coloana 3. Obtinem urmatoarea matrice care pastreaza vechile ranguri ale liniilor si coloanelor matricei distantelor directe pentru graful initial:

49

1 0 D2=

4 5

5 8 3 0

6 5 1 0 1 4 5 6

Pasul 3. Minimul de pe prima linie a matricei D2 este 5 si se atinge * pentru pozitia 4, deci d14 3 . Celelalte elemente de pe linia 1 se transforma astfel: d15=min(d15, d14+d45)=min(8, 5+3)=8. d16=min(d16, d14+d46)=min( ,5+5)=10. Eliminam linia si coloana 4. Obtinem urmatoarea matrice care pastreaza vechile ranguri ale liniilor si coloanelor matricei distantelor directe pentru graful initial: 1 0 D3= 5 8 6 10 1 1 0 5 6

Pasul 4. Minimul de pe prima linie a matricei D3 este 8 si se atinge * pentru pozitia 5, deci d15 8 . Celelalte elemente de pe linia 1 se transforma astfel: d16=min(d16, d15+d56)=min(10,8+1)=9. Eliminam linia si coloana 5. Obtinem urmatoarea matrice care pastreaza vechile ranguri ale liniilor si coloanelor matricei distantelor directe pentru graful initial:

50

1 0 D4=

6 9 1 6

Matricea are ordinal 2, deci elementul de pe pozitia (1,2) este distant * minima dintre x1 si x6, d16 9. Pentru a calcula drumurile minime de la x1 la x6, cautam pe coloana 6 din matricea D, valorile finite si nenule(= varfurile adiacente cu x6). In cazul nostrum, avem {x4, x5}. Verificam formula * * * * d ij d ik d kj , pentru k=4, k=5, i=1, j=6. Avem d16 d 14 d 46 ? Adica 9=3+5? Nu, deci x4 nu este vecin cu x6 pe un drum minim de la x1 la x6. Se poate afla pe un astfel de drum, dar nu ca vecin al lui x6! * * Verificam pentru k=5, d16 d 15 d 56 , deci 9=8+1. Da! Deci, x5 este vecin cu x6 pe un drum minim de la x1 la x6. Continuam procedeul pentru varful x5, gasind varfurile cu care este vecin, pe drumuri minime de la x1 la x6, etc. Vom gasi drumurile : 1 ={x1, x3, x5, x6} si 2= {x1, x2, x3, x4, x5, x6}, ambele de lungime 9.

Algoritmul Bellman Kalaba. (de determinare a drumului minim


pornind de la matricea distanelor directe D). Acest algoritm poate determina si drumurile pe care se ating distantele minime. Fie G = (X,U) un graf cruia i atam matricea D = (dij)i,j={1,..n}, a distanelor directe. Fie vi valoarea minim a drumurilor in (i=1,n) existente de la vrful xi la vrful xn, vi =l( in) i vn = 0. Conform principiului optimalitii al lui Bellman(orice subdrum al unui drum minim este minim intre capetele sale) , avem c: (*)
vik min (v kj 1 d ij )
j i

j { 0,,n} , i { 0,n-1}, i vn = 0,

vi0 d in .

51