Sunteți pe pagina 1din 33

TEMA

Drum minim in graful ponderat. Algoritmul lui


Ford pentru determinarea drumului minim.
Pentru un graf orientat G = <X,U> se va numi drum un şir
de vârfuri D = (x0, x1,..., xr) cu proprietatea că arcele (x0, x1),
(x1, x2),..., (xr-1, xr) aparţin lui U, deci sunt arce ale grafului şi
extremitatea finală a arcului precedent coincide cu extremitatea
iniţială a arcului următor.
Vârfurile x0 şi xr se numesc extremităţile drumului D.
Lungimea unui drum este dată de numărul de arce pe care le
conţine.

Dacă vârfurile x0, x1,..., xr sunt distincte două câte două drumul
D este elementar. Adeseori, fiecărui arc (muchii) i se pune în
corespondenţă un număr real pozitiv, care se numeşte ponderea
(identificat cu lungimea) arcului. Lungimea arcului (xi, xj) se va
nota P(i,j)=pij, iar în cazul în care pe un arc este lipsă ponderea
lui ea va fi considerată foarte mare (∞) (pentru calculator cel
mai mare număr pozitiv posibil).
În cazul grafurilor cu arce ponderate (grafuri ponderate)
G = <X,U,P> , unde P este multimea ponderilor, se va
considera lungime a unui drum suma ponderilor arcelor care
formează acest drum.
Drumul care uneşte două vârfuri concrete şi are lungimea cea
mai mică se va numi drum minim iar lungimea drumului minim
vom numi distanţă.
Vom nota distanţa dintre x şi t prin d(x, t), evident, d(x,x)=0.
Algoritmul Ford (F) permite determinarea drumului
minim dintrun vârf iniţial x1 (cu cel mai mic indice) până la
careva vârf xk al grafului G. Dacă prin P(i,j)=pij se va nota
ponderea arcului (xi, xj) atunci algoritmul conţine următorii paşi:

1
Pasul1.
Fiecărui vârf xj al grafului G i se va ataşa un număr foarte
mare (numit eticheta, sau marca) Hj, unde Hj = d(x1, xj ).
Vârfului iniţial i se va ataşaH1 = 0, iar celelalte Hj=∞,ceia ce
este echivalent ca distanta d(x1, xj ) la moment nu este
cunoscuta.
Pasul2.
Pentru fiecare arc (xi, xj) se calculeza diferenţele dintre
eticheta virfului final si cel initial Hj – Hi si aceasta diferenta
este comparata cu ponderea Pij.
Sunt posibile trei cazuri:
a) Hj - Hi < Pij;
b) Hj - Hi = Pij;
c) Hj - Hi > Pij.
Cazurile a) si b) nu permit micsorarea distantei dintre vârful
iniţial şi xj, adica Hj, iar cazul "c" permite micşorarea distanţei
dintre vârful iniţial şi xj, adica Hj prin modificarea:
Hj = Hi + Pij.
Pasul3.
Pasul 2 se va repeta de la inceput atâta timp pina cind nu va
mai exista nici un arc pentru care are loc inegalitatea “c”.
In final, etichetele Hi vor defini distanţa (drumul minim) de
la vârful iniţial până la vârful dat xi.
Daca Hj=∞, atunci nu exista drum din x1 in xj.
Daca Hj exista si este finit, atunci pentru stabilirea secvenţei
de vârfuri care va forma drumul minim trecem la pasul
Pasul4.
Se va pleca de la vârful final xj spre cel iniţial. Predecesorul
lui xj va fi considerat vârful xi pentru care va avea loc
Hj - Hi = Pij. Dacă vor exista câteva arce pentru care are loc
această relaţie ele toate trbuie luate in considerare.

2
Apoi in top este virful cu cel mai mare indice
EXEMPLUL 1.
Să se determine pentru graful din figura 1 drumul de valoare minimă
între vârfurile x1 şi x7 conform algoritmului lui Ford.

1 5
X2 X4
4 X6
5 5 3
8
5
X1 6 4
3 X7
2 6
X3 X5

Fig.1

Rezolvare:

I. H1 = 0 ;
II. H 2 =  ; H2= 5
H 3 =  ; H3= 3
H 4 =  ; H4= 5
H 5 =  ; H5= 6 H5= 5;
H 6 =  ; H6= 8
H7 =  H7= 11

III. Examinăm toate arcele care pleacă din vârful x1 :


H2-H1 =∞-0>P12 = 5  H2 se schimba:H2=H1+P12=0+5=5

3
H2= 5
H3-H1 =∞-0> P13 = 3  H3 se schimba: H3=H1+P13=0+3=3
H3= 3
H4-H1 =∞-0> P14 =5  H4 se schimba:H4=H1+P14=0+5=5
H4= 5
H5-H1= ∞-0> P15 = 6  H5 se schimba: H5=H1+P15=0+6=6
H5= 6
H6-H1 =∞-0> P16 = 8  H4 se schimba : H6=H1+P16=0+8=8
H6= 8
(fig. 1)
Examinăm toate arcele care pleacă din vârful x2 :
H4-H2=5-5< P24 =1  Eticheta H4 la vârful x4 nu se schimbă.
H5-H2=6-5< P25 =4  Eticheta H5 la vârful x5 nu se schimbă.
Examinăm toate arcele care pleacă din vârful x3 :
H5-H3 =6-3> P35 =2  H5 se schimba:H5=H3+P35=3+2=5;
H5= 5;
Examinăm toate arcele care pleacă din vârful x4 :
H5-H4 =5-5< P45 =3  Eticheta H5 la vârful x5 nu se schimbă.
H6-H4=8-5< P46 =5  Eticheta H6 vârful x6 nu se schimbă.
Examinăm toate arcele care pleacă din vârful x5 :
H6-H5=8-5< P56 =4  Eticheta H6 la vârful x6 nu se schimbă.
H7-H5=∞-5> P57=6  H7 se modifica : H7=H5+L57=5+6=11
H7= 11
Examinăm toate arcele care pleacă din vârful x6 :
H7-H6=11-8< L67 =5  Eticheta la vârful x7 nu se schimbă.

