Manual Grafuri

Embed Size (px)

Citation preview

  • 8/3/2019 Manual Grafuri

    1/116

    Theory without practice is useless; practice without theory is blindRoger Bacon

    Aceast lucrare cuprinde o selecie de probleme importante care pot firezolvate cu ajutorul teoriei grafurilor. n acest scop am enunat problemeteoretice mpreun cu aplicaii practice ale acestora, urmate de descrieri aleunor metode de rezolvare.

    Primul capitol ncepe cu o introducere n analiza algoritmilor, urmat deprezentarea unor noiuni de baz din teoria grafurilor. Capitolul continu cutehnici de reprezentare a grafurilor, i se ncheie cu un algoritm de conversientre tehnicile de reprezentare descrise. Se insist asupra acelor tehnici careconduc la algoritmi eficieni din punctul de vedere al complexitii.

    Urmtoarele capitole prezint probleme clasice din acest domeniu:parcurgerea unui graf n lime i adncime, drumuri minime i maxime,determinarea unui arbore parial de cost minim. Pentru fiecare problem sntdescrii algoritmi eficieni de rezolvare i aplicaii ale acestora.

    Alte probleme tratate n cadrul acestei lucrri: reele de transport igrafuri planare. Ultimul capitol este rezervat problemelor NP-complete, unsubiect foarte fierbinte la ora actual n informatica teoretic.

    n ceea ce privete algoritmii descrii, nu am urmrit perfeciunea dinpunctul de vedere al complexitii. Atunci cnd am avut de ales ntre unalgoritm excesiv de eficient i un altul avnd o complexitate acceptabil, am

    preferat un algoritm care are o descriere simpl i uor de urmrit. n unelecazuri am prezentat mai multe soluii, urmnd ca informaticianul s decidce algoritm alege n funcie de problema concret, volumul datelor deintrare, simplitatea implementrii etc.

    Pentru unele probleme enunate am detaliat algoritmi de rezolvare,descrii astfel nct implementarea s fie imediat. Pentru alte probleme amsugerat doar ideea de baz, rmnnd ca informaticianul s elaboreze unalgoritm de rezolvare a acestora.

    Manualul prezint n anexa de la sfrit i alte tehnici de reprezentare a

    grafurilor, precum i algoritmi simpli pentru rezolvarea unor probleme bazai pe aceste tehnici de reprezentare. Am preferat s includ acestesubiecte ntr-o anex, deoarece scopul acestui manual este de a prezenta celemai eficiente soluii pentru rezolvarea diverselor probleme care se bazeaz

    pe teoria grafurilor.Manualul poate fi folosit cu succes de elevii i studenii care se

    pregtesc pentru concursuri de informatic, dar i de informaticienii caretrebuie s proiecteze aplicaii eficiente bazate pe teoria grafurilor.

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    3

  • 8/3/2019 Manual Grafuri

    2/116

    1. Preliminarii

    1.1. Algoritmi

    Toi algoritmii descrii n cadrul acestei lucrri folosesc structuride date de tip graf. Unele descrieri snt nsoite de o analiz acomplexitii algoritmului respectiv. Pentru ca analiza s poat fiurmrit mai uor de cititor, n cadrul acestei seciuni snt prezentatenoiuni de baz.

    Definiia 1.1. Un algoritm este un set de instruciuni care trebuieexecutate pentru a se obine un rspuns la o problem dat.

    Un algoritm are urmtoarele proprieti (Knuth) (Burdescu, p 10):finitudine: trebuie s se termine ntotdeauna dup un numr finit depai (instruciuni);determinism: fiecare pas trebuie s fie exact precizat, n mod rigurosi neambiguu;

    generalitate: trebuie s rezolve problema pentru orice date de intraredin domeniul precizat;efectivitate: fiecare instruciune trebuie s fie exact i de duratfinit.

    Ultima proprietate trebuie nuanat, avnd n vedere faptul cmemoria oricrui calculator este limitat. Nu ntotdeauna operaiilearitmetice se efectueaz exact, n unele cazuri obinndu-se oaproximare a rezultatelor, cum snt de exemplu implementrile bazate

    pe aritmetica n virgul mobil (Goldberg).

    n cadrul acestei lucrri algoritmii snt descrii ntr-un limbaj detip Algol, un precursor al limbajului Pascal (cf Aho et al).

    Avnd un algoritm care rezolv o problem dat, urmeaz sdeterminm resursele acestuia. Concret, de ct memorie i timp avemnevoie ca s obinem soluia problemei? n acest scop facemurmtoarele simplificri: fiecare operaie elementar a algoritmului seexecut ntr-o unitate de timp, informaiile despre un obiect elementarse memoreaz ntr-o locaie de memorie (Livovschi, Georgescu).______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    4

  • 8/3/2019 Manual Grafuri

    3/116

    Fie f:NN o funcie care indic relaia dintre numrul devalori (date de intrare) prelucrate de un algoritm, i numrul deoperaii elementare efectuate de acesta pentru obinerea rezultatelor.

    Funcia f poate avea o expresie analitic destul de complicat, deaceea considerm nc o funcie g:NN cu o expresie analiticsimplificat.

    Definiia 1.2. Funcia f are ordinul de mrime cel mult g(n),notaie: fO(g(n)), dac i numai dac exist dou valori, c> 0 in0N astfel nct pentru orice n>n0 s avem f(n) cg(n).

    O(g) = { h:NN | c> 0, n0N a. . n>n0, h(n) cg(n) }.

    Definiia 1.3. Funcia f are ordinul de mrime cel puin g(n),notaie: f (g(n)), dac i numai dac exist dou valori, c> 0 in0N astfel nct pentru orice n>n0 s avem f(n) cg(n).

    (g) = { h:NN | c> 0, n0N a. . n>n0, h(n) cg(n) }.

    Definiia 1.4. Funcia fare ordinul de mrime g(n), notaie: f (g(n)), dac i numai dac exist trei valori, c1,c2> 0 i n0Nastfel nct pentru orice n>n0 s avem c1g(n) f(n) c2g(n).

    (g) = { h:NN | c1,c2> 0, n0N a. . n>n0, c1g(n) h(n) c2g(n) }.

    Prezentm dou rezultate remarcabile care vor fi folosite peparcursul lucrrii (Knuth):

    (1) Se d un ir de n valori dintr-un domeniu pe care este definito relaie de ordine total. Cel mai eficient algoritm de ordonare a

    irului dat, care se bazeaz pe comparaii, are complexitate de ordin (n log n).(2) Se d un ir de n valori ordonate. Cutarea unei valori

    (localizarea poziiei acesteia sau obinerea unui rspuns negativ) nirul dat necesit un timp de ordin O(log n).

    O categorie special de probleme, numite NP-complete, secaracterizeaz prin urmtoarele:

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    5

  • 8/3/2019 Manual Grafuri

    4/116

    nu se cunosc algoritmi eficieni (de complexitate polinomial), secunosc n schimb algoritmi de complexitate exponenial pentrurezolvarea acestora;

    o problem NP-complet este polinomial transformabil ntr-o altproblem tot NP-complet: dac se rezolv o problemA, soluia uneialte probleme B se poate obine printr-o transformare n timp

    polinomial din soluia problemeiA.Cea mai general problem NP-complet este problema

    satisfiabilitii: fiind dat o expresie logic n forma normalconjunctiv cu n variabile, s se determine dac pot fi atribuite valorilogice variabilelor astfel nct expresia s fie adevrat (Cook).

    Complexitatea medie. Considerm un algoritm care proceseazn valori date la intrare. Pentru o anumit configuraie a valorilor, probabilitatea configuraiei fiind pi, snt necesare fi(n) operaii.Complexitatea medie a algoritmului este o sum ponderat:

    i

    ii nfp )( .

    Exemplu. Algoritmul Quick-sort necesit un timp de ordinO(n logn) n majoritatea cazurilor pentru a ordona un ir de n valori.Exist ns cteva configuraii (foarte puine) care au nevoie de untimp de ordin O(n2) pentru a fi procesate. Complexitatea medie aacestui algoritm este de ordin O(n logn) (Knuth).

    ntr-un mod similar se poate defini noiunea de complexitate pentru necesarul de memorie. Aceasta arat ct memorie estenecesar pentru rezultatele intermediare i cele de ieire.

    Definiiile date mai sus asigur o estimare a eficienei unuialgoritm independent de o implementare practic a acestuia,

    implementare bazat pe un limbaj concret de programare, urmrindu-se ascunderea factorului multiplicativ. Totui acest factor nu poatefi ntotdeauna ignorat, deoarece exist probleme care admit mai mulialgoritmi cu acelai ordin de complexitate. n asemenea situaii se

    poate determina, pe baza unor experimente, care este algoritmul celmai eficient din punct de vedere practic. Pot fiu luate n consideraremai multe criterii: timpul mediu de rspuns cel mai bun, simplitateaimplementrii etc.______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    6

  • 8/3/2019 Manual Grafuri

    5/116

    Se apreciaz c un algoritm este eficient dac are complexitate deordin cel mult O(n logn). Dac volumul datelor de intrare este mic(pn la ordinul miilor) se poate accepta i un algoritm de ordin O(n2).

    1.2. Grafuri: noiuni de baz

    Grafuri orientate

    Definiia 1.5. Ungraf orientateste un cuplu G= (X,U), undeXeste o mulime finit i nevid de elemente numite vrfuri, i U XXeste o mulime de elemente numite arce.

    n continuare vom nota |X|= n, |U|= m; aceste notaii vor fifolosite pe parcursul ntregii lucrri, i au fost preluate din literaturafrancez (Berge) (Gondran, Minoux). Notaiile consacrate n literaturaanglo-saxon snt: V(vertices) iE(edges).

    Fie un arc u = ( x,y)U. Spunem c arcul u are sensul (sauorientarea) de la x la y. Vrful x este extremitate iniial ipredecesorulluiy, i vrful y este extremitate finali succesorulluix. Deci n precizarea unui arc conteaz ordinea vrfurilor.

    Fie un arc u = ( x,y)U. Dac exist i arcul u = ( y,x)Uatuncifiecare arc este inversulceluilalt.

    Dou vrfuri snt adiacente dac ntre ele exist un arc. Dou arcedistincte snt adiacente dac au o extremitate comun.

    Definiia 1.6. Ungraf orientateste un cuplu G= (X, ), undeXeste o mulime de elemente numite vrfuri, i este o aplicaiemultivoc :XX (adic o funcie definit pe X cu valori nfamilia P(X) a prilor luiX).

    (x) desemneaz lista succesorilor vrfului x. DacxXatunciy (x) precizeaz c de la vrful x la vrful y exist un arc ispunem cy este succesor al lui x. Spunem cx este predecesor al luiy i notm x 1(y). 1(x) desemneaz lista predecesorilorvrfuluix.

    Fiind dat un graf G= (X, ), graful G= (X, 1) este grafulinvers asociat grafului G. n literatura de specialitate acesta este numitgraful transpus, deoarece matricea de adiacen a acestui graf estetranspusa matricei grafului original.______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    7

  • 8/3/2019 Manual Grafuri

    6/116

    Definiia 1.7. Fie un grafG= (X, ) i xXun vrf. Notm cug+(x) numrul succesorilor si, adic | (x)|; acest numr se numetesemigradul exterior al lui x. Notm cu g(x) numrul predecesorilorsi, adic | 1(x)|; acest numr se numete semigradul interioral luix. Suma g(x)= g+(x) +g(x) se numete gradul lui x. Dac g(x)= 0spunem c vrfulx este izolat.

    Cele dou definiii snt analoge: (x)= {yX| (x,y)U}; (x,y)U dac i numai dac y (x).

    Grafuri particulare. Un graf orientat este simetric dac pentruorice pereche de vrfurix,yX avem: (x,y)U implic (y,x)U.

    Un graf este bipartitdac exist o partiieX=X1 X2 astfel nctpentru orice (x,y)UavemxX1 iyX2.

    Un graf G= (A,V) este subgraf al grafului G = ( X,U) dacA Xi V= (AA)U.

    Un grafG= (X,V) estegraf parialal grafului G= (X,U) dacV U.

    Un grafG= (A,V) este subgraf parialal grafului G= (X,U)dacA Xi V (AA)U.S observm c un graf parial are aceeai mulime de vrfuri cu

    graful iniial, i doar o parte din arcele acestuia. n schimb un subgrafare doar o parte din vrfurile grafului iniial, i toate arcele acestuiacare au ambele extremiti n aceast submulime de vrfuri.

    Definiia 1.8 (drumuri ntr-un graf). Fiind dat un graf orientatG= (X,U), un drum n graful G este o succesiune de arce cu

    proprietatea c extremitatea terminal a unui arc coincide cuextremitatea iniial a arcului urmtor din drum. Un drum se poatedefini i prin succesiunea de vrfuri care snt extremiti ale arcelor cecompun drumul: o succesiune de vrfuri cu proprietatea c orice douvrfuri consecutive snt unite printr-un arc.

    Un drum ntr-un graf este:simplu, dac nu folosete de dou ori un acelai arc;compus, dac nu e simplu;

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    8

  • 8/3/2019 Manual Grafuri

    7/116

    elementar, dac nu trece de dou ori prin acelai vrf;eulerian, dac este simplu i folosete toate arcele grafului;hamiltonian, dac este elementar i trece prin toate vrfurilegrafului;circuit, dac extremitatea iniial a drumului coincide cu cea final.

    Un laneste o succesiune de arce cu proprietatea c orice arc areun vrf comun cu arcul precedent i cellalt vrf comun cu arculurmtor.

    S observm c ntr-un drum toate arcele au aceeai orientare, dela vrful iniial la vrful final. n schimb ntr-un lan fiecare arc poateavea orice orientare.

    Grafuri neorientate

    Definiia 1.9. Un graf neorientateste un cuplu G = ( X,U), undeXeste o mulime de elemente numite vrfuri, i Ueste o mulime de perechi neordonate de vrfuri numite muchii. O muchie (x,y) nu areorientare, astfel c (x,y)= (y,x).

    O muchie este incident vrfurilor care snt extremiti ale sale.Dou vrfuri snt adiacente dac ntre ele exist o muchie. Dou

    muchii snt adiacente dac au o extremitate comun. Gradulunui vrfx este numrul de muchii incidente cu acesta i se noteaz g(x).

    Definiia 1.10. Un lan este o succesiune de muchii cuproprietatea c orice muchie are un vrf comun cu muchia precedenti cellalt vrf comun cu muchia succesoare.

    n mod analog definim noiunea de ciclu corespunztoare noiuniide circuit de la grafuri orientate.

    Grafuri ponderate

    Definiia 1.11. Un graf ponderateste un triplet G= (X,U,c),unde Xi Uau semnificaiile cunoscute, i c :UR+ este o funciecost care asociaz fiecrui arc (fiecrei muchii) o valoare (pondere).

    Un graf ponderat poate fi definit i cu ajutorul funciei .

    Exemplu. Avem o hart rutier care conine urmtoareleinformaii: poziia fiecrei localiti, legturile directe dintre localiti______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    9

  • 8/3/2019 Manual Grafuri

    8/116

    mpreun cu distana i timpul necesare parcurgerii fiecrei legturi.Trebuie s determinm un drum de cost minim (criteriul fiinddistana sau timpul) dintre dou localiti. Graful asociat problemei se

    obine lund ca vrfuri localitile, i nlocuind fiecare legtur cudou arce avnd acelai cost i orientri opuse dac legtura este nambele sensuri, sau cu un singur arc dac legtura este ntr-un singursens.

    1.3. Tehnici de reprezentare

    Reprezentare grafic

    S considerm cteva puncte de interes ale unei localiti ilegturile directe dintre acestea. Punctele de interes snt reprezentate

    prin vrfuri ale grafului, i legturile dintre acestea prin arce. Dactoate legturile dintre dou puncte snt n ambele sensuri, atunci grafuleste neorientat; n acest caz o muchie este reprezentat printr-o liniedreapt. Dac exist cel puin o legtur ntr-un singur sens, atuncigraful este orientat; n acest caz este precizat orientarea arcului.

    Figura 1.1. Un graf neorientat (a), un graf orientat (b).Pentru graful orientat din figura 1.1 (b) avem:

    X= {0 ,1 ,2 ,3 ,4 }U= {(0,1), (0,3), (1,2), (1,3), (2,4), (3,0), (3,2), (3,4), (4,2) }

    Funcia este definit astfel: (0)= {1, 3}; (1)= {2, 3}; (2)= {4}; (3)= {0 , 2 , 4 }; (4)= {2}.

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    10

  • 8/3/2019 Manual Grafuri

    9/116

    Exemple de trasee pentru graful neorientat din figura 1.1 (a):(x0,x1,x2,x4,x3,x0) ciclu hamiltonian;(x1,x0,x3,x1,x2,x3,x4,x2) lan eulerian.

    Exemple de trasee pentru graful orientat din figura 1.1 (b):(x0,x1,x3,x2,x4) drum hamiltonian;(x0,x1,x2,x3,x4) lan; nu este drum deoarece nu exist

    arcul (x2,x3) ci numai arcul (x3,x2).Reprezentare bazat pe lista arcelor

    Se folosesc dou masive, ambele au un numr de elemente egalcu numrul de arce, i pentru fiecare arc se memoreaz cele douextremiti. Exemplu:

    Extr_ini 0 0 1 1 2 3 3 3 4Extr_fin 1 3 2 3 4 0 2 4 2

    Pentru un graf ponderat se folosete un al treilea masiv dememorie, unde se memoreaz costurile arcelor.

    Reprezentare bazat pe funcia (liste de succesori)Se folosesc dou masive de memorie; primul masiv are n+1

    elemente, i indic poziiile din cel de-al doilea masiv unde se gsescvalorile funciei pentru fiecare vrf al grafului; al doilea masiv arem elemente.

    Graful orientat din figura 1.1 (b) se reprezint astfel (considermc indicii celor dou masive iau valori ncepnd cu 0):(H) Poziii 0 2 4 5 8 9

    (S) Valorile 1 3 2 3 4 0 2 4 2funciei (0) (1) (2) (3) (4) (5) (6) (7) (8)Primul masiv (H) are semnificaia de tabel hash pentru o cutare

    rapid n cel de-al doilea masiv (S). Fiecare list de succesori (x) sedescrie pe poziiile de la H[x] pn la H[x+1]1. Pentru a uuracitirea corespondenei dintre cele dou masive am pus n evidenindicii pentru masivul care reprezint valorile funciei .

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    11

  • 8/3/2019 Manual Grafuri

    10/116

    Pentru un graf ponderat se folosete un al treilea masiv dememorie, unde se memoreaz costurile arcelor.

    Tehnica descris mai sus este cea mai compact i mai eficient

    pentru majoritatea algoritmilor care se bazeaz pe parcurgerea unuigraf (Gondran, Minoux, p 8-9). n acelai timp aceasta poate fifolosit numai pentru grafuri statice i numai dac se cunoate de lanceput topologia acestuia. Pentru grafuri care se actualizeaz n moddinamic se recomand alte structuri de date adecvate acestui scop (deexemplu liste nlnuite).

    n ultima seciune a acestui capitol este descris un algoritm carepermite obinerea reprezentrii unui graf pe baza funciei .

    Reprezentare implicit

    Spre deosebire de reprezentrile descrise mai sus, care sntexplicite, n continuare vom vedea c legturile dintre vrfuri pot fideduse dintr-o hart descris ntr-un anumit mod.

    Fie un labirint de form dreptunghiular, cu o hart cunoscutavnd n linii i m coloane. n continuare prezentm dou posibilereprezentri ale acestuia.

    (1) Considerm mai nti un labirint n care pereii snt construiidin blocuri avnd forma unui ptrat de latur unitate. Descrierea estefoarte simpl, fiecare element aij avnd semnificaia:

    aij=

    a c cd ed r u m

    p e r e t e

    ,0,1

    Liniile snt numerotate de la 0 la n1 de sus n jos, i coloanelesnt numerotate de la 0 la m1 de la stnga la dreapta.

    Direciile posibile de deplasare dintr-o camer de coordonate (x,y)snt:

    (x,y1) spre nord; (x1,y) spre vest;(x,y+1) spre sud; (x+1,y) spre est.

    Aceast reprezentare permite doar descrierea unui graf neorientat.______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    12

  • 8/3/2019 Manual Grafuri

    11/116

    (2) n al doilea caz labirintul este alctuit din camere, fiecarecamer putnd comunica sau nu cu oricare din camerele vecine.Descrierea este mai complex, fiecare camer avnd asociat o valoare

    aij care se reprezint pe 4 bii astfel: bitul 0 are valoarea zero dac exist u spre est; bitul 1 are valoarea zero dac exist u spre nord; bitul 2 are valoarea zero dac exist u spre vest; bitul 3 are valoarea zero dac exist u spre sud.

    Liniile snt numerotate de la 0 la n1 de sus n jos, i coloanelesnt numerotate de la 0 la m1 de la stnga la dreapta.

    O camer de ieire se afl pe frontiera labirintului i are o u carepermite ieirea n direcia respectiv.

    Exemple:(0,y,?0??), (x,0,??0?), (m1,y,???0), (x,n1,0???).

    Am marcat cu ? biii a cror valoare nu intereseaz.

    Spre deosebire de reprezentarea anterioar, aceasta permitedescrierea unui graf orientat, astfel c poate fi modelat cazul n care ou se deschide ntr-un singur sens.

    Reprezentrile implicite snt foarte folosite n prelucrarea

    imaginilor reprezentate n format bitmap.

    Convenii pentru reprezentare

    Majoritatea algoritmilor descrii n cadrul acestei lucrri folosescreprezentarea bazat pe funcia . Un graf neorientat va fireprezentat ca un graf orientat simetric. ntr-o implementare concret,reprezentarea bazat pe lista arcelor este necesar doar n faza decreare a grafului.

    Reprezentarea bazat pe lista arcelor este folosit de algoritmullui Kruskal, care are nevoie de lista arcelor, nu are importanorientarea acestora. Algoritmii de tip Bellman pot folosi oricare dincele dou tehnici de reprezentare.

    Pentru o aplicaie eficient bazat pe grafuri recomandmurmtoarea strategie. ntr-o faz anterioar lansrii aplicaiei graful seconstruiete pe baza listei arcelor, dup care se memoreaz n fiierreprezentarea bazat pe funcia . Toate informaiile se memoreaz______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    13

  • 8/3/2019 Manual Grafuri

    12/116

    n format binar astfel: mai nti valorile n i m, lista H (n+1 valori),lista ( m valori), i dac este nevoie lista C.

    1.4. Parcurgerea unui graf

    S presupunem c este dat un grafG, orientat sau neorientat, i fiedou vrfuri x i y n G; cum putem determina dac exist un drumntre x i y? n mod intuitiv, am dori s plecm din x, s examinmtoate vrfurile care pot fi atinse din x traversnd arcuri din G, i s neoprim atunci cnd depistm vrful y sau cnd examinm toate vrfurilecare ar putea fi atinse plecnd dinx. Mai general, dorim s efectum o

    operaie oarecare pentru fiecare vrf s o numim Visit. Acest processe numete parcurgere (vizitare) a grafului G plecnd din x (Larry,Denenberg, p 432).

    Figura 1.2. Dou tehnici de parcurgere plecnd din vrfulx0:n lime (breadth first search): x0 x1 x3 x2 x4 x5n adncime (depth first search): x0 x1 x2 x4 x3 x5

    Trebuie s remarcm faptul c o parcurgere ncepnd cu vrful xviziteaz exact acele vrfuri y cu proprietatea c exist un drum n Gde la x la y. Tehnicile de parcurgere snt cel mai adesea folosite

    tocmai pentru a vizita vrfurile ntr-o anumit ordine dat de legturiledintre acestea.

    Figura 1.2 prezint un exemplu de parcurgere a unui graf n limei n adncime. Aceste tehnici vor fi detaliate n capitolele urmtoare,unde vor fi prezentate i aplicaii.

    Pe parcursul lucrrii vom ntlni foarte frecvent secveneasemntoare celei de mai jos:for (eachxX) do______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    14

  • 8/3/2019 Manual Grafuri

    13/116

    for (eachy (x)) doPrelucrare-arc (x,y);

    Aceast secven parcurge lista arcelor unui graf reprezentat pe

    baza funciei (liste de succesori). S analizm complexitateaacestei secvene, presupunnd c:

    graful este reprezentat pe baza funciei ; prelucrarea unui arc dureaz o unitate de timp O(1).

    Pentru un anumit vrfx, n ciclul for interior se prelucreaz atteaarce ci succesori are vrful x, adic | (x)|. Considerm nc ounitate de timp pentru trecerea de la un vrfx la urmtorul, la o iteraiea ciclului for exterior. Dacx {0, 1, ..., n1} obinem:

    1 + | (0)| + 1 + | (1)| + ... + 1 + | (n1)| = n+m

    Aceast secven are complexitate de ordin O(n+m).

    Nu am contorizat separat aciunea de trecere la urmtorul vrf dinlista de succesori a vrfului x, deoarece am considerat c aceasta esteinclus n lista de operaii elementare care efectueaz prelucrareaarcului (x,y).

    Am ignorat faptul c prelucrarea unui arc (ciclul for interior)

    presupune n mod evident mai multe operaii elementare (aritmetice ilogice pe care le efectueaz procesorul), dect simpla aciune detrecere la urmtorul vrf din mulimeaX(ciclul for exterior). Conformdefiniiei complexitii unui algoritm, constanta multiplicativ nu esterelevant. Desigur, aceast simplificare este destul de grosier, dar ease face din punct de vedere teoretic pentru a evalua margineasuperioar a complexitii unui algoritm studiat.

    1.5. Obinerea listelor de succesoriDescriem n continuare un algoritm de conversie a listei de arce n

    liste de succesori (funcia ). Acest algoritm poate fi folosit ipentru a construi reprezentarea 1 a grafului invers asociat unui grafdat.

    AlgoritmConversie-Arce-Gamma;Intrare. Lista Ua arcelor unui graf: (xi,yi), i= 0, 1, ..., m1.

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    15

  • 8/3/2019 Manual Grafuri

    14/116

    Ieire. Listele de succesori, memorate n dou masive,Hi S.begin

    Ordoneaz lista U a arcelor unui graf: (xi,yi), i= 0, 1, ..., m1;

    Prin parcurgerea listei U se determin n, numrul de vrfuri; for (k:= 0, ..., n) doH[k] := 0; k:= 0; i:= 0; while (ka);

    H[a+1] := i; k:= i; end for (k:= 1, ..., n) do if(H[k] = 0) then H[k] := H[k1]; for (i:= 0, 1, ..., m1) do S[i] := y[i];end (algoritm).

    Ideea algoritmului este urmtoarea. Dup ordonarea arcelor separcurge aceast list (while) cu scopul de a stabili repere pentrupoziiile pe care se vor memora succesorii fiecrui vrf. Concret,pentru fiecare vrfa se completeaz H[a+1], care reprezint de faptprima poziie ocupat de un succesor al lui a+1.

    Este posibil ca unele vrfuri s nu aib succesori, i de aceeaparcurgerea masivuluiHcompleteaz reperele i pentru aceste vrfuri.n final se completeaz masivul Scu listele de succesori, concret cuvrfurile finale ale arcelor.

    Ordonarea arcelor se efectueaz ntr-un timp de ordin O(m logm).Lista de arce este parcurs ntr-un timp de ordin O(m) O(m logm).Lista H se iniializeaz i se corecteaz ntr-un timp de ordin O(n).Rezult

    Teorema 1.1. Conversia listei arcelor n liste de succesori (funcia ) necesit un timp de ordin O(m logm+n).

    Lista de succesori a unui vrfx poate fi parcurs astfel:______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    16

  • 8/3/2019 Manual Grafuri

    15/116

    for (j:= H[x],H[x]+1, ...,H[x+1]1) do begin y:= S[j]; Prelucrare-arc (x,y); end

    Algoritmul de conversie poate fi folosit pentru a genera inversulunui graf dat. Se genereaz lista arcelor grafului invers (y,x) pentru(x,y), i n final aceast list este convertit n funcia 1.

    1.6. Grafuri dinamice

    Exist unele probleme care cer ca pe parcurs s se elimine dingraf unele arce prelucrate, fr s fie nevoie s se introduc ulterioralte arce noi. Pentru aceste probleme se poate adopta urmtoarea

    tehnic de reprezentare, descris n continuare. Se introduce un masivsuplimentarF, care pstreaz iniial limitele de sus ale poziiilorsuccesorilor fiecrui vrf. MasivulFse completeaz astfel:

    for (x:= 0, 1, ..., n1) doF[x] := H[x+1];

    Ulterior, dac se dorete eliminarea unui arc cu originea n x, alcrui succesor este memorat pe poziia j (avem H[x]j

  • 8/3/2019 Manual Grafuri

    16/116

    2. Parcurgerea unui graf n lime

    2.1. Metoda general

    n tehnica de parcurgere n lime (breadth first search) ordinean care snt vizitate vrfurile rezult astfel: prima dat se viziteazvrful s, apoi succesorii lui s (evitnd un vrf deja vizitat), apoisuccesorii succesorilor lui s, i aa mai departe. Metaforic vorbind

    putem spune c aceast tehnic descrie un cerc cu centrul n s i carese extinde (Larry, Denenberg, p 433-434) (Burdescu, p 43-52).

    Prezentm mai jos tehnica general de parcurgere a unui graf nlime. Iniial toate vrfurile snt nemarcate, i atunci cnd un vrf estentlnit prima dat este marcat i introdus ntr-o coad. Atunci cnd unvrf este extras din coad este vizitat i fiecare succesor este adugatn coad, cu excepia vrfurilor deja ntlnite care nu mai snt

    procesate.

    AlgoritmBreadthFirstSearch general (cf Lee, 1961);Intrare

    . Un graf (X

    ,

    ) i un vrfs

    dinX

    .Ieire. Mk, informaii obinute de procedura de vizitare a vrfurilor.begin

    for (eachx X) do Mk[x] := False; Q:= InitQueue(s); Mk[s] := True; whilenotEmptyQueue(Q) dobegin x:= DeQueue(Q); Visit(x); for (eachy (x)) do

    if(Mk[y] = False) thenbegin Mk[y] := True; EnQueue(Q,y); endend (algoritm).

    Operaia iniial de tergere a marcajelor necesit un timp deordin O(n). Dup cum vom vedea n exemplele prezentate nseciunile urmtoare, procedura de Visit necesit un timp de ordinconstant pentru un vrf oarecare. Fiecare arc este parcurs cel mult de______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    18

  • 8/3/2019 Manual Grafuri

    17/116

    dou ori (cte o dat pentru fiecare vrf al su vizitat), i fiecare vrfeste introdus n / extras din coad cel mult o dat.

    S observm c algoritmul prezentat mai sus proceseaz vrfurile

    grafului ntr-o ordine care depinde de modul cum snt descrise listelesuccesorilor fiecrui vrf.

    Prezentm n continuare o tehnic foarte simpl de implementarea cozii, valabil numai pentru grafuri statice. Coada Q este un masivcu n elemente, i limitele u i v au semnificaia urmtoare:u poziia primului element care va fi extras din coad;v poziia unde va fi inserat urmtorul element n coad.

    Operaiile asupra cozii se implementeaz astfel:

    Operaie Implementare

    Q:= InitQueue(s); Q[0] := s; u:= 0; v:= 1;notEmptyQueue(Q) (u

  • 8/3/2019 Manual Grafuri

    18/116

    Aplicaie.X reprezint o mulime de calculatoare, i indicpentru fiecare calculator care snt calculatoarele conectate direct laacesta. Evident, fiecare conexiune este n ambele sensuri. S se

    determine cte reele independente exist, i care snt calculatoarelecare compun fiecare reea (figura 2.1).

    Figura 2.1. Graf cu dou componente conexe: {x0,x1,x3,x4} i {x2,x5,x6}.

    AlgoritmCompConexe;Intrare. Un graf neorientat (X, ).Ieire. Un masiv C: componentele conexe ale acestuia.begin

    for (eachsX) do C[s] := 0;

    k:= 0; for (eachsX) do

    if(C[s] = 0) then begin k:= k+ 1; u:= 0; v:= 1; C[s] := k; Q[0] := s; while (u

  • 8/3/2019 Manual Grafuri

    19/116

    Ideea acestui algoritm este urmtoarea. Iniial toate vrfurile sntnemarcate i nu avem determinat nici o component conex. Primulvrf nemarcat (fie acesta s) desemneaz prima component conex

    depistat i aceasta va include toate vrfurile care pot fi atinse cuajutorul unui drum care pleac dins. Pentru aceasta se introduc ntr-ocoad i se marcheaz toi succesorii nemarcai ai lui s. n continuarese extrage cte un vrf din coad i se repet procedura pn cndcoada devine goal. n acest moment am determinat toate vrfurilecare fac parte din aceeai component conex ca i s. Toate vrfurilesnt marcate cu 1.

    Urmtorul vrf nemarcat desemneaz urmtoarea componentconex pentru care se repet aceeai procedur. Toate vrfurile carefac parte din aceeai component conex snt marcate cu numrul deordine al acesteia. n masivul C se memoreaz pentru fiecare vrfcomponenta creia i aparine.

    2.3. Grafuri bipartite

    Definiia 2.2. Un graf neorientat G= (X,U) este bipartit dacexist o partiie X=X1 X2 astfel nct pentru orice (x,y)UavemxX1 iyX2. Caracterizarea unui graf bipartit este dat de

    Teorema 2.2 (Knig) Urmtoarele afirmaii snt echivalente:(i) un grafG este bipartit;(ii) un grafG este bicromatic (poate fi colorat cu dou culori astfelnct dou vrfuri adiacente s fie colorate diferit);(iii) un grafG nu conine cicluri de lungime impar.

    Problem. Fie un graf neorientat G = ( X, ); s se colorezegraful cu dou culori astfel nct oricare dou vrfuri adiacente s fiecolorate cu culori diferite (figura 2.2).

    Aplicaie.X reprezint o mulime de muncitori i maini, i indic pentru fiecare muncitor pe care maini poate lucra, respectiv

    pentru fiecare main care muncitori o pot utiliza. Ne punemntrebarea dac graful este corect descris; rspunsul la aceastntrebare l aflm dup ce ncercm s colorm graful cu dou culori.

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    21

  • 8/3/2019 Manual Grafuri

    20/116

    Figura 2.2. Un graf bipartit: X1 = {x0,x2,x4}, X2 = {x1,x3,x5,x6}.

    AlgoritmBipartit;Intrare. Un graf neorientat (X, ).Ieire. Un masiv C: culoarea fiecrui vrf (1 sau 2).

    Valoare returnat True sauFalse: graful este sau nu bipartit.

    beginfor (eachsX) do C[s] := 0;

    for (eachsX) doif(C[s] = 0) then begin

    C[s] := 1; Q[0] := s; u:= 0; v:= 1; while (u

  • 8/3/2019 Manual Grafuri

    21/116

    marcheaz cu culoarea 2. n continuare se extrage cte un vrf dincoad i se repet procedura pn cnd coada devine goal. Dac unvrf extras din coad are culoarea 2, toi succesorii si nemarcai se

    marcheaz cu culoarea 1. n acest moment am marcat toate vrfurilecare fac parte din aceeai component conex ca i s.Urmtorul vrf nemarcat desemneaz urmtoarea component

    conex pentru care se repet aceeai procedur de colorare.Este posibil uneori ca un vrf s aib un succesor marcat. Dac

    marcajele celor dou vrfuri difer se continu cu alt succesor. Dacn schimb marcajele celor dou vrfuri coincid graful nu poate ficolorat cu dou culori, deci nu este bipartit.

    2.4. Ordonare topologic

    Definiia 2.3. ntr-un graf orientat, dou vrfuri distinctex iy sntn relaie de ordine topologic, notaiex y, dac este ndeplinit unadin urmtoarele condiii:

    fie exist un drum de lax lay i nu exist nici un drum de lay lax; fie nu exist nici drum de lax lay, nici drum de lay lax.

    n al doilea caz relaia de ordine topologic poate fi definit i

    altfel:y x, dar n acest caz nu mai poate fi definit relaiax y.Aceast relaie de ordine este doar tranzitiv i nu poate fi definitntre dou vrfuri care aparin unui circuit. Relaia este parial i estedoar tranzitiv; nu este reflexiv, nici simetric, nici antisimetric.

    Figura 2.3. Ordonare topologic.

    n figura 2.3 snt marcate rangurile vrfurilor n conformitate cuordonarea topologic. O ordonare topologic posibil este: (x0,x2, x1,

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    23

  • 8/3/2019 Manual Grafuri

    22/116

    x3, x4), cu precizarea c vrfurile x0 i x2 snt interschimbabile pe primele dou poziii, i vrfurile x1 i x3 snt interschimbabile peurmtoarele dou poziii.

    Problem. Fie un graf orientat G = ( X, ); s se ordonezetopologic vrfurile din mulimeaXn concordan cu relaiile definitede funcia .

    Aplicaie (capitolul cinci).Xreprezint o mulime de activiti, i reprezint legturi de tipul urmtor:y (x) dac activitateay se

    poate executa numai dup ce s-a terminat activitatea x (terminareaactivitii x este necesar pentru a putea ncepe activitatea y).mpreun cu ordonarea topologic se va determina i rangul fiecrui

    vrf, care arat poziia acestuia n lista ordonat. Pot exista mai multevrfuri cu acelai rang, dac ntre acestea nu exist nici o relaie dedependen.

    AlgoritmTopoSort;Intrare. Un graf neorientat (X, ).Ieire. Un masiv Q: vrfurile grafului n ordine topologic.

    Un masivR: rangul fiecrui vrf.Valoare True sauFalse: graful nu are (sau are) circuite.

    begin

    Se determin(prin inspectare ) valorile g(x)pentru fiecare vrf x: for (eachxX) do g(x) := 0; for (eachxX) do for (eachy (x)) do g(y) := g(y) + 1;Toate vrfurile x pentru care g

    (x) = 0se introduc n coada Q: v:= 0;

    for (eachxX) doif(g(x) = 0) then begin Q[v] := x; v:= v+ 1; R[x] := 0; endSe ordoneaz topologic vrfurile grafului: while (u

  • 8/3/2019 Manual Grafuri

    23/116

    for (eachy (x)) do begin g

    (y) := g(y) 1;if(g(y) = 0) then begin

    Q[v]:= y; v:= v+ 1; R[y] := R[x] + 1;

    end end end

    return (v= n);end (algoritm).

    Ideea acestui algoritm este urmtoarea. Iniial se determin, prininspectarea tuturor vrfurilor grafului i a fiecrui succesor, gradulinterior al fiecrui vrf. Vrfurile care au gradul interior zero (nu au

    predecesori) snt introduse n coad, toate aceste vrfuri avnd rangulzero. n continuare se extrage cte un vrfx din coad, i se reduce cuo unitate gradul interior al fiecrui succesor y (x). Dac unsuccesory ajunge s aib gradul interior zero, acesta este introdus ncoad i i se asociaz rangul imediat urmtor:R[x] + 1.

    n final, dup ce coada devine vid, se verific dac au trecut prin

    coad toate cele n vrfuri ale grafului. n caz afirmativ graful nu arecircuite i se poate defini o relaie de ordine topologic pe mulimeavrfurilor acestuia.

    Acest algoritm va fi folosit n capitolul cinci, rezervat problemeide ordonanare.

    Ideea acestui algoritm este preluat din literatura francez(Gondran, Minoux, p 41-44) unde se determin i rangul fiecrui vrf.Alte lucrri prezint algoritmi bazai pe parcurgerea n adncime(Larry, Denenberg, p 436-438) (Burdescu, p 69-74).

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    25

  • 8/3/2019 Manual Grafuri

    24/116

    3. Parcurgerea unui graf n adncime

    3.1. Metoda general

    O a doua tehnic important de parcurgere a unui graf esteparcurgerea n adncime (depth first search). Caracteristica definitoriea acestei tehnici este faptul c fiecare vrf este explorat n ntregimeimediat ce este ntlnit prima dat. Cu alte cuvinte, vrful este vizitat ifiecare din succesorii lui este imediat procesat. Dar procesareafiecrui succesor presupune aplicarea acestei tehnici n mod recursiv.Pentru a nelege modul cum opereaz aceast tehnic, s presupunemc plecm din vrful s. Mai nti este vizitat vrful s, apoi primulsuccesor al acestuia (fie acestas1) este ntlnit i vizitat. n continuareconsiderm fiecare din succesorii lui s1; fiecare la rndul lui estevizitat i explorat ct mai adnc posibil nainte ca urmtorul succesoral lui s1 s fie examinat. Numai dup ce toi succesorii lui s1 (cuexcepia eventual a luis) au fost explorai n ntregime continum cuurmtorul succesors2 al luis. Desigur, urmtorul succesor este posibil

    s fi fost vizitat la un moment dat n explorarea lui s1, i n acest caznu mai este examinat. Numele depth first search reflect ideea c

    parcurgerea avanseaz ct mai adnc posibil i mai departe de vrful deplecare, avansnd de la fiecare vrf la succesorul acestuia, de la unsuccesor la succesorul acestuia, i aa mai departe, revenind pentruverificarea altor succesori numai atunci cnd ntlnim un vrf care numai are succesori neexaminai i deci nu putem avansa mai departe(Larry, Denenberg, p 435-436) (Burdescu, p 54-67). n figura 1.2

    avem un exemplu de parcurgere n adncime.ntr-o parcurgere n adncime avem dou momente cnd putemefectua o procedur de vizitare: un vrf poate fi vizitat imediat ce estentlnit prima dat, chiar nainte ca primul su succesor s fie procesat(aa cum am descris n paragraful precedent), sau vrful poate fivizitat dup ce toi succesorii si au fost explorai n ntregime. Pentrua distinge aceste posibiliti definim separat procedurile PreVisit iPostVisitn conexiune cu tehnica depth first search. Aceast tehnic

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    26

  • 8/3/2019 Manual Grafuri

    25/116

    se implementeaz n modul cel mai natural posibil cu ajutorul unuialgoritm recursiv.

    AlgoritmDepthFirstSearch general;Intrare. Un graf (X, ) i un vrfs dinX.Ieire. Informaii obinute de procedurile de vizitare a vrfurilor.begin

    for (eachx X) do Mk[x] := False; RecursivDFS(s);end (algoritm).

    ProceduraRecursivDFS(vrfx);begin

    Mk[x] := True; PreVisit(x); for (eachy (x)) do if(Mk[y] = False) thenRecursivDFS(y); PostVisit(x);end (procedur).

    Este necesar o atenie deosebit la implementarea algoritmilorrecursivi: trebuie identificate variabilele locale i variabilele globale,

    numai astfel poate fi garantat funcionarea corect a programului.Procedura de parcurgere poate fi descris i iterativ nerecursiv,

    cu ajutorul unui algoritm de tip back-tracking.

    ProceduraIterativDFS(vrfs);begin

    Mk[s] := True; k:= 0; L[0] := s; (primul vrf din list este s)

    P[0] := H[s]; (poziia n S a primului succesor al vrfului s) while (k 0) do begin j:= P[k]; x:= L[k]; (extrage un vrf din list) PreVisit(x); while (j

  • 8/3/2019 Manual Grafuri

    26/116

    end if(j

  • 8/3/2019 Manual Grafuri

    27/116

    Problem. Fie un graf orientat G = ( X, ); s se determinecomponentele sale tare conexe (figura 3.1).

    Aplicaie. Avem o hart rutier a unei localiti n care X

    reprezint interseciile, i indic pentru fiecare intersecie undeputem ajunge dup un singur pas. Evident, nu ntre oricare doupuncte de intersecie avem legturi n ambele sensuri. Dorim s aflmdac orice intersecie este accesibil de oriunde, sau dac nu careregiuni nu pot comunica ntre ele n ambele sensuri i care interseciifac parte din fiecare regiune.

    Figura 3.1. Ambele grafuri orientate, (a) i (b), au cte doucomponente tare conexe: {x0,x1,x3} i {x2,x4,x5}.

    Vrfurile snt marcate conform parcurgerii n adncime.

    AlgoritmCompTareConexe [cf Bur,78-84];Intrare. Un graf orientat (X, ).

    Ieire. Un masiv C: componentele tare conexe ale acestuia.begin

    for (eachx X) do Mk[x] := False; Md:= 0; for (eachx X) do if(Mk[x] = False) then TravMark(x);

    Se ordoneaz descresctor marcajele masivului D, memornd

    pentru fiecare marcaj crui vrf aparine;______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    29

  • 8/3/2019 Manual Grafuri

    28/116

    for (eachx X) do C[x] := False;Se construiete graful invers G corespunztor grafului G;

    nc:= 0;

    Procedura TravCnx prelucreaz graful G astfel: for (eachxX) do (vrfurile x se iau n ordinea din masivul D) if(C[x] = 0) then begin nc:= nc+ 1; TravCnx(x); endend (algoritm).

    ProceduraTravMark(vrfx);begin

    Mk[x] := True; for (eachy (x)) do if(Mk[y] = False) then TravMark(y); Md:= Md+ 1; D[x] := Md;end (procedur).

    ProceduraTravCnx(vrfx);begin

    C[x] := nc; for (eachy (x)) do if(C[y] = 0) then TravCnx(y);end (procedur).

    Se face o prim parcurgere n adncime a grafului, i n faza depostvizitare a unui vrf acesta se marcheaz cu o valoare indicndadncimea maxim care a putut fi obinut pornind din vrfulrespectiv. n continuare se ordoneaz vrfurile descresctor dup

    valoarea acestor marcaje i se construiete graful inverscorespunztor grafului de intrare: dac n graful iniial exist arcul(x,y) atunci n graful inversat se insereaz arcul (y,x). n final se faceo parcurgere a grafului invers (de aceast dat parcurgerea se poateface fie n adncime fie n lime), lund vrfurile n ordineadescresctoare a marcajelor obinute n prima faz. nainte de a doua

    parcurgere se ordoneaz descresctor marcajele, i n final se

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    30

  • 8/3/2019 Manual Grafuri

    29/116

    determin componentele tare conexe. n masivul C se memoreazpentru fiecare vrf componenta creia i aparine.

    Fiecare etap de parcurgere a grafului necesit un timp de ordinO(n+m). Etapa de ordonare a marcajelor masivului D necesit untimp de ordin O(n logn). Obinem

    Teorema 3.1. Determinarea componentelor tare conexe ale unuigraf orientat necesit un timp de ordin O(n logn).

    Am preferat, pentru simplitatea descrierii, o prezentare aalgoritmului n trei faze: parcurgerea grafului iniial, ordonareamarcajelor, parcurgerea grafului invers. Este posibil s se obin o

    complexitate liniar a acestui algoritm, dac se observ c vrfurilevizitate pot fi introduse ntr-o stiv n ordinea executrii operaieiPostVisit. Graful invers va fi parcurs conform extragerii vrfurilor dinstiva astfel creat (Giumale, p 160-163).

    Dintr-o list a vrfurilor marcate rezult o component tareconex sau mai multe, n funcie de vrfurile care pot fi atinseconform parcurgerii grafului invers. De altfel aceasta este ideea de

    baz a algoritmului descris n literatura de specialitate: se parcurge

    graful iniial pornind dintr-un vrfs

    , i n continuare se parcurgegraful invers n ordinea precizat mai sus. Doar vrfurile care pot fiatinse n ambele parcurgeri fac parte din aceeai component tareconex.

    3.3. Biconectivitate

    Definiia 3.4. Un vrfs al unui graf neorientat este vrf critic (sauvrf de articulaie) dac exist dou vrfuri distinctex iy orice drum

    elementar de lax lay trece prins.Definiia 3.3. Un graf neorientat este biconex dac, fiind date

    dou vrfuri distinctex iy, exist cel puin dou drumuri elementarentre ele care nu au nici un vrf comun, cu excepia celor dou capete.Cu alte cuvinte, un graf neorientat este biconex dac i numai dac nuare vrfuri critice.

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    31

  • 8/3/2019 Manual Grafuri

    30/116

    Exemplu. Graful din figura 3.2 (a) este biconex, pe cnd cel dinfigura 3.2 (b) nu. Al doilea graf are dou vrfuri critice:x0 ix1.

    Figura 3.2. Un graf biconex(a); un graf cu dou vrfuri critice (b). Graful(b) admite trei componente biconexe: {x0,x5}, {x0,x1,x2} i {x1,x3,x4}.

    Problem. Fie un graf neorientat G = ( X, ); s se determinevrfurile sale critice.

    Aplicaie (concurs ACM, Bucureti 1998).Xreprezint o mulimede calculatoare, i indic pentru fiecare calculator care sntcalculatoarele conectate direct la acesta. Evident, fiecare conexiuneeste n ambele sensuri. Un calculator care corespunde unui vrf critic

    afecteaz comunicarea n reea dac se defecteaz. n acest caz existcel puin dou noduri, aflate n componente biconexe diferite, care numai pot comunica. Dac se defecteaz un calculator, fie acesta z, carenu corespunde unui vrf critic, comunicarea nu este totui afectat. S

    presupunem c un drum care unete dou vrfurix iy trece prin acelcalculator. n acest caz, deoarece znu este critic, se poate gsi un altdrum de lax lay care s nu treac prinz.

    S se determine toate calculatoarele critice din reea.

    Pentru a nelege cum trebuie aplicat tehnica depth first searchn problema biconectivitii unui graf, s revedem algoritmul general.Considerm c graful G este neorientat i conex. Procedura recursivRecursivDFSproceseaz fiecare vrfx marcndu-l i considernd pernd fiecare succesor. Dac un succesor y a fost deja marcat

    procedura ignorpur i simplu arcul (x,y). Dac un succesory nu afost marcat, procedura se autoapeleaz pentru a-l procesa; spunem c

    procedura avanseazpe arcul (x,y). S fixm acum un vrfrde start______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    32

  • 8/3/2019 Manual Grafuri

    31/116

    (rdcin) pentru tehnica de parcurgere. Fie Tgraful parial care secompune din vrfurile lui G i arcele de avansare; acest graf esteobinut din graful G dup ce am eliminat arcele ignorate n timpul

    parcurgerii (Athanasiu et al).S artm c T este un arbore. ntr-adevr, T conine toatevrfurile din G prin definiie, i este conex deoarece orice parcurgeren adncime a grafului G (care este conex) ntlnete fiecare vrf dinG. Mai mult, Tnu conine nici un ciclu deoarece de fiecare dat cndntlnim un arc ce unete dou vrfuri deja marcate acesta este ignorati nu este adugat la T. Putem considera c T este un arbore curdcina r, i un vrfx este printele lui y dac i numai dac y este

    primul succesor nemarcat al luix.Graful original G se compune din arborele Ti arcele ignorate.

    S facem o observaie important (Larry, Denenberg, p 439-441):fiecare arc ignorat unete dou vrfuri ntre care exist o relaie deancestralitate: dac (x,y) este arc ignorat, atunci fie x este un strmoal luiy, fiey este un strmo al luix. Pentru a vedea aceasta, fie (x,y)un arc oarecare ignorat n G, i s presupunem c explorarea luix s-aterminat nainte ca explorarea luiy s se fi terminat. Putem arta cytrebuie s fie un strmo al luix; cellalt caz poate fi analizat n mod

    analog. S considerm momentul n care explorarea lui x s-aterminat. n mod certy trebuie s fi fost ntlnit deja, altfel arcul (x,y)nu ar fi fost ignorat n timpul explorrii luix. Dar atunci o explorare alui y trebuie s fie n curs de desfurare, deoarece am presupus cexplorarea luix se termin nainte de aceea a luiy. Aceast explorarea luiy a fost efectuat de-a lungul unei secvene de arce de avansarede lay lax, de unde rezult c orice arc din G este un strmo al luix.Deoarece fiecare arc din G este fie n T (de avansare) fie ignorat,

    rezult c orice arc din G unete dou vrfuri care se afl n relaie deancestralitate n T. Figura 3.3 ilustreaz un exemplu de grafneorientat i arborele corespunztor generat de arcele de avansareselectate de parcurgerea n adncime.

    Aceast descriere a procesului de parcurgere n adncime neconduce la o caracterizare a vrfurilor critice.

    Teorema 3.2. 1) Vrful r, rdcina arborelui, este vrf critic daci numai dac are mai mult de un copil n T.______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    33

  • 8/3/2019 Manual Grafuri

    32/116

    2) Fie x un vrf oarecare din G diferit de r. Atunci x este vrfcritic dac i numai dac are un copil y n Tastfel nct nici un arcignorat din G nu unete un descendent al luiy cu un strmo propriu

    al luix (diferit de el nsui).

    Figura 3.3. Graful (a) are dou vrfuri critice:x0 ix1. n urma

    parcurgerii n adncime a acestuia se obine arborele (b).

    Exemplu. n figura 3.3 vrfulx0 este critic deoarece are doi copii:

    x1 i x6. Dac am elimina arcul (x0,x6) i am introduce arcul (x1,x6)vrfurile ar fi parcurse n aceeai ordine dar vrful x0 nu ar mai fi criticdeoarece singurul lui copil ar fix1.

    Vrfulx1 este critic deoarece unul dintre copiii lui, x3, nu are niciun descendent care s fie unit n arbore printr-un arc cu un strmo

    propriu al lui x1. Pe de alt parte, x3 nu este critic deoarece arcul(x4,x1) unete un descendent al acestuia cu un strmo propriu al luix3; n aceeai situaie este i arcul (x5,x1). S observm c vrful x1este critic chiar dac un succesor al acestuia (x2) este unit printr-unarc cu un strmo propriu al lui x1 (x0); cellalt succesor (x3) nu areaceast proprietate.

    Faptul c un vrfy este unit cu un vrfz, strmo propriu alvrfului x, este reflectat de relaia D[z]

  • 8/3/2019 Manual Grafuri

    33/116

    Aceste idei snt folosite n algoritmul prezentat mai jos, caredetermin vrfurile critice ale unui graf conex. n loc s numerotmvrfurile n ordinea n care snt ntlnite, fiecare vrf este marcat n

    masivul D cu adncimea n arborele generat de arcele de avansareplecnd din r. Funcia recursiv TravCritic completeaz acest masivefectund o parcurgere n adncime standard. Aceast funciereturneaz minimul dintre marcajele de adncime ale vrfurilorntlnite n timpul explorrii complete a vrfului x; pe msur cefiecare succesor y este examinat (i probabil explorat recursiv)reinem cea mai mic dintre valorile de marcaj ntlnite, inclusivaceea returnat de funcia TravCritic. Pe msur ce fiecare succesoryal lui x este explorat putem spune dac exist un descendent al lui ycare s fie adiacent cu un strmo propriu al lui x un astfel destrmo trebuie s aib adncimea mai mic dect a lui x. Sobservm c testul se aplic numai descendenilor lui x n arbore, inu fiecrui succesor al luix.

    Dup cum am artat n teorema 3.2 rdcina parcurgerii este oexcepie de la aceast regul i este tratat separat n rutina

    principal.

    AlgoritmVirfuriCritice (Larry, Denenberg, p 442);Intrare. Un graf neorientat conex (X, ).Ieire. Vrfurile critice ale grafului, marcate True n masivul Cv.begin

    for (eachx X) do begin Cv[x] := False; D[x] := 0; end r:= un vrf oarecare dinX;

    TravCritic(r); k:= 0; for (eachx (r)) do if(D[x] = 1) then k:= k+ 1; if(k 2) then Cv[r] := True;end (algoritm).

    FunciaTravCritic(vrfx);begin

    md:= D[x];______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    35

  • 8/3/2019 Manual Grafuri

    34/116

    for (eachy (x)) do if(D[y] = 0) then begin D[y] := D[x] + 1;

    m:= TravCritic(y); if(m D[y]) and (x r) then Cv[x] := True; md:= minim(m,md); end elsemd:= minim(md,D[y]); returnmd;end (funcie).

    Teorema 3.3. Determinarea vrfurilor critice ale unui grafneorientat necesit un timp de ordin O(n+m).

    Algoritmul poate fi completat pentru a determina componentele biconexe astfel. Se introduc ntr-o stiv gestionat explicit toatearcele de avansare pn cnd se depisteaz un vrf critic. n acestmoment se elimin din stiv ultimele arce pn cnd se depisteaz unarc care a plecat din vrful depistat ca fiind critic. Toate vrfurilentlnite pe parcursul eliminrii arcelor din stiv formeaz o

    component biconex. Aceeai procedur trebuie efectuat n modrepetat i pentru vrful rdcin r, dac se depisteaz c este critic.Aceast stiv separat poate fi organizat ca un masiv de cupluri (x,y)avnd cel mult m elemente.

    3.4. Cicluri i lanuri euleriene

    Un lan (ciclu) eulerian folosete toate muchiile o singur dat.

    Problem. Fiind dat un graf neorientat conex, s se precizezedac admite sau nu un ciclu / lan eulerian. n caz afirmativ s seindice succesiunea de muchii a acestuia.

    Aplicaie (Euler, 1736). Celebra problem a podurilor de laKnigsberg era formulat astfel. Figura 3.4 (a) reprezint o hart ainsulei aflate pe cursul rului Pregel n localitatea Knigsberg. Este

    posibil o plimbare astfel nct s se traverseze toate podurile osingur dat?

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    36

  • 8/3/2019 Manual Grafuri

    35/116

    Figura 3.4 (b) este o modelare a hrii cu ajutorul unui multigraf.ntr-un multigraf putem avea mai multe muchii ntre dou vrfuri. Otehnic de reprezentare bazat pe funcia (liste de succesori)

    permite reprezentarea unui multigraf: pur i simplu un succesor estememorat de mai multe ori n list. ntr-o matrice de adiacen, aij vamemora numrul de muchii care unesc cele dou vrfuri.

    Figura 3.4. Podurile de la Knigsberg.

    Aceast problem poate fi generalizat astfel. Fiind dat o figurgeometric construit din linii, este posibil desenarea acesteia frs ridicm creionul de pe hrtie i fr s desenm de mai multe ori o

    linie?Euler a dat soluia pentru problema general ntr-un articol

    publicat n revista Academiei de tiine din Petersburg: Solutioproblematis ad geometriam situs pertinentis, pag 128-140.

    Teorema 3.4. Dac un graf are n vrfuri i m muchii, atunci sumagradelor tuturor vrfurilor este 2m.

    Demonstraie(inducie complet).Fieungrafcunvrfuriifrmuchii: suma gradelor este zero. Se adaug cte o muchie i la unmoment dat avem k muchii. Presupunem c suma gradelor este 2k.Dac mai adugm o muchie, suma gradelor crete cu doi.

    Corolar 3.5. Orice graf are un numr par de vrfuri de grad impar

    Teorema 3.6. Un graf admite un lan eulerian dac i numai daceste conex (exceptnd eventualele puncte izolate) i numrulvrfurilor de grad impar este 0 sau 2.

    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    37

  • 8/3/2019 Manual Grafuri

    36/116

    Demonstraie. () Dac exist un lan eulerian, atunci graful esteconex. Cele dou vrfuri ale lanului (dac snt distincte) sntsingurele care au grad impar. Deci graful nu poate avea dect 0 sau 2

    vrfuri de grad impar.() Dac graful are o singur muchie afirmaia este evident.Presupunem c afirmaia este adevrat pentru grafuri cu mai puinde m muchii. Pentru fixarea ideilor presupunem c exist dou vrfuride grad impar: a i b (raionamentul se face la fel i pentru cazul cndnu exist vrfuri de grad impar).

    Un voiajor care pleac din a ntr-o direcie oarecare i nuparcurge aceeai muchie de dou ori va defini un lan . Dac el

    ajunge ntr-un vrfx b, va utiliza un numr impar de muchiiincidente cu x, deci va putea pleca pe o muchie nealeas. Dac elajunge n b, la un moment dat nu va mai putea pleca. n acest lanarbitrar de la a la b este posibil s nu fie folosite toate muchiile.Rmne atunci un graf parial G' care are toate vrfurile de grad par.Fie C1, C2, ... Ck componentele conexe ale lui G' care conin cel puino muchie. Prin ipotez ele admit ciclurile euleriene 1, 2, ... k.Deoarece G este conex, lanul eulerian ntlnete succesiv toate

    componentele Ci. S presupunem c ordinea este aceasta: x1

    C1,x2C2, ...xkCk. S considerm lanul [a,x1]+ 1+ [x1,x2]+

    2+ ...+ [xk,b]. Acest lan este un lan eulerian de la a la b. Corolar 3.7. Dac un graf este conex i are 2q (q 1) vrfuri de

    grad impar, atunci mulimea arcelor sale este reuniunea a q lanurisimple disjuncte relativ la muchii (adic oricare dou lanuri distinctenu folosesc aceeai muchie).

    Demonstraie. S notm cu G graful obinut din G prin

    adugarea unui nou vrfz, pe care l unim prin muchii cu toate cele2q vrfuri de grad impar ale lui G. Rezult c G este conex i toatevrfurile snt de grad par, deci admite un ciclu eulerian. Suprimndvrful z precum i toate muchiile incidente cu el, ciclul eulerian sedescompune n q lanuri simple cu proprietatea enunat mai sus.

    Din demonstraia teoremei 3.6 se contureaz ideea unui algoritmcare s determine un ciclu sau un lan eulerian, n cazul n care grafuladmite aa ceva. Se pleac din vrful a i se efectueaz o parcurgere n______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

    38

  • 8/3/2019 Manual Grafuri

    37/116

    adncime att timp ct acest lucru e posibil. Fiecare muchie esteeliminat pe msur ce se avanseaz n graf: aceast eliminare

    presupune tergerea din list a celor dou arce gemene.

    n continuare se determin, folosind un algoritm similar, cte unciclu eulerian pentru fiecare component conex rezultat. n final seinsereaz toate aceste cicluri printre vrfurile ciclului / lanuluideterminat iniial, pentru a obine un ciclu / lan eulerian. Trebuie sfolosim o tehnic adecvat pentru reprezentarea grafului, care s

    permit operaii de actualizare a grafului pe msur ce acesta esteparcurs: identificarea arcului geamn, tergerea unui arc.

    Din pcate un astfel de algori