Documente Academic
Documente Profesional
Documente Cultură
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
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ă.
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
5
H7-H6=11-8< L67 =5 Eticheta la vârful x7 nu se schimbă.
STOP
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
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ă.
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
9
H3-H2=5-4< P23 =3 Eticheta H5 la vârful x5 nu se schimbă.
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
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);
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).
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.
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
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
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;
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.
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
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
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
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
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
28
DRUMUL MAXIM.ALGORITMUL BELLMAN-KALABA(B-K)
EXEMPLUL1.
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
33