Verificam inca odata diferentele de la inceput cu etichetele


primite:
. H1 = 0 ;

4
II. H 2 =  ; H2= 5
H 3 =  ; H3= 3
H 4 =  ; H4= 5
H 5 =  ; H5= 6 H5= 5;
H 6 =  ; H6= 8
H7 =  H7= 11
H2-H1 =5-0=P12 = 5  H2 nu se schimba

H3-H1 =3-0= P13 = 3  H3 nu se schimba

H4-H1 =5-0= P14 =5  H4 nu se schimba

H5-H1= 5-0< P15 = 6  H5 nu se schimba

H6-H1 =8-0= P16 = 8  H6 nu se schimba


Examinăm toate arcele care iese din vârful x2 :
H4-H2=5-5< P24 =1  Eticheta H4 la vârful x4 nu se schimbă.
H5-H2=5-5< P25 =4  Eticheta H5 la vârful x5 nu se schimbă.
Examinăm toate arcele care iese din vârful x3 :
H5-H3 =5-3= P35 =2  H5 nu se schimba;
Examinăm toate arcele care iese din vârful x4 :
H5-H4 =5-5< P45 =3  Eticheta H5 la vârful x5 nu se schimbă.
H6-H4=8-5< P46 =5  Eticheta H6 vârful x6 nu se schimbă.
Examinăm toate arcele care iese din vârful x5 :
H6-H5=8-5< P56 =4  Eticheta H6 la vârful x6 nu se schimbă.
H7-H5=11-5= P57=6  H7 nu se modifica
Examinăm toate arcele care iese din vârful x6 :

5
H7-H6=11-8< L67 =5  Eticheta la vârful x7 nu se schimbă.
STOP

Rezolvarea problemei poate fi scrisă cu ajutorul unui tabel


(fig.2)

1 2 3 4 5 6 7
I 0 ∞ ∞ ∞ ∞ ∞ ∞
II1 5 3 5 6 8 ∞
III2 ∞
IV3 5 ∞
V4 ∞
VI5 11
VII6
0 5 3 5 5 8 11
Fig.2.

∞5 ∞5
1 5 ∞8
X2 X4
4 X6
5 5 3
0 8
5
X1 6 4
∞ 11
3 X7
2 6
X3 X5
∞3 ∞65

Fig.3.
lmin (1 − 7) = 11
IV. Determinăm drumul minim:
Startam de la ultimul virf x7.

6
Observam ca H 7 − H 5 = 11-5 = 6= P57  Inainte de x7 se
afla x5;
In top se afla virful x5 si observam ca
H 5 − H 3 = 5-3 =2= P35  Inainte de x5 se afla x3;
In top se afla virful x3 si observam ca

H 3 − H1 = 3-0 = 3= P13  Inainte de x3 se afla x1


Drumul corespunzător valorii minime 11:
1 3 5 7

EXEMPLUL 2.
Să se determine pentru graful din figura 1 drumul de valoare minimă
între vârfurile x1 şi conform algoritmului lui Ford.

2 4
2 4

4 2 6
3 4 2
8 3
1 5 7
5
4 3
5 3 8
3 5 7

Fig.4
REZOLVARE
Întroducem etichetele

7
I. H1 = 0 ;
II. H 2 =  ; H2= 4
H 3 =  ; H3= 5
H4 =  ; H4=6
H 5 =  ; H5= 8
H6 =  H6=10
H7 =  H7=10
H8=13
III. Examinăm toate arcele care pleacă din vârful x1 :
H2-H1 =∞-0>P12 = 4  H2 se schimba:H2=H1+P12=0+4=4
H2= 4
H3-H1 =∞-0> P13 = 5  H3 se schimba: H3=H1+P13=0+5=5
H3= 5
H5-H1 =∞-0> P15 =8  H5 se schimba:H5=H1+P15=0+8=8
H5= 8
Examinăm toate arcele care pleacă din vârful x2 :
H3-H2=5-4< P23 =3  Eticheta H3 la vârful x5 nu se schimbă.

H4-H2=∞-4> P24 =2  H4 se schimbă: H4=H2+ P24 =4+2=6.


H4=6
Examinăm toate arcele care pleacă din vârful x3 :
H4-H3 =6-5< P34 =2  H4 nu se schimba;
H5-H3 =8-5< P35 =4  H5 nu se schimba;
H7-H3 =∞-5> P37 =5  H7 se schimba; H7 =H3 + P37=5+5 = 10
Examinăm toate arcele care pleacă din vârful x4 :
H5-H4 =8-6< P45 =4  Eticheta H5 la vârful x5 nu se schimbă.
H6-H4=∞-6> P46 =4  H6 se schimbă:H6=H4+P46=6+4=10.

8
H8-H4=∞-6> P48 =7  H8 se schimbă: H8= H4+P48=6+7=13
H8=13
Examinăm toate arcele care pleacă din vârful x5 :
H6-H5=10-8= P56 =2  Eticheta H6 la vârful x6 nu se schimbă.
H7-H5=10-8< P57=3  H7 nu se modifica
H8-H5=13-8= P58=5  H8 nu se modifica

