Sunteți pe pagina 1din 11

Algoritmul Bellman-

Ford
Sa intelegem
Algoritmul Bellman-Ford
determina drumurile minime de la
un varf de start la toate celelalte
varfuri in graf,chiar daca exista
costuri negative pe arce. Exista
solutie doar daca in varful de start
nu se ajunge la un drum de cost
negativ, deoarece acesta ar duce
la minimizarea drumului la infinit.
mai mult
Algoritmul incearca sa reduca
succesiv costul drumului de la nodul
de plecare la orice varf k din graf
(d[k]) pana la obtinerea costului
minim, astfel se verifica pentru
fiecare arc(j,k) daca participa la
minimizarea distantei de la nodul de
plecare la nodul k (adica daca
respecta conditia d[k]>d[j]+c[j][k]).
Iata algoritmul!!!
Drumul
Drumul se poate realiza atat
iterativ,cat si recursiv. In ambele
variante vom reconsrui drumul
inapoi,plecand de la varful
destinatiei y.
in vectorul tata[y] este memorat
predecesorul varfului y pe drumul de
cost minim de la x0 la y si asa mai
departe. Reconstruirea drumului se
termina atunci cand ajungem in varful
de start.
CHESTII IMPORTANTE:
1)Observati ca drumul va fi
obtinut in ordine inversa. Pentru a
obtine drumul in ordinea corecta
in varianta iterativa, vom memora
drumul intr-un vector,pe care
ulterior il vom parcurge de la
sfarsit la inceput;
Chestii importante 2
2)In varianta recursiva, vom
utiliza proprietatile stivei.
3) Algoritmul Bellman Ford astfel
prezentate reine cte un singur drum de
cost
minim de la vrful surs la fiecare dintre
celelalte vrfuri ale grafului.
Alte chestii importante
Pentru a obtine drumurile
de cost minim, se vor
retine pentru fiecare varf
Y din graf toate varfurile
care il preceda pe y pe un
drum de cost minim de la
X0 la Y.
Continuare
Acest lucru se va face astfel:
tata[i][0] este numrul vrfurilor din
care se poate atinge vrful i ob innd
un cost minim
tata[i][k] este cel de-al k-lea nod din
care se poate atinge vrful i ob innd
un cost minim, unde k este strict
pozitiv.
Complexitate

Complexitatea algoritmului Bellman Ford este


O(n^3), deoarece algoritmul execut de n ori
secvena de minimizare distanelor avnd
complexitatea O(n^2).

Dac graful este memorat n liste de


adiacen, complexitatea algoritmului este
O(nxm).