Académique Documents
Professionnel Documents
Culture Documents
Obiective urmrite:
Rezumat:
Cuvinte cheie:
Graf cu arce valorizate, drum de lungime minim, drum de valoare minim, drum de valoare
maxim, algoritmul lui Ford, principiul optimalitii, algoritmul lui Bellman-Kalaba,
algoritmul matriceal.
Timp de studiu:
76
LECIA 6 - GRAFURI CU ARCE VALORIZATE. DRUM DE LUNGIME MINIM
( )
Fiecrui arc u = xi , x j U i se ataeaz un numr nenegativ, notat cu l ( u ) sau
( )
l xi , x j , care se va numi valoarea arcului u. Definim valoarea drumului
( )
= xi1 , xi2 ,..., xik ca fiind suma valorilor arcelor care-l compun, deci
77
k 1
l ( ) = l ( xi , xi )
r r +1
(3.1.1)
r =1
Vom studia algoritmi pentru determinarea drumurilor optime (drumuri de valoare
maxim sau de valoare minim) ntre dou vrfuri ale grafului.
Deoarece ntr-un graf cu circuite pot exista drumuri de valoare orict de mare (obinute
prin parcurgerea repetat a unui circuit), drumuri de valoare maxim se caut, de regul, n
grafuri fr circuite. Drumuri de valoare minim se caut i n grafuri care au circuite.
Observaia 3.1.2
Drumul de valoare minim ntre dou vrfuri ale unui graf este un drum elementar (nu
conine un circuit ca subdrum).
Exemplu
(
Fie drumul = xi ,..., xk ,..., xl ,..., x j )
Fig. 3.1.2
( )
subdrumul = xi ,..., xk ,..., x j , care are valoare mai mic dect drumul , n ipoteza
real de altfel, c circuitul ( xk ,..., xl ,..., xk ) are cel puin un arc de valoare nenul.
Propoziia 3.1.3
Orice subdrum al unui drum optim este, de asemenea, un drum optim.
Demonstraie
(
Fie drumul dintre nodurile x i y definit prin: = x,..., xi ,..., x j ,..., xl ,..., y ) de
valoare optim (maxim sau minim) ntr-un graf:
Fig. 3.1.3
78
Atunci subdrumul = xi , x j ,..., xl( ) este drum de valoare optim (maxim sau
minim) de la xi la xl .
ntr-adevr, presupunnd c ( ) alt subdrum, de exemplu, = ( xi , xk ,..., xl ) ntre
xi i xl de valoare mai mare (pentru cazul de maxim) sau mai mic (pentru cazul de minim)
dect , atunci drumul 1 = ( x,..., xi , xk ,..., xl ,..., y ) ar fi un drum de valoare mai mare
(pentru cazul de maxim), respectiv de valoare mai mic (pentru cazul de minim), de la x la y,
dect drumul , presupus a fi optim (de valoare maxim sau minim) ntre nodurile x i y,
contradicie cu ipoteza. Rezult c presupunerea fcut este fals i demonstraia este
ncheiat.
( x( m 2)
, x(
m 1)
) U . tim c acest lucru este realizabil, cci aceast operaie, de ntoarcere
de la y la x urmeaz operaiei de marcare, de la x la y;
( 0)
3 Se procedeaz similar pn cnd se ajunge la vrful x = x.
Drumul cutat va fi: = x, x ( (1)
,x ( 2)
)
,..., y .
Din descrierea algoritmului rezult urmtoarele dou concluzii:
1 drumul de lungime minim de la x la y nu este n mod necesar unic;
2 dac ( ) astfel de drumuri, atunci se pot determina toate.
79
Exemplu
Fie graful G = ( X , ) , X = { x1 , x2 ,..., x9 } , avnd urmtoarea reprezentare sagital:
Fig. 3.2.1
( )
1 arcul xi , x j U i xi a fost marcat cu cifra 2;
2 vrful x j este nemarcat.
Aceste vrfuri sunt x7 i x8 .
Vrful x9 va fi marcat cu 4; deci lungimea minim a drumurilor de la x1 la x9 este
de 4 uniti. S determinm, acum, un drum de lungime minim de la x1 la x9 .
Reprezentm nti vrful x9 , marcat cu cifra 4;
80
Fig. 3.2.2
81
LECIA 7
3.3 Algoritmul lui Ford pentru determinarea drumurilor de valoare minim ntre
dou vrfuri ale unui graf
Fie graful G = ( X ,U ) cu arce valorizate i x, y X dou vrfuri ale sale.
Presupunem c ne intereseaz un drum de valoare minim ntre vrfurile x i y ale garfului G.
Pentru simplificarea expunerii, dac X are n + 1 elemente, putem numerota (renumerota)
vrfurile, astfel nct x0 = x i xn = y . Deci, X = { x0 , x1,..., xn } i ne intereseaz drumul
de valoare minim ntre x0 i xn . Facem convenia c dac ntre dou vrfuri nu exist nici
un drum, se ia ca valoare minim ntre cele dou vrfuri, valoarea + .
Admitem c pentru orice i = 1,2,..., n dispunem de un drum arbitrar de la x0 la xi
(dac astfel de drumuri exist, ele se pot depista prin procedeul descris la determinarea
drumului de lungime minim ntre dou vrfuri dintr-un graf).
Notm valoarea drumului de la x0 la xi cu i , i = 1,2,..., n ; 0 = 0 . Dac nu
exist nici un drum de la x0 la xi , se ia i = + .
Are loc urmtorul rezultat esenial n stabilirea algoritmului.
Teorema 3.3.1
Condiia necesar i suficient pentru ca i s fie minimul valorilor drumurilor de la
( )
x0 la xi , oricare ar fi i = 1,2,..., n , este ca pentru orice xk , x j U , s aib loc relaia:
j k l ( xk , x j ) (3.3.1)
j k > l ( xk , x j ) (3.3.2)
82
Fig. 3.3.1
(
Dac j = x0 , x j ,..., x j
1 ) este drumul de la x0 la x j de valoare j i
k = ( x0 , xk ,..., xk ) este drumul de la x0 la xk de valoare k , atunci drumul
1
Dac ns relaiile (3.3.1) sunt verificate pentru orice arc ( xk , x j ) , atunci i este
valoarea minim a drumurilor de la x0 la xi , ( ) i = 1,2,.., n . ntr-adevr, dac
= ( x0 , xi1 , xi2 ,..., xik , xi ) este un drum oarecare de la de la x0 la xi , atunci conform cu
relaia 1, avem:
i1 0 l ( x0 , xi1 ) ( j = i1, k = 0 )
i2 i1 l ( xi1 , xi2 ) ( j = i2 , k = i1 )
.........................................................
i ik l ( xik , xi ) ( j = i, k = ik )
Prin nsumarea relaiilor i cu 0 = 0 , rezult:
i l ( ) (3.3.3)
Artm acum c dac i sunt valorile optime, atunci vrfurile consecutive ale unui
drum optim de la x0 la xi verific relaiile 1 cu semnul =.
(
Dac = x0 ,..., xk , x j ,..., xi ) este drum de valoare minim de la x0 la xi atunci
subdrumul = ( x0 ,..., xk , x j ) este drum de valoare minim de la x0 la x j iar
= ( x0 ,..., xk ) , este drum de valoare minim de la x0 la xk i deci avem: l ( ) = j ;
l ( ) = k . Pe de alt parte, avem c:
l ( ) = l ( ) + l ( xk , x j ) j k = l ( xk , x j ) (3.3.4)
83
b) Etapa ( k + 1) : pentru orice arc ( xi , x j ) calculm diferena (jk ) (i k ) i o
( )
comparm cu valoarea arcului xi , x j . Poate aprea una din situaiile.
b ) ( ) un arc (mai multe) ( xi , x j ) astfel nct
1
( ) ( )
jk i k > l ( xi , x j ) (3.3.5)
( k +1)
Dac pentru un anumit j exist mai muli indici i care verific (3.3.5), lum j
(k )
( )
egal cu cea mai mic valoare dintre valorile i + l xi , x j corespunztoare.
Dac pentru un anumit indice j nu exist nici un indice i care verific relaia (3.3.5):
( ) ( )
jk i k > l ( xi , x j ) atunci vom lua:
( ) ( )
jk +1 = jk (3.3.7)
( )
b2) Pentru orice arc xi , x j U , avem:
( ) ( )
jk i k l ( xi , x j ) (3.3.8)
(k )
n acest caz valorile i = i , i = 0,1,2,..., n , reprezint valorile optime ale
drumurilor de la x0 la xi i trecem la depistarea drumului optim care ne intereseaz.
( )
Dac drumul optim de la x0 la xn este x0 ,..., xi , x j , xn , determinm mai nti x j ,
apoi xi , .a.m.d. astfel:
cutm printre relaiile (3.3.1) satisfcute cu semnul = n ultima etap, vrful x j
care verific relaia
n j = l ( x j , xn ) (3.3.9)
odat determinat x j , se caut printre egalitile (3.3.1) din ultima etap vrful xi
pentru care:
j i = l ( xi , x j ) ,etc. (3.3.10)
Exemplul 1
S se determine drumul de valoare minim de la x0 la x6 , n graful din figura
urmtoare:
84
Fig. 3.4.1
Etapa 0
( )
00 = 0 ;
( )
10 = l ( x0 , x1 ) = 2 ;
( )
20 = l ( x0 , x1, x2 ) = 14 ; l ( x0 , x3 , x2 ) = 15 > 14 ;
( )
30 = l ( x0 , x3 ) = 4 ; l ( x0 , x1, x3 ) = 3 < 4 ;
( ) l ( x0 , x3 , x4 ) = 6 > 5;
40 = l ( x0 , x4 ) = 5 ;
l ( x0 , x1, x4 ) = 5;
( )
50 = l ( x0 , x4 , x5 ) = 8 ; l ( x0 , x3 , x5 ) = 8 ;
l ( x0 , x3 , x5 , x6 ) = 15;
l ( x0 , x4 , x5 , x6 ) = 15;
( )
60 = l ( x0 , x3 , x6 ) = 15 ; l ( x0 , x1, x2 , x6 ) = 16 > 15;
l ( x0 , x1, x3 , x6 ) = 14;
l ( x , x , x , x , x ) = 12.
0 4 5 2 6
Observaie
( 0)
n etapa 0, fiecrui vrf xi i se ataeaz o valoare i , care reprezint valoarea
( 0)
unui drum de la x0 la xi , i = 1, n , 0 = 0 , fr ns a avea grij ca un astfel de drum, ntre
x0 i xi , s fie valoare minim dintre toate drumurile posibile ntre cele dou vrfuri.
85
( )
Etapa 1. ( k + 1 , pentru k = 0 ). Pentru fiecare arc xi , x j U , vom face diferena
( ) ( )
j0 i 0 i o vom compara cu l ( xi , x j ) . n prima coloan scriem toate arcele grafului,
ncepnd de la x6 pn la x0 .
Vrful x6 :
( x5 , x6 ) : (60 ) (50 ) = 7 = l ( x5 , x6 ) ;
(0) ( 0)
( x3 , x6 ) : 6 3 = 11 = l ( x3 , x6 ) ;
( 0) (0)
( x2 , x6 ) : 6 2 = 1 < l ( x2 , x6 ) = 2;
Vrful x5 :
( x4 , x5 ) : (50 ) (40 ) = 3 = l ( x4 , x5 ) ;
( 0) ( 0)
( x3 , x5 ) : 5 3 = 4 = l ( x3 , x5 ) ;
Vrful x4 :
( 0) ( 0)
( x3 , x4 ) : 4 3 = 1 < l ( x3 , x4 ) = 2;
( 0) ( 0)
( x0 , x7 ) : 4 0 = 5 = l ( x0 , x4 ) ;
Vrful x3 :
( x2 , x3 ) : (30 ) (20 ) = 10 < l ( x2 , x3 ) = 4;
( 0) ( 0)
( x1, x3 ) : 3 1 = 2 > l ( x1, x3 ) = 1; ( )
( 0) ( 0)
( x0 , x3 ) : 3 0 = 4 = l ( x0 , x3 ) ;
Vrful x2 :
( x5 , x2 ) : (20 ) 5( 0 ) = 6 > l ( x5 , x2 ) = 2; ( )
( 0) ( 0)
( x3 , x2 ) : 2 3 = 10 < l ( x3 , x2 ) = 11;
( 0) (0)
( x1, x2 ) : 2 1 = 12 = l ( x1, x2 ) ;
Vrful x1 :
{( x , x ) :
0 1
( 0)
1
( )
00 = 2 = l ( x0 , x1 ) .
n etapa 1 am depistat dou cazuri n care are loc relaia (3.3.5):
( ) ( )
jk i k > l ( xi , x j ) , k = 0
i doar n aceste cazuri dou cazuri este posibil mbuntirea (n sensul micorrii) valorilor
( k +1)
pentru j , prin relaia:
86
( ) ( )
jk +1 = i k + l ( xi , x j ) , k = 0 (punctul b1) din algoritm).
Pentru etapa urmtoare vom lua:
( ) ( )
31 = 10 + l ( x1, x3 ) = 2 + 1 = 3 ;
( ) ( )
21 = 50 + l ( x5 , x2 ) = 8 + 2 = 10 ;
( ) ( )
j1 = j0 pentru toi indicii j 2 , j 3 .
( )
Etapa 2. ( k + 1 , pentru k = 1 ). Actualizm toate valorile pentru j1 ,
j = 0,1, 2,...,6 :
(1) (1) (1) (1)
0 = 0; 1 = 2; 2 = 10 ( ) ; 3 = 3 ( ) ;
(1) (1) (1)
4 = 5; 5 = 8; 6 = 15.
(1) (1)
Comparm diferenele j i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) U :
Vrful x6 :
(61) 5(1) = 15 8 = 7 = l ( x5 , x6 ) ;
(1) (1)
6 3 = 15 3 = 12 > l ( x3 , x6 ) = 11; ( )
(1) (1)
6 2 = 15 10 = 5 > l ( x2 , x6 ) = 2; ( )
Vrful x5 :
5(1) (41) = 8 5 = 3 = l ( x4 , x5 ) ;
(1) (1)
5 3 = 8 3 = 5 > l ( x3 , x5 ) = 4; ( )
Vrful x4 :
(41) (31) = 5 3 = 2 = l ( x3 , x4 ) ;
(1) (1)
4 0 = 5 0 = 5 = l ( x0 , x4 ) ;
Vrful x3 :
3(1) (21) = 3 10 = 7 < l ( x2 , x3 ) = 4;
(1) (1)
3 1 = 3 2 = l ( x1, x3 ) ;
(1) (1)
3 0 = 3 0 = 3 < l ( x0 , x3 ) = 4;
Vrful x2 :
87
(21) 5(1) = 10 8 = 2 = l ( x5 , x2 ) ;
(1) (1)
2 3 = 10 3 = 7 < l ( x3 , x2 ) = 11;
(1) (1)
2 1 = 10 2 = 8 < l ( x1, x2 ) = 12;
Vrful x1 :
{ (1)
1
( )
01 = 2 0 = 2 = l ( x0 , x1 ) .
(k ) ( )
Relaia (3.3.5): j i k > l ( xi , x j ) , k = 1 , are loc n trei situaii, marcate cu (*).
(1) (1) (1)
Pot fi mbuntite valorile 6 (n dou cazuri) i 5 . Pentru 6 avem:
( ) ( ) ( ) ( )
62 = 31 + l ( x3 , x6 ) = 3 + 11 = 14 sau 62 = 21 + l ( x2 , x6 ) = 10 + 2 = 12 .
Deoarece cutm un drum de valoare minim, vom alege valoare mai mic:
( )
62 = 12 .
( 2) ( 2) ( ) ( )
Pentru 5 vom avea: 5 = 31 + l ( x3 , x5 ) = 3 + 4 = 7 , deci 52 = 7 .
( 2) ( )
n rest, pentru toi indicii j 5,6 , vom avea: 5 = j1 .
( )
Etapa 3. ( k + 1 , pentru k = 2 ). Actualizm toate valorile pentru j2 ,
j = 0,1, 2,...,6 :
( 2) ( 2) ( 2) ( 2)
0 = 0; 1 = 2; 2 = 10; 3 = 3;
( 2) ( 2) ( 2)
4 = 5; 5 = 7; 6 = 12.
( 2) ( 2)
Comparm diferenele j i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) U :
Vrful x6 :
(62 ) 5( 2 ) = 12 7 = 5 < l ( x5 , x6 ) = 7;
( 2) ( 2)
6 3 = 12 3 = 9 < l ( x3 , x6 ) = 11;
( 2) ( 2)
6 2 = 12 10 = 2 = l ( x2 , x6 ) ;
Vrful x5 :
5( 2 ) (42 ) = 7 5 = 2 < l ( x4 , x5 ) = 3;
( 2) ( 2)
5 3 = 7 3 = 4 = l ( x3 , x5 ) ;
Vrful x4 :
(42 ) (32 ) = 5 3 = 2 = l ( x3 , x4 ) ;
( 2) ( 2)
4 0 = 5 0 = 5 = l ( x0 , x4 ) ;
Vrful x3 :
88
3( 2 ) (22 ) = 3 10 = 7 < l ( x2 , x3 ) = 4;
( 2) (2)
3 1 = 3 2 = 1 = l ( x1, x3 ) ;
( 2) (2)
3 0 = 3 0 = 3 < l ( x0 , x3 ) = 4;
Vrful x2 :
(22 ) 5( 2 ) = 10 7 = 3 > l ( x5 , x2 ) = 2; ( )
( 2) ( 2)
2 3 = 10 3 = 7 < l ( x3 , x2 ) = 11;
( 2) ( 2)
2 1 = 10 2 = 8 < l ( x1, x2 ) = 12;
Vrful x1 :
{ ( 2)
1
( )
02 = 2 0 = 2 = l ( x0 , x1 ) .
( 2)
n aceast etap singura valoare care se mbuntete este 2 , astfel c pentru etapa
( 3) ( 2)
urmtoare ( k = 3) vom lua: 2 = 5 + l ( x5 , x2 ) = 7 + 2 = 9 .
( 3) ( 2)
n rest, pentru j 2 vom avea: j = j .
( 3)
Etapa 4. ( k + 1 , pentru k = 3 ). Actualizm valorile pentru j , j = 0,1, 2,...,6
( 3) ( 3) ( 3) ( 3)
0 = 0; 1 = 2; 2 = 9; 3 = 3;
( 3) ( 3) ( 3)
4 = 5; 5 = 7; 6 = 12.
( 3) ( 3)
Comparm diferenele j i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) U .
Obinem urmtoarele valori:
Vrful x6 :
(63) 5( 3) = 12 7 = 5 < l ( x5 , x6 ) = 7;
( 3) ( 3)
6 3 = 12 3 = 9 < l ( x3 , x6 ) = 11;
( 3) ( 3)
6 2 = 12 9 = 3 > l ( x2 , x6 ) = 2; ( )
Vrful x5 :
5( 3) (43) = 7 5 = 2 < l ( x4 , x5 ) = 3;
( 3) ( 3)
5 3 = 7 3 = 4 < l ( x3 , x5 ) = 4;
Vrful x4 :
89
(43) (33) = 5 3 = 2 = l ( x3 , x4 ) ;
( 3) ( 3)
4 0 = 5 0 = 5 = l ( x0 , x4 ) ;
Vrful x3 :
3( 3) (23) = 3 9 = 6 < l ( x2 , x3 ) = 4;
( 3) ( 3)
3 1 = 3 2 = 1 = l ( x1, x3 ) ;
( 3) ( 3)
3 0 = 3 0 = 3 < l ( x0 , x3 ) = 4;
Vrful x2 :
(23) 5( 3) = 9 7 = 2 = l ( x5 , x2 ) ;
( 3) ( 3)
2 3 = 9 3 = 6 < l ( x3 , x2 ) = 11;
( 3) ( 3)
2 1 = 9 2 = 7 < l ( x1, x2 ) = 12;
Vrful x1 :
{ ( 3)
1
( )
03 = 2 0 = 2 = l ( x0 , x1 ) .
( 3)
Singura valoare care se mbuntete este 6 i pentru etapa urmtoare vom lua:
( ) ( )
64 = 23 + l ( x2 , x6 ) = 9 + 2 = 11 . n rest, pentru toi indicii j 6 vom lua:
( ) ( )
j4 = j3 .
( )
Etapa 5. ( k +1, pentru k = 4 ). Actualizarea valorilor pentru j4 :
( 4) ( 4) ( 4) ( 4)
0 = 0; 1 = 2; 2 = 9; 3 = 3;
( 4) ( 4) ( 4)
4 = 5; 5 = 7; 6 = 11.
( 4) ( 4)
Comparm diferenele j i cu l ( xi , x j ) pentru toate arcele ( xi , x j ) U :
Vrful x6 :
(64 ) 5( 4 ) = 11 7 = 4 < l ( x5 , x6 ) = 7;
( 4) ( 4)
6 3 = 11 3 = 8 < l ( x3 , x6 ) = 11;
( 4) ( 4)
6 2 = 11 9 = 2 = l ( x2 , x6 ) ; ( )
Vrful x5 :
5( 4 ) (44 ) = 7 5 = 2 < l ( x4 , x5 ) = 3;
( 4) ( 4)
5 3 = 7 3 = 4 = l ( x3 , x5 ) ; ( )
Vrful x4 :
90
(44 ) 3( 4 ) = 5 3 = 2 = l ( x3 , x4 ) ; ( )
( 4) ( 4)
4 0 = 5 0 = 5 = l ( x0 , x4 ) ; ( )
Vrful x3 :
3( 4 ) (24 ) = 3 9 = 6 < l ( x2 , x3 ) = 4;
( 4) (4)
3 1 = 3 2 = 1 = l ( x1, x3 ) ; ( )
( 4) (4)
3 0 = 3 0 = 3 < l ( x0 , x3 ) = 4;
Vrful x2 :
(24 ) 5( 4 ) = 9 7 = 2 = l ( x5 , x2 ) ; ( )
( 4) ( 4)
2 3 = 9 3 = 6 < l ( x3 , x2 ) = 11;
( 4) ( 4)
2 1 = 9 2 = 7 < l ( x1, x2 ) = 12;
Vrful x1 :
{ ( 4)
1
( )
04 = 2 0 = 2 = l ( x0 , x1 ). ( )
Constatm c la sfritul etapei a 5-a, n toate relaiile obinute nu mai apare semnul
( 4)
>, deci, conform teoremei demonstrate anterior, valorile i = 1 , i = 0,1, 2,...,6 , sunt
valorile optime.
Etapa final a algoritmului presupune determinarea drumului optim (de valoare
minim), de la x6 la x0 . n ultima etap am marcat cu (*) toate relaiile (3.3.1) satisfcute cu
semnul =. Dac notm cu i penultimul vrf al acestui drum, atunci indicele i verific
ecuaia: 6 i = l ( xi , x6 ) (a se vedea relaia nr. 3.3.9). Vom cuta printre egalitile (*) din
relaiile scrise n ultima etap i care corespund vrfului x6 , indicele sau indicii i care verific
aceast relaie tip egalitate. Rezult i = 2 . Deci, pe drumul optim de la x0 la x6 , ultimul arc este
( x2 , x6 ) .
Fie acum xi vrful care-l precede pe x2 pe drumul optim. Trebuie s avem, conform
relaiei (3.3.10), ndeplinit 2 i = l ( xi , x2 ) . Cutm la relaiile
condiia:
corespunztoare vrfului x2 i gsim: 2 5 = 2 = l ( x5 , x2 ) . Deci x5 l precede pe x2
pe drumul optim. Mai departe:
5 i = l ( xi , x5 ) i = 3;
Rezult:
5 3 = 4 = l ( x3 , x5 ) .
3 i = l ( xi , x3 ) i = 1;
Apoi:
3 1 = l ( x1, x3 ) = 1.
n sfrit: 1 0 = 2 = l ( x0 , x1 ) i = 0
Deci, drumul de valoare optim (minim) de la x0 la x6 este:
91
= ( x0 , x1, x3 , x5 , x2 , x6 ) .
Observaie
1. Algoritmul se poate programa uor.
2. Se poate evita etapa iniial a determinrii unor drumuri de la x0 la xi ,
i = 1,2,..., n , astfel:
( 0) (0)
n etapa 0 (iniial) se iau valorile: 0 = 0 i i = M , unde M este un
numr mai mare dect, de exemplu, suma valorilor tuturor arcelor grafului. De obicei se ia
M = + i se utilizeaz convenia + = 0 ;
pornind de la aceste valori iniiale se fac mbuntiri succesive, conform
algoritmului prezentat pn la obinerea valorilor optime. Acest algoritm se numete
algoritmul lui Ford.
Exemplul 2
S se determine drumul de valoare minim ntre x0 i x5 n graful urmtor:
Fig. 3.4.2
92
Singurul vrf pentru care are loc egalitatea este x1 . Deci, = ( x0 ,..., x1 , x3 , x2 , x5 ) .
( 4) ( 4)
Mai departe: 1 i = l ( xi , x1 ) i = 0 (singurul vrf pentru care are loc relaia de
egalitate).
Aadar, drumul optim (de valoare minim) este:
= ( x0 , x1, x3 , x2 , x5 ) i l ( ) = 8 .
Rezultatele calculelor vor fi trecute ntr-un tabel:
93
arce ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )
l ( xi , x j ) ( ) j0 i 0 ( ) j1 i1 ( ) j2 i 2 ( ) j3 i 3 ( ) j4 i 4
( xi , x j ) i 0 i1 i 2 i 3 i 4
Vrful x5
( ) ( ) ( ) ( ) ( )
( x4 , x5 ) 7 00 = 0 0 01 = 0 + (*) 02 = 0 7 03 = 0 5 04 = 0 4<
( ) ( ) ( ) ( ) ( )
( x2 , x5 ) 4 10 = 0 11 = 2 0 12 = 2 8 (*) 13 = 2 5 (*) 14 = 2 4 =
Vrful x4
( ) ( ) ( ) ( ) ( )
( x3 , x4 ) 1 20 = 0 21 = 22 = 5 3 (*) 23 = 4 1 24 = 4 1 =
( )
( ) 31 = + ( ) ( ) ( )
( x0 , x4 ) 6 30 = (*) 6 32 = 3 6 33 = 3 4 34 = 3 4<
Vrful x3
( ) ( ) ( ) ( ) ( )
( x1, x3 ) 1 40 = 0 41 = 6 + (*) 42 = 6 1 43 = 4 1 44 = 4 1 =
Vrful x2
( ) ( ) ( ) ( ) ( )
( x3 , x2 ) 1 50 = 0 51 = 0 52 = 13 2 (*) 53 = 9 1 54 = 8 1 =
( x1, x2 ) 3 0 + (*) 3 2 2<
Vrful x1
( x0 , x1 ) 2 (*) 2 2 2 2 =
Vrful x0
( x3 , x0 ) 5 3 3 3 <
( ) ( ) ( ) ( )
(
41 = 00 + l x0 , x4 )=6 52 = 41 + l ( x4 , x5 ) = 6 + 7 = 13 ( ) ( )
( ) ( ) ( ) ( ) 53 = 22 + l ( x2 , x5 ) = 5 + 4 = 9
(
11 = 00 + l x0 , x1 )=2 32 = 11 + l ( x1, x3 ) = 2 + 1 = 3 ( ) ( )
( ) ( ) ( ) ( ) 43 = 32 + l ( x3 , x4 ) = 3 + 1 = 4
(
i1 = i 0 , i 1.4 ) 22 = 11 + l ( x1, x2 ) = 2 + 3 = 5 ( ) ( )
( ) ( ) 23 = 32 + l ( x3 , x2 ) = 3 + 1 = 4
(
54 = 23 + l x2 , x5 )=4+4=8
94
3.6 Algoritmul lui Ford pentru determinarea drumurilor de valoare maxim
dintre dou vrfuri ale unui graf fr circuite. Exemple.
Dac G = ( X ,U ) este un graf fr circuite, putem cuta drumuri de valoare maxim
ntre dou vrfuri distincte ale grafului. Deoarece ntr-un graf finit exist un numr finit de
drumuri, atunci dac exist drumuri ntre vrfurile distincte x i y, printre ele exist (cel puin)
unul de valoare maxim.
Dac ntre dou vrfuri nu exist nici un drum vom spune n mod convenional c
valoare maxim este . Presupunem c X = { x0 , x1,..., xn } i c ne intereseaz drumul
de valoare maxim de la x0 la xn .
Dac i reprezint valoarea unui drum de la x0 la xi , putem enuna o teorem
analoag celei din cazul determinrii drumului de valoare minim dintre dou vrfuri distincte
ale grafului:
Teorem 3.6.1
Condiia necesar i suficient pentru ca i s fie valoarea maxim a drumurilor de la
( )
x0 la xi ( i = 1,2,..., n ) este ca pentru orice xi , x j U s aib loc relaia:
j i l ( xi , x j ) , ( 0 = 0 ). (3.6.1)
(k )
atunci valoarea j poate fi mbuntit, lund pentru etapa urmtoare,
( ) ( ) ( )
jk +1 = i k + l ( xi , x j ) > jk . (3.6.3)
(k )
Procesul continu pn cnd nici una din valorile j , j = 1,..., n nu mai poate fi
mbuntit. La sfritul acestei etape se obin valorile optime pentru j i se trece la
determinarea drumului optim (de valoare maxim) de la x0 la xn , analog ca n cazul
drumurilor de valoare minim.
95
Exemplul 1
S se determine drumul de valoare maxim de la x0 i x5 n graful urmtor:
Fig. 3.6.1
Etapa 1. ( k + 1 , pentru k = 0 ).
( 0) ( 0) ( ) ( )
Pentru nceput lum: 0 = 0 ; 1 = 20 = ... = 50 = .
( 0) ( 0)
Dintre aceste valori singurele care se mbuntesc sunt 1 i 2 , astfel:
( ) ( )
11 = 00 + l ( x0 , x1 ) = 3 ;
( ) ( )
21 = 00 + l ( x0 , x2 ) = 5 .
(1) (1) (1) (1)
Pentru celelalte valori, n etapa urmtoare lum: 3 = 4 = 5 = ; 0 = 0 .
{( x , x ) :
0 2
(1)
2
( )
01 = 5 = l ( x0 , x2 ) ;
Vrful x1 :
( x2 , x1 ) : 1(1) (21) = 3 5 = 2 < l ( x2 , x1 ) = 4; ( )
(1) (1)
( x0 , x1 ) : 1 0 = 3 = l ( x0 , x1 ) .
Au fost marcate cu (*) relaiile care pot aduce efectiv mbuntiri valorilor j .
(
Primele trei relaii, dei sunt de forma j i < l xi , x j , nu aduc practic nici o )
mbuntire. De exemplu, din prima relaie, pentru ( x4 , x5 ) , ar trebui s lum:
( ) ( )
52 = 41 + l ( x4 , x5 ) = . Aceasta se ntmpl pentru toate arcele xi , x j U , pentru ( )
(
care i = j = i l xi , x j > 0 i finit.)
(1) (1) (1)
Se pot mbunti valorile: 4 , 3 , 1 i le vom calcula:
(42 ) = (21) + l ( x2 , x4 ) = 5 + 5 = 10;
( 2) (1)
4 = 1 + l ( x1, x4 ) = 3 + 6 = 9.
( 2)
Cum noi cutm drumul de valoare maxim, alegem 4 = 10 .
3( 2 ) = (21) + l ( x2 , x3 ) = 5 + 4 = 9;
( 2) ( 2) (1)
Pentru 3 : 3 = 1 + l ( x1, x3 ) = 3 + 4 = 7;
( 2) (1)
3 = 0 + l ( x0 , x3 ) = 0 + 13 = 13.
( 2)
Alegem 3 = 13 (valoarea maxim).
(1)
1( 2 ) = (21) + l ( x2 , x1 ) = 5 + 4 = 9;
Pentru 1 : ( 2) (1)
1 = 0 + l ( x0 , x1 ) = 0 + 3 = 3.
( 2)
Alegem 1 = 9 (valoarea maxim).
Pentru celelalte valori ale lui j, j {0,2,5} , pstrm valorile anterioare:
( ) ( ) ( ) ( ) ( ) ( )
02 = 01 = 0 , 22 = 21 = 5 , 52 = 51 = .
Se recalculeaz, pentru toate arcele ( xi , x j ) U , diferenele: ( ) ( )
j2 i 2 i se
(
compar cu l xi , x j . )
97
Valorile actualizate ale numerelor j pentru etapa a 3-a sunt, deci
(0 ) = 0 , 1( ) = 9 , (2 ) = 5 , (3 ) = 13 , (4 ) = 10 , (5 ) = .
2 2 2 2 2 2
Etapa 3. ( k + 1 pentru k = 2 )
Vrful x5 :
( 2) ( 2)
5 4 = < l ( x4 , x5 ) = 5; ( )
( 2)
5 3( ) = < l ( x3 , x5 ) = 10; ( )
2
Vrful x4 :
( 2 ) ( 2 ) = 3 < l ( x , x ) = 5; ( )
4 3 3 4
(2) ( 2)
4 2 = 5 = l ( x2 , x4 ) ;
(2) ( 2)
4 1 = 1 < l ( x1, x4 ) = 6; ( )
Vrful x3 :
( 2 ) ( 2 ) = 8 > l ( x , x ) = 4;
3 2 2 3
( 2) ( 2)
3 1 = 4 = l ( x1, x3 ) ;
( 2) ( 2)
3 0 = 13 = l ( x0 , x3 ) ;
Vrful x2 :
{( ) ( ) = 5 = l ( x , x );
2
2
0
2
0 2
Vrful x1 :
( 2 ) ( 2 ) = 4 = l ( x , x ) ;
1 2 2 1
(2)
1 (0 ) = 9 > l ( x0 , x1 ) = 3.
2
Inegalitile j i (
i j )
( k ) ( k ) < l x , x au fost marcate cu (*). Se pot mbunti ( 2 )
5
( 2)
i 4 . Valoarea mbuntit pentru etapa urmtoare se calculeaz cu relaia:
(j
k +1)
(
= (i ) + l xi , x j
k
) ( > ( ) ) .
i
k
Pentru 5 avem:
( 3) = ( 2 ) + l ( x , x ) = 10 + 5 = 15;
5 4 4 5
( 3)
5 = (3 ) + l ( x3 , x5 ) = 13 + 10 = 23.
2
( 3)
Vom lua 5 = 23 , deoarece cutm drumul de valoare maxim ntre valorile x0 i
x5 .
98
Pentru 4 avem:
( 3) = ( 2 ) + l ( x , x ) = 13 + 5 = 18;
4 3 3 4
( 3)
4 = 1( ) + l ( x1, x4 ) = 9 + 6 = 15.
2
( 3)
Din acelai motiv vom lua, pentru etapa urmtoare, 4 = 18 .
Valorile actualizate ale numerelor j pentru etapa a 4-a sunt:
(0 ) = 0 , 1( ) = 9 , (2 ) = 5 , 3( ) = 13 , (4 ) = 18 , (5 ) = 23 .
3 3 3 3 3 3
Vrful x5 :
( 3 ) ( 3 ) = 5 = ( x , x ) ;
5 4 4 5
( 3)
5 (3 ) = 10 = l ( x3 , x5 ) ;
3
Vrful x4 :
( 3 ) ( 3) = 5 = l ( x , x ) ;
3 4
4 3
( 3) ( 3)
4 2 = 13 > l ( x2 , x4 ) = 5;
( 3) ( 3)
4 1 = 9 > l ( x1, x4 ) = 6;
Vrful x3 :
( 3) ( 3) = 8 > l ( x , x ) = 4;
2 3
3 2
( 3) ( 3)
3 1 = 4 = l ( x1, x3 ) ;
( 3) ( 3)
3 0 = 13 = l ( x0 , x3 ) ;
Vrful x2 :
{( ) ( ) = 5 = l ( x , x );
2
3
0
3
0 2
Vrful x1 :
( 3 ) ( 3) = 4 = l ( x , x ) ;
1 2 2 1
( 3)
1 (0 ) = 9 > l ( x0 , x1 ) .
3
99
La sfritul acestei etape toate relaiile dintre j i ( i )
( k ) ( k ) i l x , x sunt de tip =
j
( 3)
sau >, deci nici unul dintre numerele i nu mai poate fi mbuntit. Rezult c valorile:
0 = 0 ; 1 = 9 ; 2 = 5 ; 3 = 13 ; 4 = 18 ; 5 = 23 sunt optime i se poate trece
la etapa de depistare a drumului optim de la x0 i x5 .
Determinarea drumului optim de la x0 la x5 .
Dac xi este penultimul vrf al drumului optim, atunci: 5 i = l ( xi , x5 ) (relaii
de tip =). Rezult i = 3 sau i = 4 . Fie x3 penultimul vrf. Dac x j precede pe x3 , atunci:
3 j = l ( x j , x3 ) . Rezult j = 0 sau j = 1 . Dac j = 0 , se obine drumul optim
1 = ( x0 , x3 , x5 ) . Dac j = 1 se determin succesiv vrfurile care-l preced pe x1 i se
obine drumul optim: 2 = ( x0 , x2 , x1, x3 , x5 ) . Dac penultimul vrf este luat x4 , atunci
analog se determin toate vrfurile care-l preced pe x4 i se obin drumurile optime:
3 = ( x0 , x3 , x4 , x5 ) , 4 = ( x0 , x2 , x1, x3 , x4 , x5 ) .
Valoarea fiecruia dintre drumurile determinate este maxim i egal cu 23.
100
LECIA 8
3.7 Algoritmul Bellman-Kalaba pentru determinarea drumurilor de valoare
minim dintre dou vrfuri ale unui graf
Definiia 3.7.1
Un graf se numete graf cu arce valorizate dac este definit astfel: G = ( X ,U , l ) ,
unde X = { x0 , x1 ,..., xn } este mulimea vrfurilor, U = mulimea arcelor i l :U +
este o funcie real, pozitiv, care asociaz fiecrui arc un numr pozitiv numit valoarea sa.
Funcia l se poate prelungi pe mulimea drumurilor din graf. n cele ce urmeaz se va
considera c l este definit pe mulimea drumurilor.
Ne propunem s determinm drumul de valoare minim de la x0 la xn . Algoritmul
lui Bellman-Kalaba ce va fi descris n continuare are la baz principiul optimalitii
formulat, la modul general , astfel: orice subpolitic a unei politici optime este, de asemenea,
o politic optim. n cazul grafurilor formularea este, pentru situaia determinrii drumurilor
minime, urmtoarea: orice subdrum al unui drum optim este, de asemenea, un drum optim.
( )
l ( i, j ) , dac xi , x j U , i j;
Fie cij = 0, dac i = j; (3.7.1)
+, ( )
dac xi , x j U , i j.
Pentru a nelege mai bine utilitatea introducerii acestei notaii vom considera graful
( )
G = X ,U% , l% , n care exist toate arcele posibile, cu excepia buclelor, iar aceste arce sunt
valorizate astfel:
l ( u ) dac u U ;
l% ( u ) = (3.7.2)
+ dac u U% \ U .
( )
matricea c = cij . vi
( 0)
, i = 0,1,..., n 1 , reprezint valoarea drumului format dintr-un
singur arc, de la xi la xn .
Etapa 1
(1)
n etapa urmtoare vom lua vi = valoarea minim a drumurilor formate din cel mult
dou arce de la xi la xn , unde i = 0,1,..., n 1 .
Pentru i fixat, drumurile de la xi la xn , formate din cel mult dou arce, sunt
urmtoarele:
( xi , x1, xn ) , ( xi , x2 , xn ) ,..., ( xi , xi 1, xn ) , ( xi , xn ) , ( xi , xi +1, xn ) ,..., ( xi , xn 1, xn ) .
Valorile acestor drumuri sunt, respectiv urmtoarele:
l% ( xi , x1, xn ) = l% ( xi , x1 ) + l% ( x1, xn ) = ci1 + v1( ) ;
0
l% ( xi , x2 , xn ) = l% ( xi , x2 ) + l% ( x2 , xn ) = ci 2 + v2( ) ;
0
.......................................................................
l% ( xi , xn ) = vi( ) = cin = l% ( xi , xi , xn ) = cii + vi( ) = vi( ) , ( cii = 0 ) ;
0 0 0
........................................................................
l ( xi , xn 1, xn ) = l% ( xi , xn 1 ) + l% ( xn 1, xn ) = cin 1 + vn( )1.
0
Valoarea minim a drumurilor de la xi la xn , formate din cel mult dou arce este:
( )
n
vi( ) = min cij + v (j ) , vn( ) = 0 , i = 0,1,..., n 1
1 0 1
(3.7.3)
j =0
Etapa 2
( 2)
n etapa a doua vom lua vi = valoarea minim a drumurilor de la xi la xn formate
( 2)
din cel mult trei arce, i = 0,1,..., n 1 i vn = 0 .
Cel mai bun drum de la xi la xn format din cel mult trei arce i care are drept al
doilea vrf un anumit vrf x j este format din arcul xi , x j ( ) i cel mai bun drum de la x j la
xn format din cel mult dou arce. Valoarea acestui drum este:
cij + v(j ) ,
1
(3.7.4)
( )
n
vi( ) = min cij + v(j ) , i = 0, n 1 i vn( ) = 0 .
2 1 2
(3.7.5)
j =0
102
S mai observm c pentru j = i expresia (3.7.4) ne d valoarea celui mai bum drum
(1) (1)
de la xi la xn format din cel mult dou arce: cii + vi = vi , ( cii = 0 ) , iar pentru j = n
aceeai expresie, (3.7.4), ne d valoarea drumului format dintr-un singur arc:
Deci, putem afirma c cel mai bun drum de la xi la xn format din cel mult trei arce
are valoarea
( )
n
vi( ) = min cij + v(j ) , i = 0,1,..., n 1 . Cum, n general, cij 0 , rezult c:
2 1
j =0
( )
n
vi( ) = min cij + v (j ) , i = 0, n 1 i vn( ) = 0 .
k k 1 k
(3.7.8)
j =0
vi( ) vi( )
k k 1
(3.7.9)
Condiia de oprire a algoritmului
(k )
< vi(
k 1)
Dac, ntr-o anumit etap, pentru un anumit i, avem c vi aceasta
nseamn c exist cel puin un drum de la xi la xn format din exact k + 1 arce care este mai
bun (adic de valoare mai mic) dect orice drum de la xi la xn format din cel mult k arce.
(Acest drum poate apare n etapa urmtoare, k + 1 ).
(k )
= vi(
k 1)
Procedeul de calcul se va ntrerupe la prima etap k n care vom avea: vi ,
() i = 0, n 1 .
(k )
= vi(
k 1)
n aceast etap valoarea vi , pentru orice i = 0, n 1 , reprezint valoarea
(k )
celui mai bun drum (de valoare minim) de la xi la xn , deci vi sunt valorile optime,
() i = 0, n 1 .
Faza II determinarea drumului optim de la x0 la xn .
Dup realizarea condiiei de oprire a algoritmului (avnd ca stare iniial cunoaterea
(k )
valorilor optime vi , i = 0, n 1 ) se trece la determinarea drumului optim de la x0 la xn .
( )
Presupunnd c acest drum este = x0 , xi , x j ,..., xn , se determin succesiv indicii
i, j ,... astfel:
1. indicele i se determin din relaia: v0 = c0i + vi ;
103
2. odat determinat i i dac i n se trece la determinarea vrfului urmtor x j din
relaia: vi = cij + v j etc.
n concluzie algoritmul Bellman-Kalaba pentru determinarea drumului de valoare
minim de la x0 la xn const n:
Faza I declanarea i funcionarea algoritmului pn la realizarea condiiei de
oprire.
( 0)
= cin , i = 0, n 1 , vn( ) = 0 (Faza I, etapa 0);
0
a) se ia vi
( )
n
( k ) = min c + v( k 1) ,
i = 0, n i vn( ) = 0 .
k
b) pentru k = 1,2,... , se calculeaz vi ij j
j =1
(Faza I, etapele 1, 2,...,k );
vi( ) = vi( ) ,
k 1
c) dac ntr-o etap k se ajunge la
k
( ) i = 0, n , valorile
Exemplul 3.8.1
S se determine drumul de valoare minim de la x0 la x6 n graful din figura
urmtoare
Fig. 3.8.1
104
( )
n aceast etap se construiete matricea C = cij , i, j = 0,1,...,6 i se definesc
( )
6
(1) = min c + v( 0 ) ,
n aceast etap se calculeaz valorile vi ij j i = 0,1,2,...,5 ,
j =0
( )
6
v0( ) = min c0 j + v(j ) = min ( 0 + ;2 + ; + 2;4 + 11;5 + ; + 7; + 0 ) = 15 ;
1 0
j =0
Practic, se adun elementele corespunztoare din linia lui x0 cu elementele
corespunztoare din coloana lui x6 din matricea C, dup care se determin cea mai mic
valoare din vectorul rezultat.
Pentru i = 1 :
( )
6
v1( ) = min c1 j + v(j ) = min ( + ;0 + ;12 + 2;1 + 11; + ; + 7; + 0 ) = 12 =
1 0
j =0
6
( )
= min c1 j + c j 6 min ( linia lui x1 + coloana lui x6 ) .
j =0
Pentru i = 2 :
( )
6
v2( ) = min c2 j + v(j ) = min ( + ; + ;0 + 2;4 + 11; + ; + 7;2 + 0 ) = 2 =
1 0
j =0
6
( )
= min c2 j + c j 6 min ( linia lui x2 + coloana lui x6 ) .
j =0
105
Pentru i = 3 :
( )
6
v3( ) = min c3 j + v(j ) = min ( + ; + ;11 + 2;0 + 11;2 + ;4 + 7;11 + 0 ) = 11 =
1 0
j =0
6
( )
= min c3 j + c j 6 min ( linia lui x3 + coloana lui x6 ) .
j =0
Pentru i = 4 :
( )
6
v4( ) = min c4 j + v(j ) = min ( + ; + ; + 2; + 11;0 + ;3 + 7; + 0 ) = 10 =
1 0
j =0
6
( )
= min c4 j + c j 6 min ( linia lui x4 + coloana lui x6 ) .
j =0
Pentru i = 5 :
( )
6
v5( ) = min c5 j + v (j ) = min ( + ; + ;2 + 2; + 11; + ;0 + 7;7 + 0 ) = 4 =
1 0
j =0
6
( )
= min c5 j + c j 6 min ( linia lui x5 + coloana lui x6 ) .
j =0
(1)
Pentru i = 6 : v6 = 0 .
La sfritul etapei 1 rezult vectorul
1
( 1 1 1
)
V ( ) = v0( ) , v1( ) , v2( ) ,..., v6( ) = (15,12,2,11,10,4,0 ) .
1
( 0)
Comparnd cu V = ( , ,2,11, ,7,0 ) (comparaia se face ntre componentele
(1)
< vi( ) i anume i {0,1,4,5} ,
0
de acelai rang) se constat c exist indici i pentru care vi
deci algoritmul continu.
Etapa 2; k = 2 .
( )
6
( 2 ) = min c + v(1) ,
n aceast etap se calculeaz valorile vi ij j i = 0,1,2,...,5 i
j =0
x6 formate din cel mult trei arce. Conform relaiilor 3.7.5 i a observaiilor din etapa 1,
rezult c pentru fiecare i = 0,1, 2,...,5 se va aduna linia corespunztoare vrfului xi din
matricea C cu linia vectorului V
(1)
obinut la sfritul etapei 1, element cu element i apoi se
va determina cea mai mic valoare din fiecare vector astfel obinut. Se obine:
( )
6
i = 0 : v0( ) = min c0 j + v (j ) = 14 < v0( ) = 15 ;
2 1 1
j =0
i = 1 : v( ) = min ( c + v( ) ) = 12 = v( ) ;
6
2 1 1
1 1j j 1
j =0
106
( )
6
i = 2 : v2 = min c2 j + v(j ) = 2 = v2( ) ;
( 2) 1 1
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 < v( ) = 11 ;
6
2 1 1
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 < v( ) = 10 ;
6
2 1 1
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
2 1 1
5 5j j 5
j =0
v6( )
2
i = 6: = 0.
(2)
Se obine vectorul V = (14,12,2,8,7, 4,0 ) .
(1)
Comparnd cu vectorul V , obinut la sfritul etapei 1, se constat c exist indici i
( 2) (1) ( 2)
pentru care vi < vi i anume i {0,3,4} , deci valorile vi nu sunt optime, astfel c
algoritmul se continu cu etapa urmtoare.
Etapa 3; k = 3 .
( 3) ( 3)
Se calculeaz valorile vi , i = 0,1,2,...,5 , v6 = 0 utiliznd relaiile (3.7.8), pentru
( )
6
k = 3 : vi( ) = min cij + v(j ) , i = 0,1,2,...,5 . Se obine:
3 2
j =0
( )
6
i = 0 : v0( ) = min c0 j + v(j ) = 12 < v0( ) = 14 ;
3 2 2
j =0
i = 1 : v( ) = min ( c + v( ) ) = 9 < v( ) = 12 ;
6
3 2 2
1 1j j 1
j =0
i = 2 : v( ) = min ( c + v( ) ) = 2 = v( ) ;
6
3 2 2
2 2j j 2
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 = v( ) ;
6
3 2 2
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
3 2 2
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
3 2 2
5 5j j 5
j =0
i = 6 : v6( ) = 0 .
3
( 3)
Se obine vectorul V = (12,9,2,8,7,4,0 ) .
( 2)
n urma comparaiei (pe componente) cu V se constat c exist indicii i {0,1}
( 3) (2) ( 3)
pentru care vi < vi , deci valorile vi nu sunt optime i algoritmul continu.
Etapa 4; k = 4 .
107
( 4) ( 4)
Se calculeaz valorile vi , i = 0,1,2,...,5 , v6 = 0 utiliznd relaiile 3.7.8, pentru
( )
6
k = 4 : vi( ) = min cij + v (j ) , i = 0,1,2,...,5 . Se obine:
4 3
j =0
( )
6
i = 0 : v0( ) = min c0 j + v(j ) = 11 < v0( ) = 12 ;
4 3 3
j =0
i = 1 : v( ) = min ( c + v ( ) ) = 9 = v( ) ;
6
4 3 3
1 1j j 1
j =0
i = 2 : v( ) = min ( c + v( ) ) = 2 = v( ) ;
6
4 3 3
2 2j j 2
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 = v ( ) ;
6
4 3 3
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
4 3 3
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
4 3 3
5 5j j 5
j =0
i = 6 : v6( ) = 0 .
4
( 4 ) = 11,9,2,8,7,4,0
Se obine vectorul V ( ).
( 4) ( 3)
Exist indicele i = 0 astfel nct v0 < v0 , deci se trece la etapa urmtoare.
Etapa 5; k = 5 .
(5) ( 5)
Se calculeaz valorile vi , i = 0,1,2,...,5 , v6 = 0 utiliznd relaiile (3.7.8), pentru
( )
6
k = 5 : vi( ) = min cij + v(j ) , i = 0,1,2,...,5 . Se obine:
5 4
j =0
( )
6
i = 0 : v0( ) = min c0 j + v(j ) = 11 = v0( ) ;
5 4 4
j =0
i = 1 : v( ) = min ( c + v( ) ) = 9 = v( ) ;
6
5 4 4
1 1j j 1
j =0
i = 2 : v( ) = min ( c + v( ) ) = 2 = v( ) ;
6
5 4 4
2 2j j 2
j =0
i = 3 : v( ) = min ( c + v( ) ) = 8 = v( ) ;
6
5 4 4
3 3j j 3
j =0
i = 4 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
5 4 4
4 4j j 4
j =0
i = 5 : v( ) = min ( c + v( ) ) = 4 = v( ) ;
6
5 4 4
5 5j j 5
j =0
v6( )
5
i = 6: = 0.
108
( 5 ) = 11,9,2,8,7,4,0
Se obine vectorul V ( ) i se constat c vi(5) = vi( 4) , pentru
orice i = 0,1, 2,...,6 , deci s-a realizat condiia de oprire a algoritmului. Prin urmare
vi = vi( ) = vi( ) , ( ) i = 0,1,...,6 , reprezint valoarea optim a drumurilor de la xi la x6 ,
5 4
( )
6
v0( ) = min c0 j + v(j ) = min ( 0 + 11;2 + 9; + 2;4 + 8;5 + 7; + 4; + 0 ) = 11;
5 4
j =0
( )
6
v1( ) = min c1 j + v(j ) = min ( + 11;0 + 9;12 + 2;1 + 8; + 7; + 4; + 0 ) = 9;
5 4
j =0
( )
6
v2( ) = min c2 j + v(j ) = min ( + 11; + 9;0 + 2;4 + 8; + 7; + 4;2 + 0 ) = 2;
5 4
j =0
( )
6
v3( ) = min c3 j + v(j ) = min ( + 11; + 9;11 + 2;0 + 8;2 + 7;4 + 4;11 + 0 ) = 8;
5 4
j =0
( )
6
(5)
v4 = min c4 j + v(j ) = min ( + 11; + 9; + 2; + 8;0 + 7;3 + 4; + 0 ) = 7;
4
j =0
( )
6
v5( ) = min c5 j + v(j ) = min ( + 11; + 9;2 + 2; + 8; + 7;0 + 4;7 + 0 ) = 4;
5 4
j =0
109
Dac x j este primul vrf care urmeaz dup x0 pe drumul optim, atunci se caut n
relaia scris pentru i = 0 indicele j pentru care:
v0 = c0 j + v j = 11 .
Se obine j {0,1} . Cum x0 este primul vrf al drumului optim, rezult j = 1 , deci
x1 este al doilea vrf al drumului optim: = { x0 , x1,..., x6 } .
S mai observm c l ( x0 , x1 ) = 2 i evident, v1 = 9 = v0 l ( x0 , x1 ) = 11 2 ,
reprezint valoarea optim a subdrumului de la x1 la x6 pe drumul optim.
Fie acum x j vrful care urmeaz dup x1 pe drumul optim. Se va cuta n relaia
scris pentru i = 1 (corespunztoare vrfului anterior, x1 ) indicele j pentru care:
v1 = c1 j + v j = 9 .
Se obine j {1,3} . Cum x1 este ultimul vrf al drumului optim pn n acest
moment, rezult j = 3 , deci x3 este al treilea vrf pe drumul optim: = { x0 , x1, x3 ,..., x6 } .
De asemenea, l ( x1 , x3 ) = 1 i v3 = v1 l ( x1 , x3 ) = 8 , reprezint valoarea optim a
subdrumului de la x3 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x3 pe drumul optim. Se caut n relaia scris pentru
i = 3 indicele j pentru care:
v3 = c3 j + v j = 8 .
Se obine j {3,5} . Cum x3 este ultimul vrf al drumului optim pn n acest
moment, rezult j = 5 , deci x5 urmeaz dup x3 pe drumul optim:
= { x0 , x1, x3 , x5 ,..., x6 } .
Analog l ( x3 , x5 ) = 4 i v5 = v3 l ( x3 , x5 ) = 4 , reprezint valoarea optim a
subdrumului de la x5 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x5 pe drumul optim. Se caut n relaia scris pentru
i = 5 indicele j pentru care:
v5 = c5 j + v j = 4 .
Se obine j {2,5} . Cum x5 se afl deja pe drumul optim, rezult j = 2 , deci x2
urmeaz dup x5 pe drumul optim: = { x0 , x1, x3 , x5 , x2 ,..., x6 } .
Avem i l ( x5 , x2 ) = 2 , iar v2 = v5 l ( x5 , x2 ) = 2 , reprezint valoarea optim a
subdrumului de la x2 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x2 pe drumul optim. Se caut n relaia scris pentru
i = 2 indicele j pentru care:
v2 = c2 j + v j = 2 .
Se obine j {2,6} i cum x2 se afl deja pe drumul optim, rezult j = 6 . Dar x6
este ultimul vrf al drumului optim, astfel c n acest moment s-a ncheiat i faza a II-a a
110
algoritmului, drumul optim obinut este = { x0 , x1 , x3 , x5 , x2 , x6 } , iar v2 = 2 reprezint
valoarea ultimului arc al acestui drum: v2 = 2 = l ( x2 , x6 ) .
( )
valoarea (n loc de + ), dac arcul xi , x j U , i j ;
(k )
valorile v j , i, j = 0,1,..., n , se vor determina schimbnd n relaia (3.7.8)
simbolul min cu simbolul max.
Dac G = ( X ,U , l ) , X = { x0 , x1,..., xn } este un graf cu arce valorizate i fr
circuite (aceasta se poate stabili uor cu ajutorul criteriului rezultat din teorema 2.2.12 din
capitolul 2), atunci algoritmul lui Bellman-Kalaba pentru determinarea drumului (drumurilor)
de valoare maxim dintre vrfurile x0 i xn necesit parcurgerea urmtoarelor faze i etape:
Faza I determinarea i funcionarea algoritmului pn la realizarea condiiei de
oprire.
La rndul su, faza I cuprinde mai multe etape.
Etapa 0
( )
Se construiete matricea C = cij , i, j = 0,1,..., n , conform relaiilor:
l ( xi , x j ) , dac ( xi , x j ) U , i j;
cij = 0 dac i j; (3.10.1)
dac ( xi , x j ) U , i j.
0
Tot n etapa 0 se definesc numerele vi , i = 0,1,..., n 1 , reprezentnd valoarea
maxim a drumurilor de la xi , i = 0,1,..., n 1 , pn la xn , formate dintr-un singur arc.
Aceste numere se afl pe ultima coloan a matricei C, respectiv pe coloana lui xn .
Etapa k; ( k 1 ).
(k ) (k )
n etapa k se calculeaz numerele vi , i = 0,1,..., n 1 , vn = 0 , reprezentnd
valoarea maxim a drumului de la xi la xn format din k + 1 arce, cu relaiile:
111
( )
n
vi( ) = max cij + v(j ) , i = 0,1,..., n 1 , vn( ) = 0 .
k k 1 k
(3.10.2)
j =0
(k )
> vi(
k 1)
Dac la sfritul etapei k exist indici i pentru care vi , aceasta nseamn c
(k )
valorile vi nu sunt optime i c exist cel puin un drum de la xi la xn format din k + 1
arce mai bun (adic de valoare mai mare) dect orice drum de la xi la xn format din cel mult
k arce; acest drum poate apare n etapa urmtoare, k + 1 .
Algoritmul se continu pn la prima etap k n care se va obine:
(k )
Valorile vi = vi = vi
( k 1)
, i = 0,1,..., n obinute la sfritul acestei etape sunt
valorile optime i reprezint, pentru fiecare i = 0,1,..., n , valoarea maxim a drumului
(k )
(drumurilor) de la xi la xn . Deci v0 = v0 este valoarea maxim a drumului optim de la x0
la xn .
Relaiile (3.10.3) reprezint, n ansamblul lor, condiia de oprire a algoritmului n faza
I.
Faza II determinarea drumului (drumurilor) optim (de valoare maxim) de la x0 la
xn .
Determinarea drumului optim se face n sensul de la x0 ctre xn , astfel:
dac x j este primul vrf care succede lui x0 pe drumul optim, atunci se caut n
relaia (3.10.2) din ultima etap, scris pentru i = 0 , indicele j pentru care:
v0 = c0 j + v j . (3.10.4)
Exemplul 3.10.1
S se determine drumul de valoare maxim de la x0 la x6 n graful din figura
urmtoare:
112
Fig. 3.10.1
Faza I
Etapa 0; k = 0 .
( )
Matricea C = cij , i, j = 0,1,...,6 se construiete cu ajutorul relaiilor (3.10.1) i
este urmtoarea:
x0 x1 x2 x3 x4 x5 x6
0 5 6 3 x0
0 5 4 x1
0 6 8 x2
C=
8 0 8 10 x3
6 7 0 9 x4
0 5 x5
0 x6
( 0)
Numerele vi , i = 0,1,...,6 se afl pe ultima coloan a matricei C;
0 0
( 0 0
)
V ( ) = v0( ) , v1( ) ,..., v6( ) = ( , ,8,10, ,5,0 ) .
Etapa 1; k = 1 .
( )
6
(0) ,
i = 0,1,...,5 , v6( ) = 0 , conform
1 1
Se calculeaz valorile vi = max cij + v j
j =0
relaiilor (3.10.2) pentru k = 1 :
Pentru i = 0 :
113
( )
6
v0( ) = max c0 j + v(j ) = max ( 0 ;5 ; + 8;6 + 10;3 ; + 5; + 0 ) =
1 0
j =0
6
( )
= 16 = max c0 j + c j 6 max ( linia lui x0 + coloana lui x6 ) .
j =0
Pentru i = 1 :
( )
6
v1( ) = max c1 j + v(j ) = max ( ;0 ;5 + 8;4 + 10; ; + 5; + 0 ) =
1 0
j =0
6
( )
= 14 = max c1 j + c j 6 max ( linia lui x1 + coloana lui x6 ) .
j =0
Pentru i = 2 :
( )
6
v2( ) = max c2 j + v(j ) = max ( ; ;0 + 8; + 10; ;6 + 5;8 + 0 ) =
1 0
j =0
6
( )
= 11 = max c2 j + c j 6 max ( linia lui x2 + coloana lui x6 ) .
j =0
Pentru i = 3 :
( )
6
v3( ) = max c3 j + v(j ) = max ( ; ;8 + 8;0 + 10; ;8 + 5;10 + 0 ) =
1 0
j =0
6
( )
= 16 = max c3 j + c j 6 max ( linia lui x3 + coloana lui x6 ) .
j =0
Pentru i = 4 :
( )
6
v4( ) = max c4 j + v(j ) = max ( ;6 ; + 8;7 + 10;0 ;9 + 5; + 0 ) =
1 0
j =0
6
( )
= 17 = max c4 j + c j 6 max ( linia lui x4 + coloana lui x6 ) .
j =0
Pentru i = 5 :
( )
6
v5( ) = max c5 j + v (j ) = max ( ; ; + 8; + 10; ;0 + 5;5 + 0 ) =
1 0
j =0
6
( )
= 5 = max c5 j + c j 6 max ( linia lui x5 + coloana lui x6 ) .
j =0
(1)
Pentru i = 6 : v6 = 0 .
La sfritul etapei 1 rezult vectorul
1 1
( 1 1
)
V ( ) = v0( ) , v1( ) ,..., v6( ) = (16,14,11,16,17,5,0 ) .
V ( ) = ( , ,8,10, ,5,0 )
0
Comparnd cu (comparaia se face ntre
(1)
> vi( ) i anume
0
componentele de aceleai rang) se constat c exist indici i pentru care vi
i {0,1,2,3,4} , deci algoritmul continu.
114
Etapa 2; k = 2 .
( )
6
( 2)
= max cij + v (j ) , i = 0,1,...,5 , v6( ) = 0 , reprezentnd
1 0
Se calculeaz valorile vi
j =0
valoarea maxim a drumurilor de la xi la x6 formate din cel mult trei arce, pentru fiecare
i = 0,1,2,...,5 . Se obine:
( )
6
i = 0 : v0( ) = max c0 j + v(j ) = 22 > v0( ) = 16 ;
2 1 1
j =0
i = 1 : v( ) = max ( c + v( ) ) = 20 > v ( ) = 14 ;
6
2 1 1
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
2 1 1
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 > v( ) = 16 ;
6
2 1 1
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 23 > v( ) = 17 ;
6
2 1 1
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v( ) ) = 5 = v( ) ;
6
2 1 1
5 5j j 5
j =0
( 2)
i = 6 : v6 = 0 .
( 2 ) = 22,20,11,19,23,5,0
Se obine vectorul V ( ) . Comparndu-l, pe componente,
cu vectorul V
(1) obinut la sfritul etapei 1, se constat c exist indici i pentru care
( )
6
( 3) = max c + v( 2 ) ( 3)
pentru k = 3 : vi ij j , i = 0,1,2,...,5 , v6 = 0 . Se obine:
j =0
i = 0 : v( ) = max ( c + v ( ) ) = 26 > v( ) = 22 ;
6
3 2 2
0 0j j 0
j =0
i = 1 : v( ) = max ( c + v( ) ) = 23 > v( ) = 20 ;
6
3 2 2
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
3 2 2
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
3 2 2
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 26 > v( ) = 23 ;
6
3 2 2
4 4j j 4
j =0
115
( )
6
i = 5 : v5 = max c5 j + v (j ) = 5 = v5( ) ;
( 3) 2 2
j =0
i = 6 : v6( ) = 0 .
3
( )
6
pentru k = 4 : vi
( 4 ) = max c + v( 4 ) , i = 0,1,2,...,5 , v( 4 ) = 0 . Se obine:
ij j 6
j =0
i = 0 : v( ) = max ( c + v ( ) ) = 29 > v( ) = 26 ;
6
4 3 3
0 0j j 0
j =0
i = 1 : v( ) = max ( c + v( ) ) = 23 = v( ) ;
6
4 3 3
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
4 3 3
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
4 3 3
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 29 > v( ) = 26 ;
6
4 3 3
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v ( ) ) = 5 = v( ) ;
6
4 4 3
5 5j j 5
j =0
( 4)
i = 6 : v6 = 0 .
( 4 ) = 29,23,11,19,29,5,0
Se obine vectorul V ( ) . Exist indicii i {0,4} pentru
( 4)
> vi( ) , deci se trece la etapa urmtoare.
3
care vi
Etapa 5; k = 5 .
(5) ( 5)
Se calculeaz valorile vi , i = 0,1,2,...,5 , v6 = 0 , cu relaiile (3.10.2) pentru
( )
6
k = 5 : vi( ) = max cij + v(j ) , i = 0,1,2,...,5 , v6( ) = 0 . Se obine:
5 4 5
j =0
( )
6
i = 0 : v0( ) = max c0 j + v(j ) = 32 > v0( ) = 29 ;
5 4 4
j =0
116
( )
6
i = 1 : v1 = max c1 j + v(j ) = 23 = v1( ) ;
( 5) 4 4
j =0
i = 2 : v( ) = max ( c + v ( ) ) = 11 = v( ) ;
6
5 4 4
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
5 4 4
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 29 = v ( ) ;
6
5 4 4
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v( ) ) = 5 = v ( ) ;
6
5 4 4
5 5j j 5
j =0
( 5)
i = 6 : v6 = 0 .
( 5)
Se obine vectorul V = ( 32,23,11,19,29,5,0 ) . Mai exist un singur indice,
i = 0 , pentru care vi( ) > vi( ) , deci se trece la etapa urmtoare.
5 4
Etapa 6; k = 6 .
( 6) ( 6)
Se calculeaz valorile vi , i = 0,1,2,...,5 , v6 = 0 , cu relaiile (3.10.2) pentru
( )
6
k = 6 : vi( ) = max cij + v(j ) , i = 0,1,2,...,5 i v6( ) = 0 . Se obine:
6 5 6
j =0
( )
6
i = 0 : v0( ) = max c0 j + v(j ) = 32 = v0( ) ;
6 5 5
j =0
i = 1 : v( ) = max ( c + v( ) ) = 23 = v( ) ;
6
6 5 5
1 1j j 1
j =0
i = 2 : v( ) = max ( c + v( ) ) = 11 = v( ) ;
6
6 5 5
2 2j j 2
j =0
i = 3 : v( ) = max ( c + v( ) ) = 19 = v( ) ;
6
6 5 5
3 3j j 3
j =0
i = 4 : v( ) = max ( c + v( ) ) = 29 = v( ) ;
6
6 5 5
4 4j j 4
j =0
i = 5 : v( ) = max ( c + v( ) ) = 5 = v( ) ;
6
6 5 5
5 5j j 5
j =0
i = 6 : v6( ) = 0 .
6
optim (de valoare maxim) de la xi la x6 , format din cel mult 7 arce. S-a realizat, deci
condiia de oprire a algoritmului, respectiv relaiile (3.10.3), astfel c se poate trece la
determinarea drumului optim de la x0 la x6 .
117
Faza a II-a
Determinarea drumului optim se face n sensul de la x0 ctre x6 . Valoarea maxim a
(6)
drumului optim de la x0 la x6 este v0 = v0 = 32 , deci valoarea primei componente a
vectorului V
(6) obinut la sfritul ultimei etape din faza I.
Se rescriu n detaliu, pe componente i pentru fiecare i = 0,1,...,6 , relaiile cu ajutorul
( 6)
crora s-au obinut valorile optime vi = vi , n ultima etap din faza I.
i = 0:
( )
6
v0 = v0( ) = max c0 j + v(j ) =
6 5
j =0
( )
6
v1 = v1( ) = max c1 j + v (j ) =
6 5
j =0
( )
6
v2 = v2( ) = max c2 j + v(j ) =
6 5
j =0
( )
6
(6)
v3 = v3 = max c3 j + v(j ) =
5
j =0
i = 4:
( )
6
( 6)
v4 = v4 = max c4 j + v (j ) =
5
j =0
118
( )
6
v5 = v5( ) = max c5 j + v(j ) =
6 5
j =0
{ }
la x6 : = x0 , x j ,..., x6 . Se caut n relaia scris pentru i = 0 indicele j pentru care:
v0 = c0 j + v j = 32 .
Se obine j {0,4} . Cum x0 este primul vrf al drumului optim, rezult j = 4 , deci
x4 este al doilea vrf al drumului optim: = { x0 , x4 ,..., x6 } .
Se mai observ c l ( x0 , x4 ) = 3 i evident, v4 = v0 l ( x0 , x4 ) = 29 , reprezint
valoarea maxim a subdrumului de la x4 la x6 pe drumul optim.
Fie acum x j vrful care urmeaz dup x4 pe drumul optim. Se va cuta n relaia
scris pentru i = 4 indicele j pentru care: v4 = c4 j + v j = 29 .
Se obine j = {1,4} . Cum x4 se afl deja pe drumul optim, rezult j = 1 , deci x1
este al treilea vrf al drumului optim: = { x0 , x4 , x1 ,..., x6 } .
De asemenea, l ( x4 , x1 ) = 6 i v1 = v4 l ( x4 , x1 ) = 23 reprezint valoarea
maxim a subdrumului de la x1 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x1 pe drumul optim. Se caut n relaia scris pentru
i = 1 indicele j pentru care: v1 = c1 j + v j = 23 .
Se obine j = {1,3} . Cum x1 se afl deja pe drumul optim, rezult j = 3 , deci x3
urmeaz dup x1 pe drumul optim: = { x0 , x4 , x1 , x3 ,..., x6 } .
Analog l ( x1 , x3 ) = 4 i v3 = v1 l ( x1 , x3 ) = 19 reprezint valoarea maxim a
subdrumului de la x3 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x3 pe drumul optim. Se caut n relaia scris pentru
i = 3 indicele j pentru care: v3 = c3 j + v j = 19 .
Se obine j = {2,3} . Cum x3 se afl deja pe drumul optim, rezult j = 2 , deci x2
urmeaz dup x3 pe drumul optim: = { x0 , x4 , x1 , x3 , x2 ,..., x6 } .
Avem i l ( x3 , x2 ) = 6 , iar v2 = v3 l ( x3 , x2 ) = 11 reprezint valoarea maxim a
subdrumului de la x2 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x2 pe drumul optim. Se caut n relaia scris pentru
i = 2 indicele j pentru care: v2 = c2 j + v j = 11 .
119
Se obine j = {2,5} i cum x2 se afl deja pe drumul optim, rezult j = 5 , deci x5
urmeaz dup x2 pe drumul optim: = { x0 , x4 , x1, x3 , x2 , x5 ,..., x6 } .
Avem i l ( x2 , x5 ) = 6 , iar v5 = v2 l ( x2 , x5 ) = 5 reprezint valoarea maxim a
subdrumului de la x5 la x6 pe drumul optim.
Fie x j vrful care urmeaz dup x5 pe drumul optim. Se caut n relaia scris pentru
i = 5 indicele j pentru care: v5 = c5 j + v j = 5 .
Se obine j = {5,6} i cum x5 se afl deja pe drumul optim, rezult j = 6 . Dar x6
este ultimul vrf al drumului optim, astfel c n acest moment s-a ncheiat i faza a II-a a
algoritmului. v5 = 5 reprezint valoarea ultimului arc al drumului optim:
v5 = 5 = l ( x5 , x6 ) . Drumul de valoare maxim dintre vrfurile x0 i x6 este
= { x0 , x4 , x1, x3 , x2 , x5 , x6 } , este format din 6 arce i valoarea sa maxim este v0 = 32 .
120
LECIA 9
3.11 Algoritmul matriceal pentru determinarea drumurilor de valoare minim
dintre dou vrfuri oarecare ale unui graf
Fie G = ( X ,U , l ) un graf cu arce valorizate, X = { x0 , x1 ,..., xn } , l :U + i
( )
C = cij , i, j = 0,1, 2,..., n matricea valorilor arcelor grafului, unde
( ) (
l xi , x j , dac xi , x j U , i j;
)
cij = 0, dac i = j; (3.11.1)
+, (
dac xi , x j U , i j. )
n etapa 0 a algoritmului lui Bellman-Kalaba s-a pornit cu valorile iniiale:
( )
n
vi( ) = min cis + vs( ) , i = 0,1,2,..., n 1 , vn( ) = 0 ,
k k 1 k
(3.11.3)
s =0
(k )
unde vi reprezint minimul valorilor drumurilor de la xi la xn formate din cel mult k + 1
arce.
Se poate constata c vrful x0 nu are o situaie aparte fa de celelalte vrfuri xi ,
i n ale grafului, n etapele succesive ale algoritmului. Abia n faza a doua a algoritmului,
deci dup aflarea valorilor optime de la fiecare vrf xi pn la xn , se ine seama de faptul c
intereseaz drumul optim de la x0 la xn . n fond x0 i xn sunt dou vrfuri oarecare ale
grafului i deci toate consideraiile fcute n paragrafele anterioare (care se refer la
algoritmul lui Bellman-Kalaba) pot fi utilizate pentru determinarea drumului optim ntre dou
vrfuri oarecare xi i x j ale grafului.
n continuare se vor preciza modificrile care trebuie fcute n algoritmul lui Bellman-
Kalaba astfel nct n etapa k din faza I a algoritmului s se determine minimul valorilor
drumurilor formate din cel mult k + 1 arce dintre dou vrfuri oarecare xi i x j , i j ale
grafului i nu doar dintre vrfurile xi , i = 0,1,..., n 1 i xn .
Astfel, dac n relaia (3.11.3) vrful xn nu ar fi subneles, atunci relaia trebuie
modificat astfel:
( )
n
( k ) = min c + v( k 1) , v( k ) = 0 .
vin (3.11.4)
is sn nn
s =0
(k )
n aceast relaie vin reprezint minimul valorilor drumurilor de la xi la xn formate
din cel puin k + 1 arce.
121
Dac ne intereseaz minimul valorilor drumurilor de la vrful xi la vrful x j (n loc
de xn ) formate din cel mult k + 1 arce, i j , atunci rolul lui xn va fi luat de x j i relaiile
(3.11.4) devin:
( )
n
vij( ) = min cis + vsj( ) , i j , v(jj ) = 0 ,
k k 1 s
(3.11.5)
s =0
vij( ) = C ( ) .
k k +1
(3.11.6)
C( ) = C .
1
(3.11.7)
Pe intervalul [ 0, + ) vom defini operaiile:
a & b = a + b , (3.11.9)
a doua operaie fiind adunarea obinuit pe [ 0, + ) .
Se poate arta uor c aceste operaii sunt asociative i comutative, iar operaia & este
& . Rezultatul compunerii a n elemente din [ 0, + ) cu operaia
distributiv fa de operaia +
n
+& (3.11.8), respectiv suma ( a1 +& a2 +& ... +& an ) , se va nota cu simbolul as , iar dac n
&
s =1
122
& B.
C = A (3.11.11)
& dintre matrice este asociativ.
Se arat uor c operaia
Avnd n vedere operaiile + & i & definite pe [ 0, + ) prin relaiile (3.11.8) i
& definit pe mulimea matricelor ptratice de ordinul m cu elemente din
(3.11.9) i operaia
[0, + ) prin relaia (3.11.10), rezult c relaiile (3.11.5) se scriu astfel:
vij( ) = cis & vsj( k 1) , () i, j = 0,1,..., n .
k
(3.11.12)
s =1
Rezult c matricea C
( k +1)
este produsul & (relaia (3.11.11)) matricelor C i C (k ) ,
& definit prin relaia (3.11.11):
deci puterea ( k + 1 ) a matricei C n raport cu operaia
C(
k +1) & C
& ...
&C
=C
14 4244 3 (3.11.13)
k +1
(k )
Dat fiind semnificaia valorilor vij , i, j = 0,1,..., n , rezult c elementul cij
( k +1)
din matricea C
( k +1) reprezint valoarea minim a drumului (drumurilor) de la vrful x la
i
vrful x j , formate din cel mult k + 1 arce.
Faza I a algoritmului prezentat sub aceast form, numit algoritmul matriceal pentru
determinarea drumului de valoare minim ntre oricare dou vrfuri distincte ale unui graf,
se ncheie ntr-o etap k n care se realizeaz condiia:
C(
k +1)
= C( ) ,
k
(3.11.14)
( k +1) (k )
numit i condiia de oprire a algoritmului. C =C este matricea drumurilor de
valoare minim dintre oricare dou vrfuri ale grafului.
Faza a II-a a algoritmului, respectiv determinarea drumului (drumurilor) de valoare
minim ntre dou vrfuri oarecare xi i x j , va fi prezentat pe exemple; valoarea minim a
Observaia 3.11.1
Din prezentarea algoritmului matriceal pentru determinarea drumului de valoare
minim dintre dou vrfuri oarecare ale unui graf rezult c algoritmul lui Bellman-Kalaba
este un caz particular al algoritmului matriceal. ntr-adevr, fie V j
( k +1) coloana j a matricei
C(
k +1)
: Vj
( k +1)
( k +1 k +1 ( k +1) t
= v0( j ) , v1( j ) ,..., vnj . )
Atunci relaiile (3.11.4) pentru j = n se scriu astfel:
Vn(
k +1) & V (k )
=C n (3.11.15)
Altfel spus, n etapa k a algoritmului Bellman-Kalaba se determin numai ultima
( k +1)
coloan a matricei C .
123
n mod asemntor i varianta algoritmului Bellman-Kalaba prezentat i
exemplificat n paragraful 3.9 poate fi prezentat matriceal. Astfel, dac se noteaz cu
Vi(
k +1) ( k +1) , adic:
linia i a matricei C
Vi(
k +1)
(
= vi(0 ) , vi(1 ) ,..., vin
k +1 k +1 ( k +1) ,
)
atunci pentru i = 0 , relaiile:
( )
n
v0( j ) = min csj + v0( s ) ,
k k 1
(3.11.15)
s =0
pot fi scrise astfel:
V0(
k +1)
= V0( )
k &
C. (3.11.16)
Cu alte cuvinte, n aceast variant a algoritmului Bellman-Kalaba, n etapa k se
( k +1)
determin prima linie a matricei C .
Exemplul 3.11.2
S se determine matricea drumurilor de valoare minim corespunztoare grafului din
figura urmtoare:
Fig. 3.11.1
124
n continuare, utiliznd operaiile definite prin (3.11.8) i (3.11.9) se calculeaz, cu
& definit prin
relaiile (3.11.13) puterile succesive ale matricei C, n raport cu operaia
(3.11.10) i (3.11.11)
0 3 2 4 10 8 0 3 2 4 10 5
1 0 3 4 10 5 1 0 3 4 7 5
2 1 0 2 8 3 ( 3) 2 1 0 2 5 3
C( ) =
2
; C = ;
4 3 0 3 1 4 3 6 0 3 1
13 0 5 14 13 17 0 5
9 8 12 2 0 9 8 11 12 2 0
0 3 2 4 7 5 0 3 2 4 7 5
1 0 3 4 7 5 1 0 3 4 7 5
2 1 0 2 5 3 (5) 2 1 0 2 5 3
C( ) =
4
; C = .
4 3 6 0 3 1 4 3 6 0 3 1
14 13 16 17 0 5 14 13 16 17 0 5
9 8 11 12 2 0 9 8 11 12 2 0
Se constat c pentru k = 5 s-a obinut C
( 5) = C ( 4 ) , deci s-a realizat condiia de
dup obinerea matricei drumurilor optime. S determinm, cu ajutorul matricei vij = C ( ) (5) ,
Observaia 3.11.3
& de nmulire a matricelor definit prin relaiile
Datorit asociativitii operaiei
(3.11.10) i (3.11.11), rezult c se poate reduce numrul etapelor necesare determinrii
matricei drumurilor de valoare minim dintre oricare dou vrfuri ale grafului. ntr-adevr,
dup calculul matricei C
( 2 ) se poate obine direct C ( 4 ) fr a mai calcula C ( 3) :
( 4) ( 2) & ( 2)
C = C C .
Mai departe, se obine direct C
(8) fr a mai calcula C ( 5) , C ( 6 ) , C ( 7 ) :
125
C( ) = C( ) C ( ) , etc.
8 4 & 4
( )
de + ), dac arcul xi , x j U , i j ;
pe intervalul [ , + ) se definesc operaiile:
a & b = a + b , (3.12.2)
C(
k +1) & C
& ...
& C,
=C
14 4244 3 (3.12.4)
k +1
reprezint maximul valorilor drumurilor de la vrful xi la vrful x j , formate din cel mult
k + 1 arce.
Dac graful este fr circuite atunci exist o valoare a lui k astfel nct
C(
k +1)
= C( ) ,
k
(3.12.5)
126
aceasta reprezentnd condiia de oprire a algoritmului n faza I.
Matricea C
( k ) obinut n aceast etap de calcul se numete matricea drumurilor de
(k )
valoare maxim, iar valoarea elementului cij reprezint valoarea maxim a drumului
(drumurilor) de la vrful xi la vrful x j , ( ) i, j = 1, 2,..., n .
Drumul optim dintre vrfurile xi i x j se determin dup obinerea matricei
drumurilor de valoare maxim, din aproape n aproape, n sensul de la xi ctre x j .
127
PROBLEME REZOLVATE LA UI 3 UTILIZND VARIANTE ALE
ALGORITMILOR LUI FORD I BELLMAN-KALABA
Fig. 3.5.1
( ) ( )
Avem: l ( i ) = i , l j = j , l ( i ) = l xi , x j + j .
( )
Dac pentru orice xi , x j U are loc relaia:
i j l ( xi , x j ) , (3.5.1)
atunci rezult la fel ca n teorema demonstrat anterior c i sunt valorile optime. n acest
caz vrfurile consecutive xi , x j ,... ale unui drum optim verific relaia (3.5.1) cu semnul
egal.
(0)
= + , i = 0,1,..., n 1 i (n ) = 0 .
0
n etapa iniial se va lua: i
128
Exemplu
S se determine drumul de valoare minim de la x0 la x5 din graful urmtor,
utiliznd aceast variant a algoritmului Ford.
Fig. 3.5.2
(0) (0)
= ...(4 ) = + i (5 ) = 0 .
0 0
n etapa 0 (start) vom lua: 0 = 1
Rezult c pentru orice j5 i ( ) ( xi , x j ) U avem:
( ) ( )
i 0 j0 = 0 < l ( xi , x j ) , iar pentru j = 5 avem:
( ) ( )
10 50 = + > l ( x1, x5 ) = 7 ;
( ) ( )
30 50 = + > l ( x3 , x5 ) = 3 ;
( ) ( )
40 50 = + > l ( x4 , x5 ) = 8 .
( 0) (0) ( 0)
Se pot mbuntii, deci trei valori i anume: 1 , 3 i 4 , astfel c pentru etapa
1 vom lua:
( ) ( )
11 = 50 + l ( x1, x5 ) = 0 + 7 = 7 ;
( ) ( )
31 = 50 + l ( x3 , x5 ) = 0 + 3 = 3 ;
( ) ( )
41 = 50 + l ( x4 , x5 ) = 0 + 8 = 8 .
(1)
= (i ) = + .
0
n rest, pentru i = 0,2,5 vom lua i
Pentru etapa 1 vom scrie toate arcele (dar ncepnd de la vrful x0 ) grafului i vom
(1) ( )
calcula diferenele i j1 corespunztoare:
Vrful x0 :
129
( x0 , x1 ) : (01) 1(1) = + 7 = + > l ( x0 , x1 ) = 2; ( )
(1) (1)
( x0 , x2 ) : 0 2 = + = 0 < l ( x0 , x2 ) = 5;
(1) (1)
( x0 , x4 ) : 0 4 = + 8 = + > l ( x0 , x4 ) = 7; ( )
Vrful x1 :
( x1, x2 ) : 1(1) (21) = 7 = < l ( x1, x2 ) = 1;
(1) (1)
( x1, x4 ) : 1 4 = 7 8 = 1 < l ( x1, x4 ) = 6;
(1) (1)
( x1, x5 ) : 1 5 = ( 7 ) = ( ) < l ( x1, x5 ) = 7;
Vrful x2 :
( x2 , x3 ) : (21) (31) = + 3 = + > l ( x2 , x3 ) = 5; ( )
(1) (1)
( x2 , x4 ) : 2 4 = + 8 = + > l ( x2 , x4 ) = 1; ( )
Vrful x3 :
{( x , x ) :
3 5
(1)
3
( )
51 = 3 = < l ( x3 , x5 ) = 3 ;
Vrful x4 :
(1) (1)
( x4 , x3 ) : 4 3 = 8 3 = 5 > l ( x4 , x3 ) = 2; ( )
(1) (1)
( x4 , x5 ) : 4 5 = 8 = < l ( x4 , x5 ) = 8.
(1) (1) (1)
Se pot mbuntii valorile: 0 , 2 i 4 , i pentru etapa urmtoare vom lua:
(02 ) = 1(1) + l ( x0 , x1 ) = 7 + 2 = 9;
( 2) (1)
0 = 4 + l ( x0 , x4 ) = 8 + 7 = 15.
Cum noi determinm drumul de valoare minim ntre x0 i x5 , vom prefera s lum:
(0 ) = 9 . Pentru (2 ) avem tot dou posibiliti:
2 2
(22 ) = 3(1) + l ( x2 , x3 ) = 3 + 5 = 8;
(2) (1)
2 = 4 + l ( x2 , x4 ) = 8 + 1 = 9.
( 2) ( 2)
Conform aceluiai raionament vom lua: 2 = 8 . Pentru 4 vom avea:
( ) ( ) ( )
42 (
= 31 + l x4 , x3 ) = 3 + 2 = 5 . Deci 42 = 5 . n rest, pentru i = 1,3,5 vom avea:
( ) ( )
i 2 = i1 adic:
130
1( 2 ) = 1(1) = 7; ( )
02 = 9;
( 2) (1) ( )
3 = 3 = 3; 22 = 8;
( 2) (1) ( )
5 = 5 = +; 42 = 5.
Etapa 2
Vrful x0 :
( x0 , x1 ) : (02 ) 1( 2 ) = 9 7 = 2 = l ( x0 , x1 ) ;
( 2) ( 2)
( x0 , x2 ) : 0 2 = 9 8 = 1 < l ( x0 , x2 ) = 5;
( 2) ( 2)
( x0 , x4 ) : 0 4 = 9 5 = 4 < l ( x0 , x4 ) = 7;
Vrful x1 :
( x1, x2 ) : 1( 2 ) (22 ) = 7 8 = 1 < l ( x1, x2 ) = 1;
( 2) (2)
( x1, x4 ) : 1 4 = 7 5 = 2 < l ( x1, x4 ) = 6;
( 2) ( 2)
( x1, x5 ) : 1 5 = 7 = < l ( x1, x5 ) = 7;
Vrful x2 :
( x2 , x3 ) : (22 ) 3( 2 ) = 8 3 = 5 = l ( x2 , x3 ) ;
(2) ( 2)
( x2 , x4 ) : 2 4 = 8 5 = 3 > l ( x2 , x4 ) ; ( )
Vrful x3 :
{ (x ,x ):
3 5
( 2)
3
( )
52 = 3 = < l ( x3 , x5 ) = 3;
Vrful x4 :
( x4 , x3 ) : (42 ) 3( 2 ) = 5 3 = 2 = l ( x4 , x3 ) ;
( 2) ( 2)
( x4 , x5 ) : 4 5 = 5 = < l ( x4 , x5 ) = 8.
( 2)
Se poate mbunti valoarea 2 i pentru etapa urmtoare vom lua:
( ) ( )
23 = 42 + l ( x2 , x4 ) = 5 + 1 = 6 , iar celelalte valori rmn nemodificate.
( ) ( ) ( ) ( ) ( )
03 = 9 , 13 = 7 , 33 = 3 , 43 = 5 , 53 = + .
Etapa 3
Vrful x0 :
131
( x0 , x1 ) : (03) 1( 3) = 9 7 = 2 = l ( x0 , x1 ) ; ( )
( 3) ( 3)
( x0 , x2 ) : 0 2 = 9 6 = 3 < l ( x0 , x2 ) = 5;
( 3) ( 3)
( x0 , x4 ) : 0 4 = 9 5 = 4 < l ( x0 , x4 ) = 7;
Vrful x1 :
( x1, x2 ) : 1( 3) (23) = 7 6 = 1 = l ( x1, x2 ) ; ( )
( 3) ( 3)
( x1, x4 ) : 1 4 = 7 5 = 2 < l ( x1, x4 ) = 6;
( 3) ( 3)
( x1, x5 ) : 1 5 = 7 = < l ( x1, x5 ) = 7;
Vrful x2 :
( x2 , x3 ) : (23) (33) = 6 3 = 3 < l ( x2 , x3 ) = 5;
( 3) ( 3)
( x2 , x4 ) : 2 4 = 6 5 = 1 = l ( x2 , x4 ) ( )
Vrful x3 :
{( x , x ) :
3 5
( 3)
3
( )
53 = 3 = < l ( x3 , x5 ) = 3;
Vrful x4 :
( x4 , x3 ) : (43) (33) = 5 3 = 2 = l ( x4 , x3 ) ; ( )
( 3) ( 3)
( x4 , x5 ) : 4 5 = 5 = < l ( x4 , x5 ) = 8.
Constatm c la sfritul acestei etape pentru nici un vrf al grafului nu se
( 3) ( 4) ( 3)
( )
nregistreaz nici o relaie de forma: i j > l xi , x j , deci valorile i = i ,
i = 0,1,2,3,4,5 , sunt optime. Am marcat cu (*) toate relaiile de forma (3.3.1) verificate cu
semnul = obinute la sfritul etapei 3.
132
Observaie
( 0) (1) ( 2)
= 5( ) = 0 , se obine i drumul 1 = ( x0 , x1, x5 ) .
3
Pe varianta 5 = 5 = 5
l ( xi , x j ) , dac ( xi , x j ) U , i j;
cij = 0 , dac i = j; (3.9.1)
+ ( )
, dac xi , x j U , i j.
( 0)
Se definesc numerele v j = c0 j , j = 0,1, 2,..., n , reprezentnd valoarea minim
a drumurilor de la x0 la x j , j = 1,2,..., n , formate dintr-un singur arc. Aceste valori se afl
pe prima linie a matricei C, respectiv pe linia lui x0 .
Etapa k ( k 1 ).
(k ) (k )
n etapa k se calculeaz numerele v j , j = 1,2,..., n , v0 = 0 , reprezentnd
valoarea minim a drumului de la x0 la x j format din cel mult k + 1 arce, cu relaiile:
( )
n
v(j ) = min cij + vi( ) , j = 1,2,..., n , v0( ) = 0 .
k k 1 k
(3.9.2)
i =0
133
(k )
Valorile v j = v j = v j
( k 1)
, j = 0,1, 2,..., n , obinute la sfritul acestei etape sunt
valorile optime i reprezint, pentru fiecare j = 0,1, 2,..., n , valoarea minim drumului
(k )
(drumurilor) de la x0 la x j . Valoarea vn = vn este valoarea minim a drumului optim de la
x0 la xn . Relaiile (3.9.3) reprezint, n ansamblul lor, condiia de oprire a algoritmului n
faza I.
Faza II determinarea drumului optim (de valoare minim) de la x0 la xn .
Determinarea drumului optim se face n sensul de la xn ctre x0 , astfel:
dac xi este primul vrf care-l precede pe xn pe drumului optim, atunci se caut
n relaia (3.9.2) din ultima etap a fazei I, scris pentru j = n , indicele i pentru care:
vn = cin + vi . (3.9.4)
vm = cim + vi . (3.9.5)
algoritmul se continu pn cnd ultimul vrf determinat al drumului optim este
nsui x0 .
Exemplul 3.9.1
S se determine drumul de valoare minim dintre vrfurile x0 i x6 n graful din
figura 3.8.1, utiliznd aceast variant a algoritmului lui Bellman-Kalaba.
Faza I
Etapa 0.
Matricea C este aceeai ca n cea din exemplul 3.8.1.
x0 x1 x2 x3 x4 x5 x6
0 2 4 5 x0
0 12 1 x1
0 4 2 x2
C=
11 0 2 4 11 x3
0 3 x4
2 0 7 x5
0 x6
( 0)
Numerele v j = c0 j , j = 0,1,...,6 se afl n matricea C pe linia corespunztoare lui
x0 i reprezint valoarea minim a drumurilor de la x0 la x j , j = 1,2,...,6 , formate dintr-
un singur arc. Vectorul V
( 0 ) este urmtorul:
V ( ) = 0,2, ,4,5, ,
( ).
0
134
Etapa 1; k = 1 .
(1) (1)
Calculm numerele v j , j = 1,2,..., n , v0 = 0 , cu relaiile (3.9.2), pentru k = 1 .
Avem:
(1)
Pentru j = 0 : v0 = 0 .
Pentru j = 1 :
( )
6
(1)
v1 = min ci1 + vi( ) = min ( 2 + 0;0 + 2; + ; + 4; + 5; + ; + ) = 2 .
0
i =0
Practic, se adun elementele corespunztoare din coloana lui x1 cu elementele
vectorului V
( 0)
(aflate n aceast etap pe linia lui x0 n matricea C), dup care se determin
cea mai mic valoare din vectorul rezultat.
Pentru j = 2 :
( )
6
(1)
v2 = min ci 2 + vi( ) = min ( + 0;12 + 2;0 + ;11 + 4; + 5;2 + ; + ) = 14
0
i =0
min ( coloana lui x2 + linia lui x0 ) .
Pentru j = 3 :
( )
6
v3( ) = min ci 3 + vi( ) = min ( 4 + 0;1 + 2;4 + ;0 + 4; + 5; + ; + ) = 3
1 0
i =0
min ( coloana lui x3 + linia lui x0 ) .
Pentru j = 4 :
( )
6
v4( ) = min ci 4 + vi( ) = min ( 5 + 0; + 2; + ;2 + 4;0 + 5; + ; + ) = 5
1 0
i =0
min ( coloana lui x4 + linia lui x0 ) .
Pentru j = 5 :
( )
6
v5( ) = min ci 5 + vi( ) = min ( + 0; + 2; + ;4 + 4;3 + 5;0 + ; + ) = 8
1 0
i =0
min ( coloana lui x5 + linia lui x0 ) .
Pentru j = 6 :
( )
6
v6( ) = min ci 6 + vi( ) = min ( + 0;0 + 2;2 + ;11 + 4; + 5;7 + ;0 + ) = 15
1 0
i =0
min ( coloana lui x6 + linia lui x0 ) .
( 0 ) = 0,2, , 4,5, ,
Comparnd, pe componente, cu vectorul V ( ) , se constat c
(1) ( 0) (1)
exist indici j pentru care v j < v j i anume j {2,3,5,6} , deci valorile v j nu sunt
optime, astfel c algoritmul continu.
135
Etapa 2; k = 2 .
( )
6
( 2 ) = min c + v(1) ( 2)
Se calculeaz valorile v j ij i , j = 1,2,...,6 , v0 = 0 (relaiile
i =0
(3.9.2), k = 2 ). Practic, pentru fiecare j = 1,2,...,6 se va aduna (pe componente) coloana
corespunztoare vrfului x j din matricea C cu vectorul V
(1) obinut la sfritul etapei 1,
element cu element i apoi se determin cea mai mic valoare din fiecare vector astfel obinut.
Rezult:
j = 0 : v0( ) = 0 ;
2
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
2 1 1
i =0
j = 2 : v( ) = min ( c + v( ) ) = 10 < v( ) = 14 ;
6
2 1 1
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v( ) ) = 3 = v( ) ;
6
2 1 1
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v ( ) ) = 5 = v( ) ;
6
2 1 1
4 i4 i 4
i =0
j = 5 : v( ) = min ( c + v( ) ) = 7 < v( ) = 8 ;
6
2 1 1
5 i5 i 5
i =0
j = 6 : v( ) = min ( c + v( ) ) = 14 < v( ) = 15 .
6
2 1 1
6 i6 i 6
i =0
( 2)
= ( 0,2,10,3,5,7,14 ) . Comparnd cu vectorul V ( ) obinut
1
Se obine vectorul V
( )
6
Se calculeaz valorile v j
( 3) = min c + v( 2 ) , j = 1, 2,...,6 , v( 3) = 0 i se obine:
ij i 0
i =0
j = 0 : v0( ) = 0 ;
3
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
3 2 2
i =0
j = 2 : v( ) = min ( c + v( ) ) = 9 < v( ) = 10 ;
6
3 2 2
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v ( ) ) = 3 = v( ) ;
6
3 2 2
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v( ) ) = 5 = v( ) ;
6
3 2 2
4 i4 i 4
i =0
j = 5 : v( ) = min ( c + v( ) ) = 7 = v( ) ;
6
3 2 2
5 i5 i 5
i =0
136
( )
6
j = 6 : v6 = min ci 6 + vi( ) = 12 < v6( ) = 14 .
( 3) 2 2
i =0
( 3) = 0,2,9,3,5,7,12
Se obine vectorul V ( ) i n urma comparaiei (pe componente)
( 2 ) se constat c exist indicii j 2,6 pentru care ( 3) ( 2 ) , deci valorile
cu vectorul V { } vj < vj
v(j ) nu sunt optime i algoritmul continu.
3
Etapa 4; k = 4 .
( )
6
Se calculeaz valorile v j
( 4 ) = min c + v ( 3) , j = 1, 2,...,6 , v ( 4 ) = 0 i se obine:
ij i 0
i =0
j = 0 : v0( ) = 0 ;
4
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
4 3 3
i =0
j = 2 : v( ) = min ( c + v( ) ) = 9 = v( ) ;
6
4 3 3
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v( ) ) = 3 = v( ) ;
6
4 3 3
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v( ) ) = 5 = v( ) ;
6
4 3 3
4 i4 i 4
i =0
j = 5 : v( ) = min ( c + v ( ) ) = 7 = v( ) ;
6
4 3 3
5 i5 i 5
i =0
j = 6 : v( ) = min ( c + v( ) ) = 11 < v( ) .
6
4 3 3
6 i6 i 6
i =0
( 4)
Se obine vectorul V = ( 0,2,9,3,5,7,11) i exist indicele i = 6 astfel nct
v6( ) < v6( ) , deci algoritmul continu.
4 3
Etapa 5; k = 5 .
( )
6
Se calculeaz valorile v j
( 5) = min c + v( 4 ) , j = 1, 2,...,6 , v( 5) = 0 i se obine:
ij i 0
i =0
j = 0 : v0( ) = 0 ;
5
( )
6
j = 1 : v1( ) = min ci1 + vi( ) = 2 = v1( ) ;
5 4 4
i =0
j = 2 : v( ) = min ( c + v( ) ) = 9 = v( ) ;
6
5 4 4
2 i2 i 2
i =0
j = 3 : v( ) = min ( c + v( ) ) = 3 = v( ) ;
6
5 4 4
3 i3 i 3
i =0
j = 4 : v( ) = min ( c + v( ) ) = 5 = v( ) ;
6
5 4 4
4 i4 i 4
i =0
137
( )
6
j = 5 : v5 = min ci 5 + vi( ) = 7 = v5( ) ;
( 5) 4 4
i =0
j = 6 : v( ) = min ( c + v( ) ) = 11 = v( ) .
6
5 4 4
6 i6 i 6
i =0
( 5 ) = 0,2,9,3,5,7,11
Se obine vectorul V ( ) care este identic cu V ( 4) de la sfritul
( 5) ( 4)
etapei a 4-a, deci v j = v j pentru toi indicii j = 0,1,...,6 , n acest moment fiind realizat
condiia de oprire a algoritmului.
( 5) = v( 4 ) , j = 0,1,...,6 , reprezint, pentru fiecare j,
Prin urmare valorile v j = v j j ( )
valoarea optim (minim) a drumului optim de la vrful iniial x0 pn la vrful x j .
Faza a II-a determinarea drumului optim de la x0 la x6 .
Determinarea vrfurilor drumului optim se face n sensul de la x6 ctre x0 . Valoarea
( 5)
minim a acestui drum este v6 = v6 = 11 , deci valoarea ultimei componente a vectorului
V ( ) obinut la sfritul etapei a 5-a din faza I.
6
j = 0 : v0 = v0( ) = 0 ;
5
( )
6
v1 = v1( ) = min ci1 + vi( ) =
5 4
j = 1:
i =0
= min ( 2 + 0;0 + 2; + 9; + 3; + 5; + 7; + 11) = 2;
minimul se obine pentru i {0,1} .
( )
6
v2 = v2( ) = min ci 2 + vi( ) =
5 4
j = 2:
i =0
= min ( + 0;12 + 2;0 + 9;11 + 3; + 5;2 + 7; + 11) = 9;
minimul se obine pentru i {2,5} .
( )
6
v3 = v3( ) = min ci3 + vi( ) =
5 4
j = 3:
i =0
= min ( 4 + 0;1 + 2;4 + 9;0 + 3; + 5; + 7; + 11) = 3;
minimul se obine pentru i {1,3} .
( )
6
v4 = v4( ) = min ci 4 + vi( ) =
5 4
j = 4:
i =0
= min ( 5 + 0; + 2; + 9;2 + 3;0 + 5; + 7; + 11) = 5;
minimul se obine pentru i {3,4} .
138
( )
6
( 5)
v5 = v5 = min ci 5 + vi( ) =
4
j = 5:
i =0
= min ( + 0; + 2; + 9;4 + 3;3 + 5;0 + 7; + 11) = 7;
minimul se obine pentru i {3,5} .
( )
6
v6 = v6( ) = min ci 6 + vi( ) =
5 4
j = 6:
i =0
= min ( + 0; + 2;2 + 9;11 + 3;8 + 5;7 + 7;0 + 11) = 11;
minimul se obine pentru i {2,6} .
Presupunem c xi este primul vrf care-l precede pe x6 pe drumul optim de la x0 la
x6 : = { x0 ,..., xi , x6 } . Se caut n relaia (3.9.4) scris pentru j = 6 din ultima etap
indicele i pentru care: v6 = ci 6 + vi = 11 .
Se obine i = {2,6} . Cum x6 este ultimul vrf al drumului optim, rezult i = 2 , deci
x2 este vrful care-l precede pe x6 pe drumul optim: = { x0 ,..., x2 , x6 } .
Cum l ( x2 , x6 ) = 2 , rezult c v6 l ( x2 , x6 ) = 11 2 = 9 = v2 i reprezint
valoarea minim a subdrumului de la x0 la x2 pe drumul optim.
Fie xi vrful care-l precede pe x2 pe drumul optim. Se caut n relaia (3.9.2) scris
pentru j = 2 din ultima etap indicele i pentru care:
v2 = ci 2 + vi = 9 .
Se obine i {2,5} i cum x2 se afl deja pe drumul optim rezult i = 5 , deci x5 l
precede pe x2 pe drumul optim: = { x0 ,..., x5 , x2 , x6 } .
Cum l ( x5 , x2 ) = 2 , rezult c v2 l ( x5 , x2 ) = 9 2 = 7 = v5 i reprezint
valoarea minim a subdrumului de la x0 la x5 pe drumul optim.
Fie xi vrful care-l precede pe x5 pe drumul optim. Se caut n relaia (3.9.2) scris
pentru j = 5 din ultima etap indicele i pentru care:
v5 = ci 5 + vi = 7 .
Se obine i = {3,5} i cum x5 se afl deja pe drumul optim rezult i = 3 , deci x3 l
precede pe x5 pe drumul optim: = { x0 ,..., x3 , x5 , x2 , x6 } .
Cum l ( x3 , x5 ) = 4 , rezult c v5 l ( x3 , x5 ) = 7 4 = 3 = v3 i reprezint
valoarea minim a subdrumului de la x0 la x3 pe drumul optim.
Fie xi vrful care-l precede pe x3 pe drumul optim. Se caut n relaia (3.9.2) scris
pentru j = 3 din ultima etap indicele i pentru care:
v3 = ci 3 + vi = 3 .
Se obine i = {1,3} i cum x3 se afl deja pe drumul optim rezult i = 1 , deci x1 l
precede pe x3 pe drumul optim: = { x0 ,..., x1 , x3 , x5 , x2 , x6 } .
139
Cum l ( x1 , x3 ) = 1 , rezult c v3 l ( x1, x3 ) = 3 1 = 2 = v1 i reprezint valoarea
minim a subdrumului de la x0 la x1 pe drumul optim.
Fie xi vrful care-l precede pe x1 pe drumul optim. Se caut n relaia (3.9.2) scris
pentru j = 1 din ultima etap indicele i pentru care:
v1 = ci1 + vi = 2 .
Se obine i = {0,1} i cum x1 se afl deja pe drumul optim, rezult i = 0 . Dar x0
este primul vrf al drumului optim, astfel c n acest moment s-a ncheiat i faza a II-a a
algoritmului. v1 = 2 reprezint valoarea primului arc, ( x0 , x1 ) al drumului optim. Prin
urmare, drumul de valoare minim dintre vrfurile x0 i x6 este = { x0 , x1 , x3 , x5 , x2 , x6 } ,
este format din 5 arce i are valoarea minim v6 = 11 .
Se constat c rezultatul final este identic cu cel obinut prin algoritmul lui Bellman-
Kalaba n sensul direct de la x0 la x6 , ceea ce era de ateptat.
140
TESTE DE AUTOEVALOARE
Test de autoevaluare
Problema nr. 1
ntr-o ntreprindere exist 7 secii ntre care se face permanent un schimb de produse
sub diferite forme (componente, subansamble, ansamble, etc.). Posibilitile de transport ntre
cele 7 secii sunt reprezentate printr-un graf cu arce valorizate cu 7 vrfuri, avnd matricea
conexiunilor urmtoare:
x1 x2 x3 x4 x5 x6 x7
0 1 0 1 0 0 0 x1
0 0 1 0 0 1 0 x2
1 0 0 0 1 1 1 x3
A= .
1 0 1 0 1 0 0 x4
0 0 0 0 0 1 1 x5
0 1 0 0 0 0 1 x6
0 0 0 0 1 0 0 x7
Valoarea ataat fiecrui arc reprezint timpul de transport dintre seciile
corespunztoare extremitilor arcului respectiv. Matricea valorilor arcelor grafului este
urmtoarea:
x1 x2 x3 x4 x5 x6 x7
0 3 6 x1
0 2 4 x2
3 0 5 1 4 x3
C= .
1 1 0 4 x4
0 3 2 x5
2 0 2 x6
1 0 x7
1) S se construiasc o reprezentare sagital a grafului schemei de transport;
2) S se planifice transportul de la secia x1 la secia x5 astfel nct acesta s se fac
ntr-un timp minim;
3) Cum trebuie organizat transportul ntre oricare dintre cele 7 secii ale ntreprinderii,
astfel nct timpul total de transport s fie minim;
4) Presupunnd c datorit unei mai bune organizri a activitii din ntreprindere se
micoreaz timpul de transport de la secia x2 la secia x6 cu 2 uniti de timp, s se
determine soluia problemei de la punctul 3) n aceast ipotez;
5) n ipoteza apariiei unei defeciuni care necesit suspendarea legturii dintre seciile
x6 i x7 , s se determine noua soluie a problemei de la punctul 4).
141
Problema nr. 2
Pentru prelucrarea unui produs complex ntr-o ntreprindere economic, acesta poate
trece pe la unele din staiile x1 , x2 ,..., x8 , n care se execut anumite lucrri specifice fiecrei
staii de lucru. ntre aceste staii exist un sistem de transport reprezentat printr-un graf a crei
matrice a conexiunilor este urmtoarea:
x1 x2 x3 x4 x5 x6 x7 x8
0 1 0 0 0 0 1 0 x1
0 0 1 0 0 1 0 0 x2
0 0 0 1 1 0 0 1 x3
A= 1 1 0 0 0 0 0 0 x4 .
1 0 0 1 0 0 0 0 x5
0 0 0 1 1 0 0 0 x6
0 1 0 0 1 1 0 0 x7
1 0 0 1 0 0 1 0 x8
Valoarea ataat unui arc oarecare ( xi , x j ) din aceast reea de transport reprezint
creterea, cu numrul respectiv, a beneficiului net pe unitatea de produs cnd acesta trece de
la staia xi la staia x j pentru prelucrarea din staia x j , atunci cnd valoarea este pozitiv,
iar cnd este negativ, reprezint o micorare a acestui beneficiu, datorit faptului c
transportul unitar dintre xi i x j cost mai mult dect se ctig prin mbuntirea adus
prin prelucrarea din staia x j . Matricea valorilor arcelor grafului descris de matricea A este
urmtoarea:
x1 x2 x3 x4 x5 x6 x7 x8
0 2 4 x1
0 2 2 x2
0 1 1 2 x3
C= 1 3 0 x4 .
3 2 0 x5
3 1 0 x6
1 2 3 0 x7
2 1 1 0 x8
1) S se construiasc o reprezentare sagital a grafului sistemului de transport dintre
cele 8 secii ale ntreprinderii;
2) S se determine matricea conex terminal ataat grafului utiliznd algoritmul lui
Chen;
3) S se stabileasc dac graful are circuite;
4) S se determine numrul i lungimea drumurilor (numrul arcelor) dintre oricare
dou vrfuri xi i x j ale grafului;
142
5) S se determine prin care dintre cele opt staii i n ce ordine trebuie transportat
produsul dac, odat ajuns ntr-o staie, el trebuie supus prelucrrii din staia respectiv i
astfel nct mrimea total a beneficiului net pe unitatea de produs s fie maxim;
6) Cum se modific soluia problemei dac beneficiul suplimentar net la unitatea de
produs, transportat de la staia x6 la staia x4 scade cu dou uniti;
7) Determinai cu algoritmul lui Ford valoarea maxim a drumului de la x6 la x5 , n
ipoteza l ( x6 , x4 ) = 3 ;
8) Determinai cu algoritmul lui Bellman-Kalaba valoarea maxim a drumului de la
x6 la x5 n ipoteza de la punctul 6: l ( x6 , x4 ) = 1 .
143
TEME DE CONTROL
Problema nr. 1
O companie de transport mrfuri trebuie s efectueze transportul unor produse ntre
apte puncte economice notate cu x1 , x2 ,..., x7 , acestea fiind ntreprinderi, depozite,
magazine de desfacere, etc. Reeaua de transport este un graf cu 7 vrfuri, x1 , x2 ,..., x7 i
avnd matricele A a conexiunilor, respectiv C a valorilor arcelor, urmtoare:
x1 x2 x3 x4 x5 x6 x7
0 1 0 0 1 1 1 x1
0 0 1 1 0 0 0 x2
1 0 0 1 0 0 0 x3
A= ;
0 1 0 0 0 1 0 x4
0 0 1 1 0 1 0 x5
1 0 1 0 1 0 0 x6
1 0 0 1 0 1 0 x7
x1 x2 x3 x4 x5 x6 x7
0 3 3 2 1 x1
0 2 4 x2
3 0 2 x3
C= .
4 0 2 x4
3 4 0 2 x5
2 3 2 0 x6
1 3 2 0 x7
(
Valoarea arcului xi , x j ) reprezint valoarea cheltuielilor de transport pe unitatea de
produs ntre vrfurile xi i x j ale reelei formate din cele 7 puncte economice.
1) S se construiasc o reprezentare sagital a grafului reelei de transport
corespunztoare matricelor A i C;
2) S se determine modul n care trebuie organizat transportul ntre dou puncte
arbitrare ale reelei astfel nct costul total de transport s fie minim;
3) S se determine modificrile soluiei problemei de transport de la punctul 2) n
ipoteza c nu mai poate fi utilizat legtura de la punctul x1 la punctul x6 .
Problema nr. 2
n departamentul de cercetare al unei fabrici din industria aeronautic s-au fcut studii
i cercetri privind influena anumitor tratamente suplimentare n prelucrarea unor piese
asupra mrimii sau micorrii timpului mediu de funcionare al pieselor respective.
144
Rezultatele cercetrilor au artat c acest timp se mrete sau se micoreaz cu un
anumit numr de uniti de timp, aceasta depinznd numai de ordinea n care se aplic aceste
tratamente.
S-a stabilit c modificarea timpului mediu de funcionare a unei piese eseniale din
ansamblul trenului de aterizare depinde de tratamentul aplicat la un moment dat i de
tratamentul aplicat anterior, existnd numai posibilitile indicate prin arcele unui graf cu 9
vrfuri, reprezentnd cele 9 tratamente posibile care pot fi aplicate. Matricea conexiunilor
acestui graf este urmtoarea:
x1 x2 x3 x4 x5 x6 x7 x8 x9
0 0 0 1 1 1 0 0 0 x1
1 0 1 0 1 0 0 0 0 x2
0 1 0 0 0 0 0 0 1 x3
1 1 1 0 0 0 0 0 0 x4
A= .
0 0 0 0 0 1 0 0 0 x5
0 0 0 0 1 0 1 0 0 x6
0 0 0 0 0 1 0 1 0 x7
0 0 0 0 1 0 1 0 0 x8
0 1 0 0 1 1 0 1 0 x9
Valoarea ataat fiecrui arc ( xi , x j ) reprezint numrul de uniti de timp cu care
crete timpul mediu de funcionare al piesei dac se aplic consecutiv tratamentele xi i x j ,
cu convenia c o valoare pozitiv reprezint o cretere propriu-zis, iar o valoare negativ
reprezint o scdere a acestui timp. Matricea valorilor arcelor grafului este urmtoarea:
x1 x2 x3 x4 x5 x6 x7 x8 x9
0 1 2 6 x1
7 0 4 8 x2
1 0 4 x3
2 2 2 0 x4
C= .
0 5 x5
7 0 1 x6
2 0 1 x7
6 2 0 x8
1 5 3 2 0 x9
Cercetrile au evideniat i faptul c modificrile din timpul mediu de funcionare a
piesei descrise prin graful dat, se cumuleaz prin aplicarea succesiv a mai multor tratamente
succesive, dar nu mai multe de 10; aplicarea a mai mult de 10 tratamente devine incomod i
costisitoare i creterea numrului lor peste 10 nu conduce la modificarea semnificativ a
timpului mediu de funcionare a piesei.
1) S se construiasc o reprezentare sagital a grafului celor 9 tratamente termice,
avnd matricea conexiunilor A i matricea valorilor arcelor C;
145
2) S se determine matricea drumurilor T ataat grafului i s se precizeze dac n
graf exist circuite;
3) S se determine care dintre cele 9 tratamente posibile trebuie efectuate asupra piesei
i care este ordinea aplicrii lor astfel nct timpul mediu de funcionare a piesei s creasc cu
un numr ct mai mare de uniti de timp;
4) Presupunnd c n urma unor studii suplimentare s-a constatat c aplicarea
tratamentului x7 dup tratamentul x5 conduce la creterea timpului mediu de funcionare a
piesei cu 5 uniti de timp, s se determine soluia problemei n aceast ipotez suplimentar.
Problema nr. 3
ntre opt puncte de lucru ale unui sistem economic exist o reea de transport al crui
graf este dat prin matricea A a conexiunilor dintre vrfurile x1 , x2 ,..., x8 ale sale, unde:
x1 x2 x3 x4 x5 x6 x7 x8
0 1 0 0 0 1 0 1 x1
0 0 1 0 1 0 0 0 x2
0 0 0 1 0 0 0 0 x3
A= 0 0 0 0 0 1 0 1 x4 .
1 0 0 1 0 0 0 0 x5
0 0 1 0 1 0 1 0 x6
1 1 0 1 0 0 0 0 x7
0 1 0 0 0 0 1 0 x8
Valorile asociate fiecrui arc ( xi , x j ) reprezint cheltuielile de transport
corespunztoare, pe unitatea de produs transportat, de la punctul xi la punctul x j al reelei.
Matricea valorilor arcelor grafului este urmtoarea:
x1 x2 x3 x4 x5 x6 x7 x8
0 3 2 1 x1
0 5 3 x2
0 3 x3
C= 0 3 2 x4 .
3 4 0 x5
6 0 2 x6
4 2 2 0 x7
2 3 0 x8
1) S se construiasc o reprezentare sagital a grafului cu arce valorizate a sistemului
de transport dintre cele opt puncte ale sistemului economic aferent matricelor A i C;
2) S se determine matricea drumurilor asociat acestui graf utiliznd algoritmul lui
Chen;
3) S se stabileasc dac graful are circuite;
146
4) S se determine cum trebuie organizat transportul ntre oricare dou puncte ale
sistemului astfel nct costul total de transport ntre aceste puncte s fie minim;
5) S se studieze cum se modific aceast organizare dac apare o nou posibilitate de
transport, ntre vrfurile x3 i x7 , valoarea asociat acestui arc fiind de dou uniti bneti.
1. Claude Berge: Teoria grafurilor i aplicaiile ei, Editura tehnic, Bucureti, 1969;
2. Tiberiu Ionescu: Grafuri. Aplicaii, Vol I, II, Editura didactic i pedagogic,
Bucureti, Bucureti, 1973;
3. Al. Rou: Teoria grafurilor. Algoritmi i aplicaii, Editura militar, Bucureti,
1974;
4. C. Dinescu, B. Svulescu: Metode de matematic modern pentru economiti.
Culegere de probleme, Editura didactic i pedagogic, Bucureti, 1975;
5. O. Popescu, D.P. Vasiliu, .a.: Matematici aplicate n economie, Editura didactic
i pedagogic, Bucureti, 1997;
6. Nicolae Micu: Teoria grafurilor, Editura Academiei Militare, Bucureti, 1981;
7. C. Dinescu, I. Ftu: Matematici pentru economiti, vol. II, III, Editura didactic i
pedagogic, Bucureti, 1995.
8. Drago-Radu Popescu: Combinatoric i teoria grafurilor, Biblioteca Societii de
Stiine Matematice din Romnia, Bucureti, 2005.
147
Chestionar feedback
Partea I . Coninut
148
5. Timpul alocat acestui modul a fost suficient?
4) Cunoatei care sunt disciplinele din anii urmtori de studiu la care vei
utiliza cunotinele dobndite la aceast disciplin ?
149