Examinăm toate arcele care pleacă din vârful x6 :


H8-H6=13-10= P67 =3  Eticheta la vârful x8 nu se schimbă.

Examinăm toate arcele care pleacă din vârful x7:


H8-H7=13-10= P67 =3  Eticheta la vârful x8 nu se schimbă.

Verificam inca odata diferentele de la inceput cu etichetele


primite:
H1 = 0 ;
H 2 =  ; H2 = 4
H 3 =  ; H3= 5
H4 =  ; H4=6
H 5 =  ; H5= 8
H6 =  H6=10
H7 =  H7=10
H8=13
III. Examinăm toate arcele care pleacă din vârful x1 :
H2-H1 =4-0=P12 = 4  H2 nu se schimba.
H3-H1 =5-0= P13 = 5  H3 nu se schimba.
H5-H1 =8-0= P15 =8  H5 nu se schimba.

Examinăm toate arcele care pleacă din vârful x2 :

9
H3-H2=5-4< P23 =3  Eticheta H5 la vârful x5 nu se schimbă.

H4-H2=6-4= P24 =2  H4 nu se schimbă.


Examinăm toate arcele care pleacă din vârful x3 :
H4-H3 =6-5< P34 =2  H4 nu se schimba;
H5-H3 =8-5< P35 =4  H5 nu se schimba;
H7-H3 =10-5= P37 =5  H7 nu se schimba;
Examinăm toate arcele care pleacă din vârful x4 :
H5-H4 =8-6< P45 =4  Eticheta H5 la vârful x5 nu se schimbă.
H6-H4=10-6= P46 =4  H6 nu se schimbă.

H8-H4=13-6= P48 =7  H8 nu se schimbă.


Examinăm toate arcele care pleacă din vârful x5 :
H6-H5=10-8= P56 =2  Eticheta H6 la vârful x6 nu se schimbă.
H7-H5=10-8< P57=3  H7 nu se modifica
H8-H5=13-8= P58=5  H8 nu se modifica
Examinăm toate arcele care pleacă din vârful x6 :
H8-H6=13-10= P67 =3  Eticheta la vârful x8 nu se schimbă.
Examinăm toate arcele care pleacă din vârful x7:
H8-H7=13-10= P78 =3  Eticheta la vârful x8 nu se schimbă.
STOP.
Am obtinut rezultatele:
H1 = 0 ;
H2= 4
H3= 5
H4=6
H5= 8
H6=10
H7=10
H8=13

10
Rezolvarea problemei poate fi scrisă cu ajutorul unui tabel
X1 X2 X3 X4 X5 X6 X7 X8
I 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞
II1 4 5 8
III2 6
IV3 10
V4 10 13
VI5
VII6
0 4 5 6 8 10 10 13

IV. Determinăm drumul minim:


Startam de la ultimul virf x8.
Observam ca 13-10 =3=  Inainte de x8 se
afla x6;
Observam ca H8-H7= 13-10 =3=P78  Inainte de x8 se
afla x7;
Observam ca H8-H5= 13-8 =5=P58  Inainte de x8 se
afla x5;
Observam ca H8-H4= 13-6 =7=P48  Inainte de x8 se
afla x4;

In top se afla virful x7 si observam ca


10-5 =5=  Inainte de x7 se afla x3;
In top se afla virful x6 si observam ca

10-8 = 2=  Inainte de x6 se afla x5

H6-H4=10-6 = 4= P46  Inainte de x6 se afla x4

11
In top se afla virful x5 si observam ca
H5-H1=8-0 = 8= P15  Inainte de x5 se afla x1.
In top se afla virful x4 si observam ca
H4-H2=6-4 = 2= P24  Inainte de x4 se afla x2.
In top se afla virful x3 si observam ca
H3-H1=5-0 = 5= P13  Inainte de x3 se afla x1.
In top se afla virful x2 si observam ca
H2-H1=4-0 = 4= P12  Inainte de x2 se afla x1.
Deci, am obtinut 5 drumuri minime:
d1=(1,2,4,6,8);
d2=(1,2,4,8);
d3=(1,3,7,8);
d4=(1,5,6,8);
d5=(1,5,8);

EXEMPLUL 3.(Alta Varianta)


Să se determine pentru graful din figura 4 drumul de valoare minimă
între vârfurile x1 şi x8 conform algoritmului lui Ford.

2 4
2 4

4 2 6
3 4 2
8 3
1 5 7
5
4 3
5 3 8
3 5 7

Fig.4
Rezolvare:

I. H1 = 0 ;

12
II. H 2 =  ;
H3 =  ;
H4 =  ;
H5 =  ;
H6 = 
H7 = 
H8 = 
Pentru fiecare arc (xi, xj) se calculeza diferenţele dintre
eticheta virfului final si cel initial Hj – Hi si se compara cu
ponderea Pij.
Sunt posibile trei cazuri:
a) Hj - Hi < Pij;
b) Hj - Hi = Pij;
c) Hj - Hi > Pij.
Cazurile a) si b) nu permit micsorarea distantei dintre vârful
iniţial şi xj, adica Hj, iar cazul "c" permite micşorarea distanţei
dintre vârful iniţial şi xj, adica Hj prin modificarea:
Hj = Hi + Pij.

