Sunteți pe pagina 1din 7

1.

Gsirea drumurilor ntr-un graf orientat Dac privim graful ca imagine a unui sistem, nodurile reprezentnd componentele sistemului, atunci o interpretare imediat a unui arc (xi,xj) este c, componenta xi influeneaz direct componenta xj. Dac nodurile au semnificaia de stri posibile ale unui sistem atunci un arc (xi,xj) semnific faptul c sistemul poate trece direct din starea xi n starea xj. n ambele cazuri se vede c avem de-a face doar cu informaii despre legturi directe; totui, chiar dac o component xi nu influeneaz direct componenta xj ea o poate influena prin intermediul altor componente, existnd un ir de componente intermediare: x1 x2 ,..., xk, fiecare influennd-o direct pe urmtoarea i xi direct pe x1 iar xk direct pe xj. Astfel, dac dintr-o stare xi nu se poate trece direct ntr-o stare xj s-ar putea totui n mai multe etape, prin alte stri intermediare. Deoarece gsirea acestor influene sau treceri posibile este de obicei foarte important iar pentru un sistem cu mii sau zeci de mii de componente acest lucru nu mai poate fi fcut "din ochi", este necesar formalizarea noiunii de "influene" i "treceri" posibile, nu neaprat directe. Acest lucru a i fost fcut mai sus, deoarece este evident c "xi influeneaz xj" sau "din starea xi se poate trece n starea xj" este echivalent cu existena n graf a unui drum de la nodul xi la nodul xj.

n continuare vom da un algoritm prin care putem gsi toate drumurile dintr-un graf orientat cu un numr finit de noduri.
Pasul 1. Se construiete matricea boolean a adiacenelor directe corespunztoare grafului,

notat cu A. n aceasta se afl, evident, toate drumurile de lungime 1. Este interesant de vzut ce legtur exist ntre aceast matrice i drumurile de lungime 2. Fie dou noduri xi i xj oarecare din graf. Existena unui drum de lungime 2 ntre ele presupune existena unui nod xk, din graf, cu proprietatea c exist att arcul (xi,xk) ct i arcul (xi,xk). Pentru a vedea dac acesta exist, lum pe rnd fiecare nod al grafului i verificm dac exist sau nu ambele arce ((xi,xk) i (xi,xk)). Aceasta este echivalent cu a verifica dac, n matricea boolean a adiacenelor directe, exist vreun indice k astfel nct elementul k al liniei i i elementul k al coloanei j s fie ambele egale cu 1. Dac folosim operaiile algebrei booleene de adunare i nmulire:


0 1

0 0 1

1 1 1


0 1

0 0 0

1 0 1

atunci verificrile de mai sus sunt echivalente cu a verifica dac elementul de pe poziia (i,j) din A2 este egal cu 1. Valoarea 1 spune doar c exist cel puin un drum de lungime 2 de la xi la xj. Dac dorim s vedem i cte sunt, vom folosi regulile de nmulire i adunare obinuit. De asemenea, se poate observa c existena unui drum de lungime 3 de la xi la xj presupune existena unui nod xk astfel nct s existe un drum de lungime 2 de la xi la xk i un arc de la xk la xj, care este echivalent cu a verifica dac exist vreun indice k astfel nct elementul k al liniei i din matricea A2 i elementul k al coloanei j din A sunt ambele egale cu 1 sau, mai simplu, dac elementul (i,j) din A3 este 1. Din cele de mai sus se observ c existena drumurilor de lungime k este dat de valorile matricei Ak, dac s-au folosit regulile algebrei booleene i numrul lor este dat de Ak, dac s-au folosit regulile obinuite.
Pasul 2. Vom calcula succesiv puterile lui A pn la puterea An-1

Dac ntre nodurile xi i xj exist un drum de lungime n atunci el va conine un numr de noduri mai mare sau egal cu n+1 i, cum n graf sunt doar n vrfuri, este clar c cel puin unul, s zicem xk, va aprea de dou ori. Vom avea n acest caz un drum de la xi pn la prima apariie a lui xk, i un drum de la ultima apariie a lui xk la xj. Eliminnd toate nodurile dintre prima apariie a lui xk i ultima apariie a sa vom obine un drum de la xi la xj, n care xk apare o singur dat. Aplicnd acest procedeu pentru toate nodurile care apar de mai multe ori pe drum, vom obine un drum de la xi la xj, n care fiecare nod apare o singur dat (deci un drum elementar), care are evident cel mult n-1 arce. n concluzie, dac exist vreun drum de la xi la xj atunci exist i un drum elementar i, deci, va exista o putere a lui A, ntre A1 i An-1, n care poziia (i,j) este diferit de 0. Pentru deciderea existenei unui drum ntre oricare dou noduri este suficient, deci, calcularea doar a primelor n-1 puteri ale lui A. Se calculeaz matricea D = A + A2 + ... + An-1 Dac ne intereseaz doar existena drumurilor dintre noduri, nu i numrul lor, vom folosi nmulirea i adunarea boolean i conform observaiei de mai sus:

1, daca exista drum de la xi la xj dij = 0, in caz contrar

Procedeul de mai sus nu asigur dect aflarea faptului dac exist sau nu drum ntre dou noduri, eventual ce lungime are i cte sunt de aceast lungime. Totui, n problemele practice cel mai important este s tim care sunt efectiv aceste drumuri. Deoarece toate drumurile pot fi descompuse n drumuri elementare i n problemele practice n general acestea sunt cele care intereseaz, paii urmtori ai algoritmului vor fi dedicai gsirii lor. Pentru gsirea acestora se folosete reprezentarea grafului prin matricea latin. Matricea latin este o matrice ptratic nxn n care pe o poziie aij va fi xixj dac exist arcul (xi,xj) i 0 n caz contrar.
Pasul 3. Construim matricea latin L asociat grafului, unde:

xixj, dac exist arcul (xi,xj) lij = i matricea L(1), definit prin: xj, dac exist arcul (xi,xj) l(1)ij = numit matricea latin redus. Gsirea unui drum de lungime 2 de la xi la xj presupune gsirea unui nod cu proprietatea c exist arcele (xi,xk) i (xk,xj) i memorarea vectorului (xi, xk, xj). Aceasta este echivalent cu a gsi un indice k astfel nct elementul de pe poziia k a liniei i, din matricea L, s fie xi,xk i elementul de pe poziia k al coloanei j, din matricea L(1), s fie xj. Vom nmuli deci matricea L cu matricea L(1), folosind ns nite reguli de calcul speciale, numite nmulire i adunare latin. Definiia 1: Se numete alfabet o mulime de semne numite simboluri sau litere {siiI} unde I este o mulime oarecare de indici, finit sau nu. Definiia 2: Se numete cuvnt un ir finit de simboluri notat si1si2.....sin. Definiia 3: Se numete nmulire latin o operaie definit pe mulimea cuvintelor unui alfabet, notat "xL", astfel: si1si2.....sin xL sj1sj2.....sjm = si1si2.....sin sj1sj2.....sjm (produsul a dou cuvinte se obine prin concatenarea lor) 0, n caz contrar 0, n caz contrar

nmulirea latin este asociativ, are ca element neutru cuvntul vid, nu e comutativ i un element este inversabil doar dac este cuvntul vid. Definiia 3: Se numete adunare latin o funcie definit pe mulimea cuvintelor unui alfabet cu valori n mulimea parilor mulimi cuvintelor, notat +Lastfel: si1si2.....sin +L sj1sj2.....sjm = (si1si2.....sin, sj1sj2.....sjm) (suma a dou cuvinte este mulimea format din cele dou cuvinte)
Pasul 4. Se calculeaz succesiv matricile:

L2 = L xLL(1), L3 = L2xLL(1),

...,Lk+1 = LkxLL(1)

folosind operaiile de nmulire i adunare latin, alfabetul fiind mulimea nodurilor grafului, unde operaia de nmulire este uor modificat, produsul dintre dou elemente ale matricilor fiind 0, dac unul dintre ele este 0 sau au un nod comun i este produsul latin al lo r, n caz contrar. Din felul cum a fost construit, matricea Lk va conine toate drumurile elementare de lungime k. Cum un drum elementar poate avea cel mult n noduri (cte are graful cu totul) rezult c: primele n-1 puteri ale lui L conin toate drumurile elementare din graf; puterile lui L mai mari sau egale cu n au toate elementele egale cu 0; matricea Ln-1 conine toate drumurile hamiltoniene din graf (dac exist). Observaie: Deoarece obinerea matricii D prin metoda de mai sus presupune un volum foarte mare de calcule (de exemplu, dac graful are 100 de noduri, ridicarea unei matrici de 100100 la puterea 100) pentru obinerea acesteia se poate aplica i urmtorul algoritm: Pas 1. Se construiete matricea de adiacen A; Pas 2. Pentru fiecare linie i se adun boolean la aceasta toate liniile j pentru care aij=1. Pas 3. Se reia pasul 2 pn cnd, dup o aplicare a acestuia, matricea rmne aceeai (nu mai apare nici un 1) Ultima matrice obinut este matricea drumurilor D numit i matricea conexiunilor totale. Aceast metod, dei mai simpl nu spune ns i care sunt aceste drumuri, pentru gsirea lor aplicndu-se, de exemplu, nmulirea latin.

Drumuri optime ntr-un graf orientat