13
Arcul Ponderea Prima diferenta A doua difer
(xi,xj) Pij Hj-Hi Hj-Hi
(1,2) 4 H2-H1= ∞-0>P12; H2=H1+P12 =0+4=4 H2-H1=4-0=P12;
(1,3) 5 H3-H1=∞-0>P13; H3=H1+P13 =0+5=5 H3-H1=5-0=P13;
(1,5) 8 H5-H1=∞-0>P15; H5=H1+P15 =0+8=8 H5-H1=8-0=P15;
(2,3) 3 H3-H2=5-4<P23; H3 nu se schimba H3-H2=5-4<P23;
(2,4) 2 H4-H2=∞-4>P24;H4= H2+P24 =4+2=6 H4-H2=6-4=P24;
(3,4) 2 H4-H3=6-5< P34;H4 nu se schimba H4-H3=6-5< P34;
(3,5) 4 H5-H3=8-5< P35;H5 nu se schimba H5-H3=8-5< P35;
(3,7) 5 H7-H3=∞-5>P37;H7=H3+P37 =5+5=10 H7-H3=10-5=P37;
(4,5) 4 H5-H4=8-6< P45; H5 nu se schimba H5-H4=8-6< P45;
(4,6) 4 H6 -H4 =∞-6>P46 ;H6 =H4 +P46 =6+4=10 H6-H4=10-6=P46;
(4,8) 7 H8-H4=∞-6>P48; H8=H4+P48=6+7=13 H8-H4=13-6=P48;
(5,6) 2 H6-H5=10-8=P56; H6 nu se modifica H6-H5=10-8=P56;
(5,7) 3 H7-H5=10-8< P57; H7 nu se schimba H7-H5=10-8< P57
(5,8) 5 H8-H5 =13-8= P45;H8 nu se schimba H8-H5=13-8= P58
(6,8) 3 H8-H6=13-10=P68;H8 nu se schimba H8-H6=13-10 =P68
(7,8) 3 H8-H7=13-10=P78;H8 nu se schimba H8-H7=13-10=P78;

Procesul stopează.
Lunjimea drumului minim dintre x1 şi x8 coincide cu H8=13
Pentru determinarea vârfurilor prin care trece drumul startăm
din ultimul vârf x8
Înainte de x8 este situat x7 fiindcă are loc relaţia H8-H7=13-10=P78
Înainte de x8 este situat şi x6 fiindcă are loc relaţia H8-H6=13-10 =P68
Înainte de x8 este situat şi x5 fiindcă are loc relaţia H8-H5=13-8= P45
Înainte de x8 este situat şi x4 fiindcă are loc relaţia H8-H4=13-6=P48
În top este situat vârful cu cel mai mare indice x7

14
Înainte de x7 este situat x5 fiindcă are loc relaţia H7-H5=10-8= P57
Înainte de x7 este situat şi x3 fiindcă are loc relaţia H7-H3=10-5=P37;
În top este situat vârful cu cel mai mare indice x6
Înainte de x6 este situat x5 fiindcă are loc relaţia H6-H5=10-8=P56
Înainte de x6 este situat x4 fiindcă are loc relaţia H6-H4=10-6=P46
În top este situat vârful cu cel mai mare indice x5
Înainte de x5 este situat x1 fiindcă are loc relaţia H5-H1=8-0=P15
În top este situat vârful cu cel mai mare indice x4
Înainte de x4 este situat x2 fiindcă are loc relaţia H4-H2=6-4=P24
În top este situat vârful cu cel mai mare indice x3
Înainte de x3 este situat x1 fiindcă are loc relaţia H3-H1=5-0=P13
În top este situat vârful cu cel mai mare indice x2
Înainte de x2 este situat x1 fiindcă are loc relaţia H2-H1=4-0=P12
Am obţinut 5 drumuri minime distincte:
d1=(1,3,7,8),
d2=(1,5,8),
d3=(1,5,6,8),
d4=(1,2,4,6,8),
d5=(1,2,4,8).

DRUM MAXIM (Algoritmul Ford)


Algoritmul Ford poate fi aplicat si pentru determinarea
drumului maxim in graful ponderat, daca in graf nu exista
cicluri. Fata de drumul minim exista doar doua modificari:
1) In etichetele initiale in loc de ∞ se introduce (-∞);
2) La calcularea diferentelor Hj – Hi exista cazurile:
a) Hj - Hi < Pij;
b) Hj - Hi = Pij;
c) Hj - Hi > Pij.

15
Cazurile b) si c) nu permit marirea distantei dintre vârful
iniţial şi xj, adica Hj, iar cazul "a" permite marirea distanţei
dintre vârful iniţial şi xj, adica Hj prin modificarea:
Hj = Hi + Pij.

EXEMPLUL 4. Folosind algoritmului lui Ford să se determine


drumul de valoare maximă între vârfurile x1 şi x7 ale grafului din
figura 1.
1 5
X2 X4
4 X6
5 5 3
8
5
X1 6 4
3 X7
2 6
X3 X5

Rezolvare:
I. ;
II. H j = − ;
III. Examinăm toate arcele care iese din vârful x1 :
H2-H1<P12 -∞-0<5  H2=H1+P12=0+5=5
H4-H1<P14 -∞-0<5  H4=H1+P14=0+5=5
H6-H1<P16 -∞-0<8  H6=H1+P16=0+8=8
H5-H1<P15 -∞-0<6  H5=H1+P15=0+6=6
H3-H1<P13 -∞-0<3  H3=H1+P13=0+3=3
(fig. 1.)
Examinăm toate arcele care iese din vârful x2 :
H4-H2<P24 5-5<1  H4=H2+P24=5+1=6
H5-H2<P25 6-5<4  H5=H2+P25=5+4=9
Examinăm toate arcele care iese din vârful x3 :

16
H5-H3>P35 9-3>2  Eticheta la vîrful x5 nu se
schimbă.
Examinăm toate arcele care iese din vârful x4 :
H5-H4=P45 9-6=3  Eticheta la vârful x5 nu se
schimbă.
H6-H4<P46 8-6<5  H6=H4+P46=6+5=11
Examinăm toate arcele care iese din vârful x5 :
H6-H5<P56 11-9<4  H6=H5+P56=9+4=13
H7-H5<P57 -∞-9<6  H7=H5+P57=9+6=15
Examinăm toate arcele care iese din vârful x6 :
H7-H6<P67 15-13<5  H7=H6+P67=13+5=18

Am obtinut rezultatele: H1=0


H2=5
H3=3
H4=6
H5=9
H6=13
H7=18
Alcatuim a doua diferenta:
Examinăm toate arcele care iese din vârful x1 :
H2-H1=P12 5-0=5  H2 nu se schimba
H4-H1>P14 6-0>5  H4 nu se schimba
H6-H1>P16 13-0>8  H6= nu se schimba
H5-H1>P15 9-0>6  H5= nu se schimba
H3-H1=P13 3-0=3  H3= nu se schimba
(fig. 1.)
Examinăm toate arcele care iese din vârful x2 :
H4-H2=P24 6-5=1  H4=H2+P24=5+1=6
H5-H2=P25 9-5=4  H5=H2+P25=5+4=9

17
Examinăm toate arcele care iese din vârful x3 :
H5-H3>P35 9-3>2  Eticheta la vîrful x5 nu se
schimbă.
Examinăm toate arcele care iese din vârful x4 :
H5-H4=P45 9-6=3  Eticheta la vârful x5 nu se
schimbă.
H6-H4>P46 13-6>5  H6= nu se schimba
Examinăm toate arcele care iese din vârful x5 :
H6-H5=P56 13-9=4  H6 nu se schimba
H7-H5>P57 18-9>6  H7= nu se schimba
Examinăm toate arcele care iese din vârful x6 :
H7-H6=P67 18-13=5  H7=H6+P67=13+5=18

1 2 3 4 5 6 7
I 0 -∞ -∞ -∞ -∞ -∞ -∞
II1 5 3 5 6 8 -∞
III2 6 9 -∞
IV3 -∞
V4 11 -∞
VI5 13 15
VII6 18
Fig.3.

l max (1 − 7 ) = 18
IV. Determinăm drumul maxim: , 18-13 = 5
, 13-9 = 4
, 9-6 = 3
, 9-5 = 4
, 6-5 = 1
, 5-0 = 5

18
Drumurile corespunzătoare valorii maxime 18:
1 2 5 6 7

1 2 4 5 6 7

EXEMPLUL 5.
Să se determine pentru graful din figura 4 drumul de valoare maximă
între vârfurile x1 şi x8 conform algoritmului lui Ford.

2 4
2 4

4 2 6
3 4 2
8 3
1 5 7
5
4 3
5 3 8
3 5 7

Fig.4
Rezolvare:
I. H1 = 0 ;
H2=-∞
H3=-∞;
H4=-∞;
H5=-∞;
H6=-∞;
H7=-∞
H8=-∞
Pentru fiecare arc (xi, xj) se calculeza diferenţele dintre
eticheta virfului final si cel initial Hj – Hi si se compara cu
ponderea Pij.

19
Sunt posibile trei cazuri:
a) Hj - Hi < Pij;
b) Hj - Hi = Pij;
c) Hj - Hi > Pij.
Cazurile b) si c) nu permit marirea distantei dintre vârful
iniţial şi xj, adica Hj, iar cazul "a" permite marirea distanţei
dintre vârful iniţial şi xj, adica Hj prin modificarea:
Hj = Hi + Pij.
Rezultatele le introducem in tabel

Arcul Ponder. Prima diferenta A doua diferenta


(xi,xj) Pij Hj-Hi Hj-Hi
(1,2) 4 H2-H1=-∞-0<P12; H2=H1+P12 =0+4=4 H2-H1=4-0=P12;
(1,3) 5 H3-H1=-∞-0<P13;H3=H1+P13 =0+5=5 H3-H1=7-0>P13;
(1,5) 8 H5-H1=-∞-0<P15;H5=H1+P15 =0+8=8 H5-H1=13-0>P15;
(2,3) 3 H3-H2=5-4<P23; H3=H2 +P23=4+3=7 H3-H2=7-4=P23;

(2,4) 2 H4-H2=-∞-4<P24;H4= H2+P24 =4+2=6 H4-H2=9-4>P24;


(3,4) 2 H4-H3=6-7< P34;H4=H3+P34=7+2=9 H4-H3=9-7= P34;
(3,5) 4 H5-H3=8-5< P35; H5 =H3+P35=7+4=11 H5-H3=13-7> P35;
(3,7) 5 H7-H3=-∞-7<P37;H7=H3+P37 =7+5=12 H7-H3=16-7>P37;
(4,5) 4 H5-H4=11-9< P45; H5=H4+P45=9+4=13 H5-H4=13-9= P45;
(4,6) 4 H6-H4=-∞-9<P46;H6=H4+P46 =9+4=13 H6-H4=15-9>P46;
(4,8) 7 H8-H4=-∞-9<P48; H8=H4+P48=9+7=16 H8-H4=19-9>P48;
(5,6) 2 H6-H5=13-13<P56;H6=H5+P56 =13+2=15 H6-H5=15-13=P56;
(5,7) 3 H7-H5=12-13< P57; H7 = H5+P57=13+3=16 H7-H5=16-13= P57
(5,8) 5 H8-H5 =16-13<P58; H8 = H5+P58=13+5=18 H8-H5=19-13> P45
(6,8) 3 H8-H6=18-15=P68; H8 nu se modifica H8-H6=19-15>P68
(7,8) 3 H8-H7=18-16<P78; H8 =H7+ P78=16+3=19 H8-H7=19-16=P78;