n marea majoritate a problemelor care pot fi modelate prin grafuri nu ne intereseaz numai dac exist sau nu legturi ntre componentele reprezentate prin nodurile grafului ci i intensitatea acestora. Aceast intensitate are semnificaia unei valori numerice (pozitive sau negative) asociate arcului corespunztor legturii a crei intensitate o msoar. n aplicaiile economice aceast valoare poate fi: lungimea drumului dintre dou localiti; costul parcurgerii rutei reprezentate prin arcul corespunztor; durata parcurgerii rutei respective; cantitatea transportat pe ruta respectiv; capacitatea maxim a rutei respective; ctigul realizat prin trecerea de la o stare la alta a sistemului; consum de energie pentru efectuarea trecerii respective; punctaj realizat etc. Una din problemele care poate aprea n aceste situaii este gsirea, pentru o anumit pereche de noduri (sau mai multe perechi), a drumului optim ntre acestea. Pentru formalizarea problemei vom introduce noiunea de valoare a unui drum, care este egal cu suma valorilor arcelor care l compun. Vom nota n continuare valoarea unui arc (xi,xj) cu c(xi,xj) sau cu cij. n aceste condiii putem enuna problema drumului optim astfel: "Dat un graf G=(X,U) i o funcie care asociaz fiecrui arc o valoare real, s se gseasc, pentru o pereche dat de noduri, drumul (drumurile) de valoare optim (minim sau/i maxim) ntre cele dou noduri i valoarea acestuia (acestora)" Deoarece este vorba de gsirea minimului unei mulimi de numere reale, prima ntrebare care se pune este dac aceasta admite minim. Dac mulimea nodurilor grafului este infinit atunci pot exista o infinitate de drumuri elementare distincte ntre cele dou noduri i mulimea valorilor acestora poate avea orice form (nchis sau nu, mrginit sau nu) devenind foarte greu de caracterizat cazurile cnd minimul dorit exist. Deoarece totui majoritatea covritoare a

problemelor economice se modeleaz prin grafuri cu numr finit de noduri, ne vom limita n continuare doar la acestea. Un numr finit de noduri n atrage dup sine existena unui numr finit de arce (cel mult

n2) i a unui numr finit de drumuri elementare ( cel mult nn! k 1

k!
1

n -1

). Deoarece oricrui drum

d i corespunde un drum elementar de (obinut prin eliminarea tuturor subcircuitelor lui d) putem calcula valoarea oricrui drum ca sum ntre valoarea drumului elementar corespunztor i valorile unor subcircuite ale sale, fiecare nmulit cu numrul de parcurgeri ale circuitului respectiv. n concluzie, dac exist un circuit de valoare negativ nseamn c exist drumuri de valoare orict de mic (cele care conin acest circuit), obinut prin parcurgerea acestuia de oricte ori dorim) i, deci, mulimea valorilor drumurilor este nemrginit inferior, neexistnd drum de valoare minim. Dac exist un circuit de valoare pozitiv atunci exist drumuri de valoare orict de mare i mulimea valorilor drumurilor este nemrginit superior, neexistnd drum de valoare maxim. Dac nu exist circuite de valoare negativ atunci valoarea oricrui drum este mai mare sau egal cu a drumului elementar corespunztor, deci drumul de valoare minim (dac exist) va fi un drum elementar. Cum mulimea drumurilor elementare este finit (i deci i mulimea valorilor lor) va avea minorant i am lmurit problema compatibilitii problemei. Analog, dac nu exist circuite de valoare pozitiv atunci valoarea oricrui drum este mai mic sau egal cu a drumului elementar corespunztor, deci drumul de valoare maxim (dac exist) va fi un drum elementar. Cum mulimea drumurilor elementare este finit (i deci i mulimea valorilor lor), va avea majorant. Obs. 1. Dac n graf nu exist dect arce de valoare pozitiv atunci exist drum de valoare minim. Obs. 1. Dac n graf nu exist dect arce de valoare negativ atunci exist drum de valoare maxim. Obs. 1. Dac n graf nu exist circuite atunci exist i drum de valoare minim i drum de valoare maxim. Deoarece din cele de mai sus se sesizeaz importana existenei circuitelor ntr-un graf vom da n continuare un algoritm de depistare a existenei circuitelor ntr-un graf:
Pasul 1. Se construiete mulimea A format din nodurile pentru care toate arcele incidente sunt

incidente spre interior ( noduri n care toate arcele "intr" sau, altfel spus, noduri din care nu "pleac" nici un arc).

Pasul 2. Se gsesc toate nodurile care nu sunt din A pentru care toate arcele incidente au cealalt

extremitate n A (noduri din care se poate "ajunge" doar in A). Dac nu exist nici un astfel de arc se trece la pasul 4.
Pasul 3. Se adaug arcele gsite la pasul 2 la mulimea A apoi se reia algoritmul de la pasul 2,

pentru noua mulime A.


Pasul 4. Dac A conine mulimea tuturor nodurilor atunci graful nu conine circuite. Dac au

rmas noduri n afara lui A atunci graful conine circuite. n general, algoritmii existeni pentru determinarea drumurilor optime n grafuri se mpart n dou mari categorii: algoritmi pentru drumuri minime n grafuri orientate, respectiv algoritmi pentru drumuri maxime. Deasemeni, exist dou mari categorii de probleme i anume: determinarea drumurilor optime de surs unic (surs unic, destinaii multiple) determinarea drumurilor optime ntre toate perechile de vrfuri (surse multiple, destinaii multiple)