Procesul stopează.

20
Lunjimea drumului maxim dintre x1 şi x8 coincide cu H8=19
Pentru determinarea vârfurilor prin care trece drumul startăm
din ultimul vârf x8
Înainte de x8 este situat x7 fiindcă are loc relaţia H8-H7=19-16=P78
În top este situat vârful cu cel mai mare indice x7
Înainte de x7 este situat x5 fiindcă are loc relaţia H7-H5=16-13= P57
În top este situat vârful cu cel mai mare indice x5
Înainte de x5 este situat x4 fiindcă are loc relaţia H5-H4=13-9= P45;

În top este situat vârful cu cel mai mare indice x4


Înainte de x4 este situat x3 fiindcă are loc relaţia H4-H3=9-7= P34
În top este situat vârful cu cel mai mare indice x3
Înainte de x3 este situat x2 fiindcă are loc relaţia H3-H2=7-4=P23
Înainte de x2 este situat x1 fiindcă are loc relaţia H2-H1=4-0=P12;
Am obţinut drumu maxim:
d1=(1,2,3,4,5,7,8),

21
TEMA. Drum minim in graful ponderat.
Algoritmul Bellman-Kalaba pentru
determinarea drumului minim.
Algoritmul Bellman-Calaba permite determinarea
drumului de valoare minimă din orice vârf al grafului (fie xi)
până la un vârf fixat, numit vârf final (xn).
Etapa I. Construim matricea ponderată de adiacenţă a
grafului dat G=(X,U): (fig. 4.)
a) mij = Pij, dacă există arcul (xi, xj) de pondere Pij;
b) mij = ∞, unde ∞ este un număr foarte mare (de tip întreg
maximal pentru calculatorul dat), dacă arcul (xi, xj) este lipsă;
(  reprezintă lungimea unui drum arbitrar de la vârful xi până la
vârful x j );
c) mij = 0, dacă i = j.
Practic incepem cu introducerea zerourilor pe diagonala
principala.
Etapa a II-a. Elaborăm in linia (n+1) un vector V0 în felul
următor:
a) Vi 0 = Pin , dacă există arcul (xi, xn), unde xn este vârful
final pentru care se caută drumul minim, Pin este ponderea
acestui arc;
b) Vi 0 =  , dacă arcul (xi, xn) este lipsă;
c) Vi 0 = 0 , dacă i =n.
Practic aceasta inseana sa transpinem in linia (n+1) valorile
din coloana a n-a.

22
Etapa a III-a.
Calculăm iterativ vectorul V k în conformitate cu
următorul procedeu:
, unde
i = 1,2,..., n − 1, j = 1,2,..., n; i  j
Vnk = 0 .
Dacă V k = V k −1 - STOP.
Componenta cu numărul i a vectorului Vi k cu valoarea diferită de
zero ne va da valoarea minimă a drumului dintre vârfurile xi şi xn .
Etapa a IV-a. Determinăm drumul de la vârful xi până la
vârful xn , care corespunde valorii minime conform regulei:
  dupa xi urmeaza . Si
asa mai departe pina agungem la .

EXEMPLUL 1.
Să se determine pentru graful din figura 1 drumul de valoare
minimă între vârfurile x1 şi x7 conform algoritmului lui Bellman-
Kalaba in graful:

1 5
X2 X4
4 X6
5 5 3
8
5
X1 6 4
3 X7
2 6
X3 X5

Fig.1

23
1 2 3 4 5 6 7
1 0 5 3 5 6 8 
2  0  1 4  
3   0  2  
4    0 3 5 
5     0 4 6
6      0 5
7       0
V 0
    6 5 0
(i )
V 1
12 10 8 9 6 5 0
(i )
V(i2) 11 10 8 9 6 5 0

V(i3) 11 10 8 9 6 5 0

Fig. 2.

Construim primele 7 linii ale matricei ponderate de adiacenta.


In linia a 8-a intrdoducem valorile din coloana a 7-a, obtinind
vectorul V(i0) .
In linia a 9-a construim vectorul V(1i ) conform etapei a 3-a
cu componentele V(1i ) :


V(11) = min L12 + V20 , L13 + V30 , L14 + V40 , L15 + V50 , L16 + V60 , L17 + V70 = 
= min 5 + ,3 + ,5 + ,6 + 6,8 + 5,  + 0 = 12

V = min L21 + V10 , L23 + V30 , L24 + V40 , L25 + V50 , L26 + V60 , L27 + V70 =
1
(2 ) 
= min  + ,  + ,1 + ,4 + 6,  + 5,  + 0 = 10
 
V = min L31 + V10 , L32 + V20 , L34 + V40 , L35 + V50 , L36 + V60 , L37 + V70 =
1
(3)
= min  + ,  + ,  + ,2 + 6,  + 5,  + 0 = 8
V( ) = min L + V , L + V , L + V , L + V , L + V , L + V  =
1
4 41 1
0
42 2
0
43 3
0
45 5
0
46 6
0
47 7
0

= min  + ,  + ,  + ,3 + 6,5 + 5,  + 0 = 9

24
 
V(15) = min L51 + V10 , L52 + V20 , L53 + V30 , L54 + V40 , L56 + V60 , L57 + V70 =
= min  + ,  + ,  + ,  + ,4 + 5,6 + 0 = 6
V( ) = min L + V , L + V , L + V , L + V , L + V , L + V  =
1
6 61 1
0
62 2
0
63 3
0
64 4
0
65 5
0
67 7
0

= min  + ,  + ,  + ,  + ,  + 6,5 + 0 = 5
 
V(12) = min L12 + V21 , L13 + V31 , L14 + V41 , L15 + V51 , L16 + V61 , L17 + V71 =
= min 5 + 10,3 + 8,5 + 9,6 + 6,8 + 5,  + 0 = 11
In linia a 10-a construim vectorul V(i2) conform etapei a 3-a
cu componentele V(i2) :
 
V(22) = min L21 + V11 , L23 + V31 , L24 + V41 , L25 + V51 , L26 + V61 , L27 + V71 =
= min  + 12,  + 8,1 + 9,4 + 6,  + 5,  + 0 = 10
V( ) = min L + V , L + V , L + V , L + V , L + V , L + V =
2
3 31 1
1
32
1
2 34
1
4 35 5
1
36
1
6 37
1
7

= min  + 12,  + 10,  + 9,2 + 6,  + 5,  + 0 = 8


V( ) = min L + V , L + V , L + V , L + V , L + V , L + V =
2
4 41 1
1
42
1
2 43 3
1
45 5
1
46
1
6 47
1
7

= min  + 12,  + 10,  + 8,3 + 6,5 + 5,  + 0 = 9


V( ) = min L + V , L + V , L + V , L + V , L + V , L + V =
2
5 51 1
1
52
1
2 53 3
1
54
1
4 56
1
6 57
1
7

= min  + 12,  + 10,  + 8,  + 9,4 + 5,6 + 0 = 6


V( ) = min L + V , L + V , L + V , L + V , L + V , L + V =
2
6 61 1
1
62
1
2 63 3
1
64
1
4 65 5
1
67
1
7

= min  + 12,  + 10,  + 8,  + 9,  + 6,5 + 0 = 5


In linia a 11-a construim vectorul V(i3) conform etapei a 3-a
cu componentele V(i3) :
 
V(13) = min L12 + V22 , L13 + V32 , L14 + V42 , L15 + V52 , L16 + V62 , L17 + V72 =
= min 5 + 10,3 + 8,5 + 9,6 + 6,8 + 5,  + 0 = 11

V = min L21 + V12 , L23 + V32 , L24 + V42 , L25 + V52 , L26 + V62 , L27 + V72 =
3
(2 ) 
= min  + 11,  + 8,1 + 9,4 + 6,  + 5,  + 0 = 10

V = min L31 + V12 , L32 + V22 , L34 + V42 , L35 + V52 , L36 + V63 , L37 + V73 =
3
(3) 

25
= min  + 11,  + 10,  + 9,2 + 6,  + 5,  + 0 = 8
V 3
(4 )  
= min L41 + V12 , L42 + V22 , L43 + V32 , L45 + V52 , L46 + V63 , L47 + V73 =
= min  + 11,  + 10,  + 8,3 + 6,5 + 5,  + 0 = 9
V( ) = min L + V , L + V , L + V , L + V , L + V , L + V  =
3
5 51 1
2
52 2
2
53 3
2
54 4
2
56 6
3
57 7
3

= min  + 11,  + 10,  + 8,  + 9,4 + 5,6 + 0 = 6


V( ) = min L + V , L + V , L + V , L + V , L + V , L + V  =
3
6 61 1
2
62 2
2
63 3
2
64 4
2
65 5
3
67 7
3

= min  + 11,  + 10,  + 8,  + 9,  + 6,5 + 0 = 5


Observăm că am ajuns la Vi 3 = Vi 2 - STOP (fig.1.)

1 2 3 4 5 6 7
1 0 5 3 5 6 8 
2  0  1 4  
3   0  2  
4    0 3 5 
5     0 4 6
6      0 5
7       0
V 0
    6 5 0
(i )
V 1
12 10 8 9 6 5 0
(i )
V(i2) 11 10 8 9 6 5 0

V(i3) 11 10 8 9 6 5 0

Fig. 1.

lmin (1 − 7) = V(13) = 11
Determinăm drumul de valoare minimă:
L13 = V1 − V3  L35 = V3 − V5  L57 = V5 − V7 
3 = 11 - 8 2=8–6 6=6–0

Drumul corespunzător valorii minime 11: 1 3 5 7

26
EXEMPLUL 2.
Să se determine drumul de valoare minimă între vârfurile x1 şi
conform algoritmului lui Bellman-Kalaba in graful:

2 4
2 4

4 2 6
3 4 2
8 3
1 5 7
5
4 3
5 3 8
3 5 7

Rezolvare

1 2 3 4 5 6 7 8
1 0 4 5  8   
2  0 3 2    
3   0 2 4  5 
4    0 4 4  7
5     0 2 3 5
6      0  3
7       0 3
8        0
V(i0)    7 5 3 3 0

V(1i ) 13 9 8 7 5 3 3 0

V(i2) 13 9 8 7 5 3 3 0

27
-a12= ⇒ x1 →x2
13-4=9
-a13= ⇒ x1 →x3
13-5=8
-a15= ⇒ x1 →x5
13-8=5
- a24 = ⇒ x2 →x4

– a37 = ⇒ x3 →x7

-a46= ⇒ x4 →x6

-a48= ⇒ x4 →x8

- a56= ⇒ x5 →x6

-a58= ⇒ x5 →x8

-a68= ⇒ x6 →x8

- a78= ⇒ x7 →x8

Am obţinut 5 drumuri minime distincte:


d1=(1,3,7,8),
d2=(1,5,8),
d3=(1,5,6,8),
d4=(1,2,4,6,8),
d5=(1,2,4,8).
Rezultatele confirmă rezultatele obţinute prin metoda Ford.

28
DRUMUL MAXIM.ALGORITMUL BELLMAN-KALABA(B-K)

Algoritmul B-K poate fi utilizat si pentru determinarea drumului


maxim in graful ponderat aplicind urmatoarele doua modificari fata de
determinarea drumului minim:
1)La etapa I , punctul b) mij = -∞, unde -∞ este un număr foarte
mic (de tip întreg minimal pentru calculatorul dat), dacă arcul (xi, xj)
este lipsă; (-  reprezintă lungimea unui drum arbitrar de la vârful
xi până la vârful x j );
2) La etapa III , unde
i = 1,2,..., n − 1, j = 1,2,..., n; i  j
Vnk = 0 .
Dacă V k = V k −1 - STOP.

EXEMPLUL1.

Pentru graful din figura 1 să se determine drumul de valoare


maximă între vârfurile x1 şi x7 folosind algoritmul Bellman-
Calaba.
Rezolvare:
Etapa I. Construim matricea ponderată de adiacenţă a
grafului dat G=(X,U):
a) mij = Lij, dacă există arcul (xi, xj) de pondere Lij;
b) mij = -∞, dacă arcul (xi, xj) este lipsă;

29
c) mij = 0, dacă i = j.
Etapa a II-a. Elaborăm un vector V0 în felul următor:
a) Vi 0 = Lin , dacă există arcul (xi, xn), unde xn este vârful
final pentru care se caută drumul maxim, Lin este ponderea
acestui arc;
b) Vi 0 = − , dacă arcul (xi, xn) este lipsă;
c) Vi 0 = 0 , dacă i =n.
Practic aceasta inseana sa transpinem in linia (n+1) valorile
din coloana a n-a.
Etapa a III-a. Calculăm iterativ vectorul V
în conformitate cu următorul procedeu:
, unde
i = 1,2,..., n − 1, j = 1,2,..., n; i  j
Vnk = 0 .
Dacă V k = V k −1 - STOP (fig. 3.12)
Componenta cu numărul i a vectorului Vi k cu valoarea diferită de
zero ne va da valoarea maximă a drumului dintre vârfurile xi şi xn .
Etapa a IV-a. Determinăm drumul de la vârful xi până la
vârful xn , care corespunde valorii maxime:
 (fig. 3)
lmax (1 − 7 ) = 18
Determinăm drumul de valoare maximă:
L12 = V1 − V2 L24 = V2 − V4 L25 = V2 − V5
L45 = V4 − V5
5 = 18 - 13 1 = 13 – 12 4 = 13 – 9 3 = 12 – 9
L56 = V5 − V6 L67 = V6 − V7
4=9–5 5=5–0

30
1 2 3 4 5 6 7
1 0 5 3 5 6 8 -
2 - 0 - 1 4 - -
3 - - 0 - 2 - -
4 - - - 0 3 5 -
5 - - - - 0 4 6
6 - - - - - 0 5
7 - - - - - - 0
V(i0) - - - - 6 5 0

V 1
13 10 8 10 9 5 0
(i )
V(i2) 15 13 11 12 9 5 0

V(i3) 18 13 11 12 9 5 0

V(i4) 18 13 11 12 9 5 0

Fig. 3
Drumurile corespunzătoare valorii maxime 18:
1 2 5 6 7

1 2 4 5 6 7

EXEMPLUL 2.

31
Să se determine drumul de valoare maximă între vârfurile x1 şi
conform algoritmului lui Bellman-Kalaba in graful:

2 4
2 4

4 2 6
3 4 2
8 3
1 5 7
5
4 3
5 3 8
3 5 7

Rezolvare
6 7 8
1 2 3 4 5
1 0 4 5 - 8 - - -
2 - 0 3 2 - - - -
3 - - 0 2 4  5 -
4 - - - 0 4 4 - 7
5 - - - - 0 2 3 5
6 - - - - - 0 - 3
7 - - - - - - 0 3
8 - - - - - - - 0
V(i0) - - - 7 5 3 3 0

V 1
13 9 9 9 6 3 3 0
(i )
V(i2) 14 12 11 10 6 3 3 0

16 14 12 10 6 3 3 0

18 15 12 10 6 3 3 0

19 15 12 10 6 3 3 0

19 15 12 10 6 3 3 0

STOP

32
Determinam drumurile concrete:
-P12 =19-4=15=V26 ⇒ x1 →x2
V2 -P23 =15-3=12=V26 ⇒ x2 →x3
6

V36-P34 = 12-2=10= V46 ⇒ x3 →x4


V46-P45 = 10-4= 6 = V56 ⇒ x4 →x5
V56-P57= 6-3 = 3 = V76 ⇒ x5 →x7
V76 -P78= 3-3 = 0 = V86 ⇒ x7 →x8

Deci, am obtinut un singur drum maxim:


x1 →x2 →x3 →x4 →x5 →x7 →x8

33

S-ar putea să vă placă și