algoritmica e ciurea

Upload: pliznot

Post on 04-Jun-2018

254 views

Category:

Documents


3 download

TRANSCRIPT

  • 8/13/2019 Algoritmica E Ciurea

    1/84

    Eleonor CIUREA

    REPROGRAFIA UNIVERSITII TRANSILVANIA DIN BRAOV

  • 8/13/2019 Algoritmica E Ciurea

    2/84

  • 8/13/2019 Algoritmica E Ciurea

    3/84

    Eleonor CIUREA ALGORITMICA

    3

    1. NOIUNI DE TEORIA GRAFURILOR

    1.1 Vocabularul de baz

    Avertizm cititorul c terminologia din Teoria Grafurilor nu este complet unitar. Vom pstra, n cea maimare parte, terminologia consacrat n literatura romn de specialitate.

    Definiia 1.1 Se numete graf orientat un triplet G = (N, A, g), format dintr-o mulime N de elemente numite noduri

    sau vrfuri, dintr-o familie A de elemente numite arce i dintr-o aplicaie g: A NxN numit funcie deinciden , prin care fiecrui element aA i se asociaz o pereche ordonat (x, y) NxN cu xy; dac eliminmcondiia xy, atunci arcul de forma (x,x) se numete bucl, iar G se numete graf general orientat.

    n continuare, vom presupune c graful orientat G este finit, adic mulimea nodurilor N = {, x,} estefinit i familia arcelor A = (, a,) este un ir finit. Cardinalul mulimii N, notat |N| = n, se numete ordinulgrafului orientat G.

    Un graf orientat G = (N, A, g) se reprezint grafic n modul urmtor: fiecare nod xN se reprezint printr-un punct sau cercule n plan; fiecare arc aA, a=(x,y) se reprezint printr-o linie care unete cele dou noduri i pe care se afl o

    sgeat cu sensul de la x la y.

    Exemplul 1.1Graful din figura 1.1 este d e ordinul 8.

    Observaia 1.1 Reprezentarea grafic a unui graf orientat G = (N, A, g) nu este unic. n primul rnd, nodurile se pot plasa

    n plan la ntmplare. n al doilea rnd, nu este obligatoriu ca arcele s fie segmente de dreapt.

    Exemplul 1.2Cele trei grafuri din figura 1.2 reprezint acelai graf.

    Definiia 1.2 Dou grafuri orientate, G1 = (N 1, A1, g1) i G2 = (N 2, A2, g2) se numesc izomorfe, dac exist o bijecie

    : N1 N2 cu proprietatea c aplicaia : A1 A2, definit prin (x1,y1) = ((x 1), (y1)), (x1,y 1)A1, ((x 1),

    (y1)) = (x2,y2) A2, este o bijecie.Exemplul 1.3

    Grafurile G1 = (N1, A 1, g1) i G2 = (N2, A2, g 2) prezentate n figura 1.3 sunt izomorfe.

    Figura 1.1

    a42 4

    3 5

    a8

    a9

    a7

    1

    a1

    a2

    a3

    a5

    a68

    a11

    a12

    a10

    6

    7a13

    a14

    Figura 1.2

    5

    1 4

    2 35

    1

    4

    2

    3

    (a) (b) (c)

    5

    1 4

    2 3

  • 8/13/2019 Algoritmica E Ciurea

    4/84

  • 8/13/2019 Algoritmica E Ciurea

    5/84

    Eleonor CIUREA ALGORITMICA

    5

    Definiia 1.8 Se spune c nodul x este adiacent cu submulimea NN, dac xNi xV(N ), V(N) = {V(y)|

    yN}.

    Observaia 1.2 Conceptul de digraf se poate defini i prin perechea G = (N, ), unde N = {, x,} este mulimea

    nodurilor i este aplicaia multivoc : N P (N), (x) = V +(x), xN. Cele do u def in i ii su nt

    echivalente. ntr-adevr, dac digraful este dat sub forma G = (N, A), atunci (x) = V+

    (x), xN. Re cipr oc ,dac digraful este dat sub forma G = (N, ), (x) = V+(x), xN, atunci se de term in E+(x) = {(x,y)| yV+(x)},xN i A = {E +(x)| xN} . De asemenea, se de finete 1(x) = V(x), xN. Recursiv avem:

    2(x) = ((x)),,k(x) = (k-1(x)),...

    i analog

    2(x) = 1(1(x)),, k(x) = 1((k-1 )(x)),

    Un nod zk(x) se numete descendent al nodului x i un nod uk(x) se numete ascendent alnodului x.

    Exemplul 1.7

    Fie digraful din figura 1.4:

    Dac digraful este dat sub forma G = (N, A) cu N = {1,2,3}, A = {a1,a2,a3,a4} = {(1,2), (1,3), (2,1), (2,3)},atunci (1) = V+(1) = {2,3}, (1) = V+(1) = {2,3}, (2) = V+(2) = {1,3}, (3) = V+(3) = i am obinut

    digraful sub forma G = (N, ).Dac digraful este dat sub forma G = (N, ) cu N = {1,2,3}, (1) = {2,3}, (2) = {1,3}, (3) = ,atunci E+(1) = {(1,2), (1,3)}, E +(2) = {(2,1), (2,3)}, E +(3) = i A = E+(1) E+(2) E+(3) = {(1,2), (1,3),(2,1), (2,3)} = {a1, a2, a3, a4}.

    Definiia 1.9 Dou arce se numesc adiacentedac au cel puin o extremitate n comun.

    Definiia 1.10

    Fie arcul a = (x,y) A. Se spune c arcul a este incident ctre exterior la nodul x i incident ctreinterior la nodul y. Mulimea arcelor incidente ctre exterior la nodul x este E+(x) = {ai| ai=(x,y)A}, mulimeaarcelor incidente ctre interior la nodul x este E(x) = {aj | aj=(y,x)A} i mulimea arcelor incidente la nodul x esteE(x) = E+(x) E(x). Numrul +(x) = |E+(x)| se numete semigradul exterioral nodului x, numrul (x) = |E(x)|se numete semigradul interioral nodului x i num rul (x) = +(x) + (x) se numete gradulnodului x.

    Exemplul 1.8Se consider multigraful orientat din figura 1.1. Avem +(3)=3, (3)=1, deci (3)=3+1=4.Dac G = (N, A, g) este un graf neorientat, atunci (x) = +(x) = (x). n cazul n care G = (N, A, g)

    este multigraf orientat, atunci +(x) |V+(x)|, (x) |V(x)| i n cazul n care G = (N, A) este un digraf, relaiilesunt verificate cu egaliti. Evident c dac x este nod izolat, atunci (x) = 0. Un nod x cu (x) = 1 se numetependant. Dac toate nodurile lui G au acelai grad , atunci G se numete graf -regulat. Un graf 0-regulat senumete graf nuli un graf 3-regulat se numete graf trivalentsau cubic.

    Definiia 1.11ntr-un graf orientat G = (N, A, g), se numete lande la nodul x1 la nodul xk+1 , o secven L = ( x1, a1, x2,

    ,xk, ak, xk+1), xiN, i =1,,k+1, aiA, i=1,,k, cu proprietatea c fiecare arc a i, este de forma (xi, xi+1) sau (xi+1,xi). Dac ai = (x i, xi+1), atunci a ise numete arc directal lanului i dac a i=(xi+1 , x i), atunci aise numete arc invers

    al lanului. Numrul de arce din secven este, prin definiie, lungimea lanului L. Lanul L se numete simplu,dac fiecare arc a idin secven este utilizat o singur dat i se numete elementardac fiecare nod x idin secven

    este utilizat o singur dat. Dac x k+1= x1, atunci lanul L se numete ciclui se noteaz L .

    Figura 1.4

    a4

    2

    31

    a1

    a2

    a3

  • 8/13/2019 Algoritmica E Ciurea

    6/84

    Eleonor CIUREA ALGORITMICA

    6

    Un lan poate fi reprezentat i ca o secven de arce L = (a1,, ak) i n cazul cnd G = (N, A) este digraf,ca o secven de noduri L = (x1,, xk+1).

    Exemplul 1.9Se consider graful orientat din figura 1.1. Secvena L = (1, a1, 2, a8, 4, a3, 2, a6, 3, a2, 2, a8, 4) = (a1, a8, a3, a6, a2,

    a8) este un lan, dar nu este nici lan simplu, nici lan elementar. Secvena L = (1, a 1, 2, a3, 4, a4, 2, a2, 3, a6, 2) = (a1, a3, a4,a2, a 6) este un lan simplu, dar nu este lan elementar. Secvena L = (1, a1, 2, a6, 3, a7, 5, a9, 4)=(a1, a6, a 7, a 9) este un lanelementar.

    Noiunea de lan se poate defini i ntr-un gra f neorientat G = (N,A,g) ca o secven L = (x1, a1, x2, , xk,ak, xk+1) cu proprietatea c fiecare muchie aidin secven este de forma a i= [x i, xi+1] i lanul poate fi reprezentat isub forma L = (a1, , ak). Un lan L = (x1, a1, x2, , xk, ak, xk+1) al grafului orientat G = (N,A,g), n care fiecare arcaieste arc direct, adic este de forma a i= (x i,x i+1), se numete lan orientatsau drumi se noteaz prin D. Un lan

    orientat cu xk+1 = x1 se numeteciclu orientatsau circuiti se noteaz prin D . Noiunile de drum i circuit au sensnumai pentru grafuri orientate.

    Exemplul 1.10Se consider graful orientat din figura 1.1. Secvena D = (1, a1, 2, a3, 4, a8, 2, a2, 3, a6, 2, a3, 4, a8, 2) = (a1,

    a3, a 8, a 2, a 6, a 3, a 8) este un drum, dar nici drum simplu nici drum elementar. Secvena D = (1, a1, 2, a3, 4, a8, 2, a2, 3,a7, 5) = (a1, a3, a8, a2, a7) este un drum simplu, dar nu este un drum elementar. Secvena D = (3, a6, 2, a4, 4, a9, 5) =(a6, a 4, a9) este un drum elementar.

    n paragrafele urmtoare vom considera, n general, lanuri i drumuri elementare, dar fr a ma i specificade fiecare dat atributul elementar, dect numai n cazurile cnd este necesar.

    Definiia 1.12

    Se spune c graful orientat G= (N, A, g) este un subgraf al grafuluiorientat G = (N, A, g) dac NN i A A . Dac N N i A = (NxN) A atunci G = (N, A, g) se numete subgraf indus n G demulimea de noduri N. Dac N= N i AA atunci G= (N, A, g) se numete subgraf parialal lui G.

    Concepte similare se pot defini n mod analog i pentru grafuri neorientate.Fie G = (N, A) un digraf cu mulimea nodurilor N = {1, , n} i mulimea arcelor A = {1, , m}.

    Matricea de adiacenasociat digrafului G este matricea M = (mi j)nxn unde

    A,j)(i,,0

    A,j)(i,,1

    dac

    dacmij

    Evident, au loc relaiile: N

    i,m(i)m

    1jij

    i N

    j,m(j)n

    1iij

    .

    Matricea de incidenasociat digrafului G este m atricea

    mxnijmM )( unde

    E(i).j,0(i),Ej,1-

    (i),Ej,1

    dac

    dac

    dac

    m ij

    n acest caz au loc relaiile: N

    i,m(i) 0m|j ijij , N

    i,|m|(i) 0m|j ijij .

    Exemplul 1.11Pentru digraful din figura 1.4. avem

    000101110

    M

    101011010111

    M

    Se remarc faptul c matricea de inciden Mare pe fiecare coloan un 1, un -1 i n-2 zerouri.Dac G = (N, A) este un graf simplu neorientat atunci

    A,j][i,,0

    A,j][i,,1

    dac

    dac

    mij

    i

  • 8/13/2019 Algoritmica E Ciurea

    7/84

    Eleonor CIUREA ALGORITMICA

    7

    E(i).j,0E(i),j,1

    dac

    dacm ij

    Evident c n cazul unui graf simplu neorientat, matricea de adiacen M este simetric, adic m i j = mj ipentru i = 1, , n i j = 1, , n.

    1.2 ArboriDefiniia 1.13

    Un digraf G = (N, A) se numete slab conex (sau conex) dac pentru oricare dou noduri distincte din Nexist un lan care are aceste dou noduri drept extremiti.

    Observaia 1.3 No iunea de conexita te are sens i pentru grafuri neorientate.

    Exemplul 1.12Digraful din figura 1.5 (a) i graful neorientat din figura 1.5 (b) sunt conexe.

    Definiia 1.14

    Un subgraf G= (N, A) al unui digraf G = (N,A) se numete component conex a luiG dac Geste

    conex i este maximal n raport cu incluziunea fa de aceast proprietate (oricare ar fi xN= N-N , subgraful

    Gx generat de Nx = N{x} nu este conex).Definiia 1.15

    Un digraf G= (N,A) se numete arboredac este fr cicluri i conex. Un digraf G = (N,A) se numetepduredac este fr cicluri.

    Observaia 1.4 Un digraf G= (N, A) este o pduredac fiecare component conex a lui G este un arbore. Noiunile de arbore

    i pdure au sens i pentru grafuri neorientate.Exemplul 1.13

    Digraful reprezentat n figura 1.6 este o pdure compus din doi arbori. Dac se ignor sensul arcelor se obine opdure format din doi arbori neorientai.Definiia 1.16

    Un digraf G = (N, A) se numete tare conexdac pentru oricare dou noduri distincte x, y din N exist undrum de la x la y i un drum de la y la x.

    a21 3

    2 4

    a1 a3

    a4a6

    a5

    a62 4

    3 5

    a5a7

    a8 a10

    a9

    1

    a1a2

    a3

    a4

    (a) (b)

    Figura 1.5

    Figura 1.6

    a4

    21

    a1 a2

    a3

    4

    65

    a5

    8

    9

    7

    a6 a7

    a8

    100

    3

  • 8/13/2019 Algoritmica E Ciurea

    8/84

    Eleonor CIUREA ALGORITMICA

    8

    Observaia 1.5Noiunea de tare conexitate a re sens numai pentru grafuri orientate.

    Exemplul 1.14Digraful din figura 1.7 este tare conex.

    Definiia 1.17

    Un subgraf G= (N, A) al unui digraf G = (N, A) se numete component tare conex a lui G dac G

    este tare conex i este m aximal n raport cu incluziunea fa de aceast proprietate (oricare ar fi xN= N N ,subgraful Gx generat de Nx= N{ x } nu este tare conex).

    Definiia 1.18 Un nod r al d igrafului G = (N, A) se nume te nod rdcin dac pentru oricare alt nod x din N exist un

    drum de la r la x.

    Observaia 1.6Noiunea de nod rdcin are sens numai pentru grafuri orientate . Un nod rdcin nu exist ntotdeauna.

    Exemplul 1.15Nodul 1 al digrafului d in figura 1.8 este nod rdcin.

    Definiia 1.19 Un digraf G = (N, A) se numete quasi tare conex dac pentru oricare dou noduri x, y din N exist unnod z din N (care poate s coincid cu x sau y) de la care pleac un drum care ajunge la x i un drum care ajunge lay.

    s

    1

    s

    3

    s

    5

    s

    4

    s

    2

    a1a4

    a5

    a2

    a3

    a7

    a6

    Figura 1.7

    Figura 1.8

    1

    a3

    6

    2

    5

    7

    8

    9 10

    3

    4a1

    a2

    a6

    a5

    a4

    a7

    a8

    a9

  • 8/13/2019 Algoritmica E Ciurea

    9/84

    Eleonor CIUREA ALGORITMICA

    9

    Observaia 1.7Un digraf tare conex este quasi tare conex. Reciproca nu este adevrat.Un digraf quasi tare conex este conex. Reciproca nu este adevrat.

    Exemplul 1.16Digraful din figura 1.8 este quasi tare conex.

    Definiia 1.20

    Un digraf G

    = (N, A

    ) se numete arborescen dac este fr cicluri i quasi tare conex.Observaia 1.8

    No iunea de arborescen a re un sens numai pen tru gra furi o rientate.

    Exemplul 1.17Digraful din figura 1.8 este o arborescen.O arborescen G= (N, A) se mai numete i arbore rdcin.Un arbore rdcin se poate reprezenta pe niveluri n modul urmtor: pe nivelul 0 se reprezint nodul

    rdcin r i pe nivelul k se reprezint nodurile x pentru care lungimea drumurilor de la r la x este egal cu k. nacest caz sgeata de pe fiecare arc este omis, deoarece sensul este de la nivelul k la k+1, pentru k = 0,1, .

    n continuare este prezentat terminologia pentru arborii rdcin reprezentai pe niveluri.

    Definiia 1.21 Lungimea drumului unic de la nodul rdcin r la un nod y se numete adncimea nodului y.Adncimea nodului y, notat h(y), se poate defini recursiv n modul urmtor:

    x.luisuccesorulesteydac1,h(x),rnodulesteydac,0

    )(yh

    Evident c adncimea unui nod reprezint nivelul acestui nod.

    Definiia 1.22 Nodul x se numete ascendent direct sau printe al nodului y i nodul y se numete descendent direct sau

    fiu al nodului x dac x este predecesor al nodului y, altfel spus, (x, y) A. Nodurile y care au acelai printe x senumesc frai. Nodul x se numete nod intern dac are cel puin un succesor i se numete nod terminal sau nodfrunz dac nu are nici un succesor.

    Exemplul 1.18

    Arborescena din figura 1.8 este redat ca arbore rdcin reprezentat pe niveluri n figura 1.9.

    Avem: h(1) = 0, h(2) = h(5) = h(6) = 1, h(3) = h(4) = h(7) = h(8) = h(9) = 2, h(10) = 3, h(G ) = 3; nodul 1este nod rdcin, nodurile 1, 2, 6, 9 sunt noduri interne, nodurile 3, 4, 5, 7, 8, 10 sunt noduri terminale sau frunze;nodurile 7, 8, 9 sunt frai avnd nodul 6 ca printe.

    Definiia 1.23Un arbore rdcin cu proprietatea c fiecare nod are cel mult p succesori se numete arbore p-ar. Un

    arbore p-ar se numete complet dac fiecare nod intern are exact psuccesori i se numete plin dac fiecare nod

    intern are exactpsuccesori i toate nodurile terminale au aceeai adncime.

    43

    2

    10

    987

    65

    1

    Figura 1.9

  • 8/13/2019 Algoritmica E Ciurea

    10/84

    Eleonor CIUREA ALGORITMICA

    10

    Exemplul 1.19Arborele din figura 1.9 nu este nici complet i nici plin.Arborele ternar ( 3-ar ) reprezentat n figura 1.10(a) este complet dar nu este plin i arborele reprezentat n

    figura 1.10(b) este plin deci i complet.

    Definiia 1.24Un arbore rdcin cu proprietatea c succesorii fiecrui nod intern sunt ordonai, se numete arbore

    ordonat. Dac ordinea nu este precizat, atunci implicit este de la stnga la dreapta.Un arbore rdcin se poate defini i recursiv n modul urmtor.

    Definiia 1.25

    Se numete arbore rdcin un ir finit de forma G = (r, G1, , G t), unde r este nodul rdcin, iarirul G1,, G t este un ir finit, eventual vid, de subarbori rdcin cu nodurile rdcin r1, ... , rt succesori ainodului r.

    Definiia 1.26Un ir finit, eventual vid, de arbori rdcin se num etepdurepe care o notm cu G* , dac nu este vid i

    cu , dac este vid.

    Observaia 1.9

    Dac dintr-un arbore rdcin G = (r, G1, ,G t) se elimin nodul rdcin ri arcele incidente laacesta, atunci se obine o pdure G* = (G 1, ... , G t) i arborele rdcin G se poate exprima sub forma G= (r,G*).

    Exemplul 1.20Dac din arborele rdcin reprezentat n figura 1.9, se elimin nodul rdcin r = 1 i arcele (1,2), (1,5), (1,6)

    se obine pdurea G* = (G 1, G2, G3), unde subarborii rdcin G 1, G2, G3 au nodurile rdcin r 1= 2, r2= 5, r3= 6.

    Definiia 1.27Un arbore 2-ar ordonat pentru care fiecare succesor este denumit fie succesor stng, fie succesor drept se

    numete arbore binar.Se accept i arborele binar vid. Dac se suprim nodul rdcin ri arcele incidente la acest nod, arborii

    binari obinui se num esc sub arborele stng, respectiv subarborele drept al rdcinii r. Unul dintre aceti subarborisau amndoi pot fi vizi. Noiunea de subarbore stng sau drept se aplic oricrui nod xal arborelui. Astfel, un arborebinar se poate defini i rec ursiv n modul urmtor.

    Definiia 1.28

    Se numete arbore binar un ir, fie vid notat , fie finit de forma G= (r, G1, G2), unde reste nodulrdcin i G1, G2sunt subarborele stng, respectiv subarborele drept ai nodului rdcin r.

    . . .. .. .

    .

    . . .

    .

    .

    .

    ...

    .

    .

    ..

    . .

    Fig. 1.10

    (a) (b)

  • 8/13/2019 Algoritmica E Ciurea

    11/84

    Eleonor CIUREA ALGORITMICA

    11

    Exemplul 1.21

    Arborele binar reprezentat n figura 1.11(a) are r = 1, subarborele stng G 1 are nodul rdcin r1 = 2 isubarborele drept G2are nodul rdcin r2= 8. Nodul x = 3 are subarborele stng format numai din nodul rdcin

    r = 4 i subarborele drept este vid. n figura 1.11(b) sunt reprezentai doi arbori binari care sunt identici ca arborirdcin, dar sunt distinci ca arbori binari, deoarece arborii binari sunt arbori rdcin ordonai i nodul 2 estesuccesorul stng respectiv succesorul drept al nodului rdcin 1.

    Definiia 1.29

    Un arbore binar G = (N, A) se numeteperfect dac toate nodurile terminale sunt situate pe ultimeledou niveluri n modul urmtor: penultimul nivel q - 1 este plin (are 2q-1 noduri) i pe ultimul nivel q nodurileterminale sunt grupate cel mai la stnga posibil.

    Exemplul 1.22Arborele binar din figura 1.12(a) este perfect, dar nu este complet. Arborele binar din figura 1.12(b) este

    complet, dar nu este perfect.Nodur ile unui arbore binar perfect sunt num ero tate ntr-o ordine ierarhic perfect care const n a

    numerota n ordine cresctoare, plecnd de la 1, toate nodurile arborelui binar perfect n ordinea cresctoare anivelurilor i pe fiecare nivel numerotarea se face de la stnga la dreapta.

    Exemplul 1.23Arborele binar perfect reprezentat n figura 1.12(a) are nodurile numerotate n ordine ierarhic perfect.

    Observaia 1.10

    Dac ntr-un arbore binar perfect un nod este numerotat prin k n numerotarea ierarhic perfect, atuncisuccesorul su stng este numerotat prin 2kiar succesorul su drept prin 2k+1.

    53

    2

    1

    (a)

    4 6 7

    8

    9

    Figura 1.11

    2

    1 1

    2

    (b)

    Figura 1.12

    (b)

    54

    2

    1

    (a)

    8 10

    3

    9 11

    76

    12

    .

    . . . .

    .. .

    . .

    .

  • 8/13/2019 Algoritmica E Ciurea

    12/84

    Eleonor CIUREA ALGORITMICA

    12

    2. ALGORITMI

    2.1. Noiunea de algoritm

    n cele ce urmeaz ne vom limita la o introducere intuitiv, practic, a noiunii de algoritm. O definiieriguroas, matematic, presupune alte noiuni a cror prezentare ar ngreuna expunerea i ne-ar abate de la scopulurmrit n acest capitol.

    Definiia 2.1 Prin algoritm se nelege un ir de reguli care, aplicat la o anumit clas de probleme de acelai tip,

    conduce de la condiiile iniiale ale problemei, la soluia problemei respective, cu ajutorul unor operaii succesive, nnumr finit i unic determinate.

    Exemplul 2.1

    Algoritmul lui Euclid pentru calculul celui mai mare divizor comun a dou numere ntregi. Algoritmul care descrie teorema lui Cram er pentru rezolvarea sistemelor de ecuaii liniare.

    Definiia 2.2Se numete informaie admisibila unui algoritm, o informaie iniial pentru care algoritmul respectiv

    este aplicabil. Totalitatea informaiilor admisibile ale unui algoritm formeaz domeniul algoritmului.

    Exemplul 2.2Domeniul algoritmului care descrie teorema lui Cramer pentru rezolvarea sistemelor de ecuaii liniare, esteformat din sisteme liniare de necuaii cu nnecunoscute avnd matricea nesingular.

    Observaia 2.1

    Un algoritm poate fi definit ca o funcie : D F, unde D este domeniul algoritmului , iar F estemulimea informaiilor finale ce se obin prin aplicarea algoritmului tuturor informaiilor din D (F = (D)). irul dereguli ce constituie algoritmul , arat cum aceast funcie poate fi calculat efectiv.

    Orice algoritm trebuie sa aib urmtoarele caracteristici impo rtante: Generalitatea (Universalitatea) Aceasta nseamn c, un algoritm nu rezolv o singur problem, ci o

    clas de probleme de acelai tip, deci este aplicabil oricrei informaii din domeniul su D. Finitudinea (Eficacitatea) Aceasta nseamn c, numrul transformrilor ce trebuie aplicate unei

    informaii admisibile pentru a obine informaia final corespunztoare, este finit.

    Unicitatea (Claritatea)Acesta nseamn c toate transformrile prin care trece informaia iniial, pnla obinerea informaiei finale, sunt univoc determinate de regulile algoritmului.

    Orice algoritm poate fi compus din algoritmi mai simpli. Comp unerea algoritmilor se poate face n dou moduri: compunerea prin suprapunere; compunerea prin succesiune.

    Definiia 2.3Se numete compunere prin suprapunerea algoritmilor 1 i 2, algoritmul 1(2) n care algoritmul 2

    face parte din procesul de calcul al algoritmului 1.

    Exemplul 2.3S considerm metoda lui Newton pentru aproximarea unei soluii a ecuaiei algebrice P n(x) = 0, unde

    Pn(x) este un polinom de gradul n, tiind c aceast soluie este izolat n intervalul (a, b). Dac se consider x0(a, b) ca valoare de pornire, atunci

    ...1,2,k,)(')(

    1

    11

    kn

    knkk

    xP

    xPxx

    Calculul aproximantelor xk se continu pn cnd se obine precizia cerut. Dac se noteaz prin 1algoritmul metodei lui Newton i prin 2algoritmul de calcul al valorii unui polinom ntr-un punct, atunci algoritmulproblemei cons iderate este 1(2).

    Definiia 2.4 Se numete compunere prin succesiune a algoritmilor 1i 2, algoritmul 12, n care informaia final a

    lui 1face parte din domeniul algoritmului 2(21

    DF ).

    Exemplul 2.4Se cere calculul lui P n(d), unde Pn(x) este un polinom de gradul n, iar d este c.m.m.d.c. a dou numere

    ntregi. Dac se noteaz cu 1 algoritmul lui Euclid pentru calculul c.m.m.d.c. a dou numere ntregi i prin 2algoritmul pentru calculul valorii polinomului Pn(x) ntr-un punct dat, algoritmul pentru calculul lui Pn(d) este 12.Pentru exprimarea unui algoritm se utilizeaz urmtoarele operaii: operaii de calcul: adunarea, scderea, nmulirea, mprirea, ridicarea la putere;

  • 8/13/2019 Algoritmica E Ciurea

    13/84

    Eleonor CIUREA ALGORITMICA

    13

    operaii de atribuire:efectul unei operaii de atribuire const n faptul c unei variabile i se atribuie ovaloare;

    operaii de decizie: efectul unei operaii de decizie const n determinarea valorii logice de adevr aunei propoziii.

    Deoarece algoritmii se studiaz, n principal, pentru rezolvarea problemelor cu ajutorul unui sistem decalcul, ca operaii n descrierea unui algoritm sunt considerate urmtoarele:

    operaii de pornire i oprire a procesului de calcul;

    operaii de introducere i extragere a informaiilor; operaii de calcul i atribuire; operaii de decizie.

    n funcie de operaiile pe care le conin, algoritmii pot fi mprii n dou clase: algoritmi liniari; algoritmi ramificai.

    Un algoritm este liniar dac nu conine nici o operaie de decizie.Un algoritm este ramificat dac conine cel puin o operaie de decizie.Prin cicluse nelege o succesiune de operaii care se repet n aceeai ordine de un anumit numr de ori.

    Dup cum conin sau nu conin cicluri, algoritmii ramificai sunt de dou categorii: algoritmi ciclici; algoritmi aciclici.

    Numrul de repet ri ale unui ciclu poate fi fix sau variab il. Astfel, putem avea : algoritmi ciclici cu un numr cunoscut de repetri; algoritmi ciclici cu un numr necunoscut de repetri.

    2.2. Reprezentarea algoritmilor cu ajutorul schemelor logice

    Prin schem logic sau program sub form de schem logic se realizeaz o reprezentare grafic amodului n care se succed operaiile prevzute de algoritm. Schema logic este format din instruciuni care descriuoperaiile algoritmului reprezentat.

    Presupunem c datele de intrare se afl pe o band de intrare, iar datele de ieire sunt nregistrate pe oband de ieire . Mo dul de organizare i acces pentru mediile de intrare i ie ire este cel secvenial. Instruciunile

    care alctuiesc un program sub form de schem logic sunt reprezentate prin arce etichetate. Sunt admiseurmtoarele instruciuni:1) Instruciunea START are forma:

    Efectul instruciunii const n pornirea procesului de calcul, deci desemneaz operaia de pornire aprocesului de calcul .

    2) Instruciunea de citireare forma:

    Efectul instruciunii const n citirea, n ordine, a nvalori de pe banda de intrare i nscrierea lor n locaiile dememorie rezervate pentru variabilele v1, . . . ,vn, deci desemneaz operaia de introducere a datelor.

    3) Instruciunea de atribuireare forma:

    Efectul instruciunii const n evaluarea expresiei ex i nscrierea rezultatului n locaia de memorierezervat variabilei v, deci desemneaz operaia de atribuire.

    START

    CITETEv1... vn

    v := ex

  • 8/13/2019 Algoritmica E Ciurea

    14/84

    Eleonor CIUREA ALGORITMICA

    14

    4) Instruciunea de decizieare forma:

    unde p1, p2 , , pnsunt predicate satisfcnd relaiile :p1 p2 pn= 1

    pi pj= 0, i jcare exprim faptul c unul i numai unul dintre aceste predicate poate fi satisfcut. Efectul instruciuniiconst n continuarea operaiilor mergnd pe arcul corespunztor acestui unic predicat satisfcut. Pentrucazul n = 2 este folosit reprezentarea :

    Deci, aceast instruciune desemneaz o operaie de decizie.

    5) Instruciunea de scriereare forma:

    unde v1, , vn sunt variabile sau mesaje. Efectul instruciunii const n scrierea, n ordine, a nvalori pebanda de ieire memorate n locai ile de memorie rezervate pentru variab ile le v1, ,vn sau n scrierea

    succesiunii de caractere din care este alctuit mesajul, deci desemneaz operaia de extragere a datelor.6) Instruciunea STOP are forma:

    Efectul instruciunii const n oprirea procesului de calcul, deci desemneaz operaia de oprire a procesuluide calcul.

    Observaia 2.21) Punctele marcheaz extremitile arcelor etichetate care reprezint instruciuni.

    2) Extremitatea iniial a arcului care reprezint instruciunea START nu este pus explicit n evidendeoarece n aceast extremitate nu pot sosi arce.3) Extremitatea final a arcului care reprezint instruciunea STOP nu este pus explicit n eviden

    deoarece din aceast extremitate nu pot pleca arce.Definiia 2.5

    Se numete schem logicsau program sub form de schem logic un graf orientatcu proprietile:1) Orice arc este un arc etichetat conform instruciunilor prezentate mai sus; n cazul cnd arcul este

    etichetat cu un predicat, extremitatea iniial a arcului trebuie s fie extremitatea iniial a uneiinstruciuni de decizie.

    2) Exist o unic instruciune START i o unic instruciune STOP.3) Orice arc aparine cel puin unui drum de la instruciunea START la instruciunea STOP.

    Observaia 2.31) Din definiie rezult c ntr-un program sub form de schem logic este exclus existena unui arc

    diferit de instruciunea STOP din a crui extremitate final s nu plece vreun alt arc.

    p1p2 pn

    STOP

    SCRIEv1... vn

    pDA NU

  • 8/13/2019 Algoritmica E Ciurea

    15/84

    Eleonor CIUREA ALGORITMICA

    15

    2) De asemenea, din definiie rezult c un program sub form de schem logic nu poate conineconfiguraii de forma:

    care reprezint cicluri inerent infinite. ns definiia nu poate elimina toate cazurile de nedeterminare aprogramelor. Prentmpinarea unor astfel de situaii cade n sarcina programatorului.

    3) Deoarece ntr-o schem logic delimitarea instruciunilor este clar, se omit punctele prin care suntmarcate extremitile lor.

    Definiia 2.6Se numete subschem logicsau subprogram sub form de schem logic un graf orientat cu

    proprietile:1) Orice arc este un arc etichetat conform instruciunilor prezentate mai sus; n cazul cnd arcul este

    etichetat cu un predicat, extremitatea iniial a arcului trebuie s fie extremitatea iniial a unei

    instruciuni de decizie.2) Exist un singur nod iniial (n care nu sosesc arce) i un singur nod final (din care nu pleac arce).3) Orice arc aparine cel puin unui drum de la nodul iniial la nodul final.

    Observaia 2.4 1) Dac subschema logic conine instruciunea START, atunci extremitatea iniial a acesteia este tocmai

    nodul iniial, iar dac conine instruciunea STOP, atunci extremitatea final a acesteia este tocmainodul final.

    2) O schem logic este, n particular, o subschem logic n care nodul iniial este extremitatea iniial ainstruciunii START, iar nodul final este extremitatea final a instruciunii STOP.

    3) ntr-un program sub form de schem logic se poate utiliza i instruciunea de apel de subprogram careeste sub forma

    unde SP este numele subprogramului, iar v1, . , vnsunt variabile de intrare i ieire. Dac n interiorulblocului se scr ie numai SP atunci arcul etichetat a stfe l reprezint instruc iunea subprogram.

    2.3. Programe structurate

    n practic, programele sub form de schem logic pot lua forme foarte complicate. De aceea, n

    construcia programelor sub form de schem logic se folosesc numai anumite structuri numite structurifundamentale. Exist trei tipuri de structuri fundamentale: structuri liniare, structuri alternative, structuri repetitive.Structura liniareste un subprogram care se construiete conform regulilor:

    1) Instruciunile START, de citire, de atribuire, de apel de subprograme, de scriere, STOP sunt structuriliniare.

    2) Dac SL1, S L2 sunt structuri liniare atunci structura

    este o structur liniar.

    pDA NU

    SP(v1,...,vn)

    SL1

    SL2

  • 8/13/2019 Algoritmica E Ciurea

    16/84

    Eleonor CIUREA ALGORITMICA

    16

    3) Orice structur liniar se construiete plecnd de la structurile liniare prezentate n regula 1 i aplicndde un numr finit de ori regula 2.

    Structura alternativeste un subprogram care se construiete conform regulilor:1) Instruciunea de decizie este o structur alternativ.2) Dac SF1,, SFn sunt structuri fundamentale atunci structura

    este o structura alternativ. Predicate p1,,pn trebuie s satisfac condiiile prezentate la instruciuneade decizie.

    Observaia 2.5n cazul n = 2 este folosit reprezentarea

    Dac una din structurile SF1, SF2 este vid, atunci arcul respectiv nu este etichetat.

    Structurile repetitivesunt subprograme care descriu cicluri. n cazul ciclurilor cu un numr necunoscut derepetri, evaluarea predicatuluippentru ieirea din ciclu se poate face nainte sau dup execuia ciclului.

    Dac evaluarea predicatuluipse face nainte de execuia ciclului, atunci structura repetitiv este de una dinformele:

    Dac evaluarea predicatuluipse face dup execuia ciclului, atunci structura repetitiv este de forma:

    p1 pn

    SF1 SFn

    p

    DA

    NU

    SF

    p

    NU

    DA

    SF

    p NU

    DA SF

    DA NU

    SF1 SF2

  • 8/13/2019 Algoritmica E Ciurea

    17/84

    Eleonor CIUREA ALGORITMICA

    17

    Structura repetitiv care descrie cicluri cu un numr cunoscut de repetri este de forma:

    unde:v reprezint o variabil numit variabil contor;

    vi reprezint valoarea iniial a variabilei v;vc reprezint valoarea de cretere a variabilei v;vf reprezint valoarea final a variabilei v.

    Observaia 2.6Exist situaii cnd evaluarea predicatului p se face n interiorul ciclului. n acest caz structura repetitiv

    este de forma:

    Definiia 2.7Se numete subprogram bine structurat un subprogram construit conform regulilor:1) instruciunile START, de citire, de atribuire, de apel de subprograme, de scriere, STOP sunt

    subprograme bine structurate;2) structurile liniar, alternativ n cazul n = 2 i repetitiv n cazul evalurii predicatului p naintea

    execuiei ciclului (prima form) sunt subprograme bine structurate;3) concatenarea a dou subprograme bine structurate este un subprogram bine structurat;4) orice subprogram bine structurat se obine aplicnd regulile precedente de un num r finit de ori.

    Definiia 2.8Se numete program bine structurat un subprogram bine structurat care este un program.

    Observaia 2.7Conform definiiilor prezentate un program bine structurat este un caz particular de subprogram bine

    structurat n care nodul iniial este extremitatea iniial a instruciunii START, iar nodul final este extremitatea finala instruciunii STOP.

    Fie Vmulimea valorilor care pot fi luate de variabilele din program. Fie Vnmulimea irurilor de n 0astfel de valori. Atunci unui program sub form de schem logic i se poate ataa o funcie parial definit

    s : VnVn

    unde domeniul Dspe care este definit funciaseste format din acele iruri x V naflate pe banda de intrare pentru care

    programul se termin (se ajunge la instruciunea STOP), pe banda de ieire obinndu-se irul s(x).Definiia 2.9

    Dou programe sub form de schem logic P1 i P2care au asociate funciile s1 i s2se numesc echivalentedac:

    p

    DA

    NU

    SF1 SF2

    NU

    DA

    SF

    v := v+vc

    v := vi

    >vf

  • 8/13/2019 Algoritmica E Ciurea

    18/84

    Eleonor CIUREA ALGORITMICA

    18

    1) Ds1= Ds2 .2) Pentru orice x D s1= Ds2avem s1(x) = s2(x).

    Teorema 2.1(Bhm, Jacopini) Orice program sub form de schem logic este echivalent cu un program sub form de

    schem logic bine structurat.

    Dem onstraie

    Vezi [13].Observaia 2.8

    n practica curent n construcia programelor sub form de schem logic sunt utilizate i celelaltestructuri fundamentale care nu intervin n construcia unui program bine structurat.

    2.4. Reprezentarea algoritmilor cu ajutorul limbajului algoritmic

    Limbajul algoritmic numit i pseudocodconstituie un mijloc de reprezentare natural a algoritmilor.Datele cu care se lucreaz sunt de tipurile: ntreg, real, logic, ir de caractere. Asupra datelor se fac operaiile

    cunoscute (adunarea, scderea, nmulirea, mprirea, exponenierea, comparaii), iar natura rezultatului este n funcie detipul datelor cu care se opereaz. De asemenea, datele pot fi organizate n tablouri, stive, cozi sau ansamble. Tablourile pot

    fi unidimensionale (vectori), bidimensionale (matrice, masiv) sau n-dimensionale.Operaiile cu stive, cozi, ansamble sunt: extragerea unui element x (x L), introducerea unuielement x (x L) i verificarea dac stiva, coada sau ansamblul este vid (L = ).

    Prin program n limbaj algoritmic se nelege o succesiune de instruciuni ale limbajului.Instruciunile limbajului algoritmic pot fi scrise liber n sensul c o instruciune se poate scrie pe mai m ulte

    rnduri, iar un rnd poate conine mai multe instruciuni. Instruciunile se separ ntre ele prin caracterul punct ivirgul. Aceste instruciuni, cu excepia celei de atribuire, sunt identificate prin anumite cuvinte, numite cuvintecheie. Pentru a marca cuvintele cheie le vom scrie cu litere mari de tipar. Deosebim instruciuni declarative iefective.

    O instruciune declarativ este format dintr-un cuvnt cheie, urmat de un ir de variabile separate princaracterul virgul. Cuvintele cheie sunt:

    INTEGER pentru date de tip ntreg;REAL pentru date de tip real;BOOLEAN pentru date de tip logic;CHAR pentru date de tip caracter;ARRAY pentru structura de tablou;STACK pentru structura de stiv;QUEUE pentru structura de coad;HEAP pentru structura de ansamblu.

    Instruciunile efective corespund structurilor fundamentale din programarea structurat.

    Instruciunea de pornireare forma :

    PROGRAM id;

    unde id este un identificator (ir de caractere) care d numele programului. Aceast instruciune corespunde

    instruciunii START de la scheme logice.Instruciunea de citire are forma:

    READ v1, , vn;

    unde v1, ..., vnsunt variabile.

    Instruciunea de atribuire are forma:

    v := ex;

    unde veste o variabil, iar exeste o expresie. Din aceast categorie fac parte i operaiile de scoatere sau introducerea unui element din sau n stiv, coad sau ansamblu.

    Instruciunea de scriere are forma:

    WRITE v1, , vn;unde v1,,vnsunt variabile.

  • 8/13/2019 Algoritmica E Ciurea

    19/84

    Eleonor CIUREA ALGORITMICA

    19

    Instruciunile de citire, atribuire, scriere au aceeai semnificaie cu cea a instruciunilor de citire, atribuire,scriere prezentate la descrierea schemelor logice.

    Instruciunea alternativ generalizat are forma:

    CASE OFp1: s1. . .

    pn: snENDCASE;

    unde s1, , sn sunt secvene de instruciuni, iar p1, , pn sunt predicate satisfcnd condiiile: p1 pn = 1, p ipj= 0, i j.

    Instruciunea alternativ generalizat codific structura alternativ generalizat. Aceast instruciune poateavea i forma :

    CASE OFp1 : s1. . .pn: sn

    ELSE s0ENDCASE;

    Instruciunea alternativare forma:

    IF pTHEN

    s1[ELSE

    s2]ENDIF;

    unde p este un predicat iar s1, s2 sunt secvene de instruciuni. Aceast instruciune codific structura alternativpentru n = 2. Dac s2este secvena vid atunci ramura ELSE lipsete.

    Instruciunea repetitiv condiionatanteriorare una din formele:

    WHILE p DO UNTIL p DOs sENDWHILE; ENDUNTIL;

    undepeste un predicat, iarseste o secven de instruciuni. Aceste instruciuni codific structurile repetitivecondiionate anterior.

    Instruciunea repetitiv condiionat posterior are una din formele:

    REPEAT DOs s

    UNTIL p; ENDDO;

    undepeste un predicat, iar seste o secven de instruciuni. S observm c a doua form nu reprezint neaprat unciclu infinit deoarece secvena de instruciuni spoate conine o instruciune de oprire sau o instruciune de ieire din

    ciclu. Instruciunea REPEAT UNTIL codific structura repetitiv condiionat posterior.Instruciunea repetitiv cu numrul de repetri cunoscut, are forma:

    FOR v := ex1, ex2 [, ex3]s

    ENDFOR;

    unde s este o secven de instruciuni, v este o variabil numeric, iar ex1, ex2, ex3 sunt expresii aritmetice. ex1

    reprezint expresia de iniializare, ex2 condiia de continuare, iar ex3 pasul iteraiei. Fie vex i valoarea expresiei exi;vex3 trebuie s fie diferit de 0; dac vex3 = 1, atunci ex3poate fi omis. Instruciun ea FOR codific structurarepetitiv care descrie cicluri cu un numr cunoscut de repetri.

    Instruciunea de ieire din ciclu are forma :

    EXIT;

    Efectul instruciunii const n trecerea la execuia primei instruciuni care urmeaz celui mai interior ciclucare o conine.

  • 8/13/2019 Algoritmica E Ciurea

    20/84

    Eleonor CIUREA ALGORITMICA

    20

    Instruciunea de repetare a ciclului are forma:

    CYCLE;

    Efectul instruciunii const n reluarea parcurgerii celui mai interior ciclu care o conine.

    Instruciunea de oprire este de forma:

    STOP.

    i corespunde instruciunii STOP de la scheme logice.Instruciunea de apel de subprogram are forma:

    CALL id [(pa1, ..., pan)];

    unde ideste identificatorul care d numele subprogramului, iarpa1, ...,pansunt parametrii actuali. Lista parametriloreste opional.

    Exemplul 2.5S se calculeze mediile aritmetic, geometric i armonic a trei numere reale pozitive.

    (1) PROGRAM CALCUL;(2) BEGIN(3) READ X, Y, Z;

    (4) S := X + Y + Z;(5) P := X * Y * Z;(6) S1 := 1 / X + 1 / Y + 1 / Z;(7) MA := S / 3;(8) MG := P1 /3;(9) MR := 3 / S1;(10) WRITE MA, MG, MR;(11) END.

    Exemplul 2.6Se dau trei numere A, B i C reprezentnd coeficienii unei ecuaii de gradul 2. S se rezolve ecuaia i s

    se afieze rezultatele obinute.

    (1) PROGRAM ECUATIE_GRAD_2;(2) BEGIN(3) READ A, B, C;(4) S := X + Y + Z;(5) IF A = 0 THEN(6) IF B = 0 THEN(7) IF C = 0 THEN(8) WRITE Ecuatia are o infinitate de solutii(9) ELSE(10) WRITE Ecuatia nu are nici o solutie(11) ENDIF;(12) ELSE(13) BEGIN(14) X := C / B;(15) WRITE X;(16) END;(17) ENDIF;(18) ELSE(19) BEGIN

    (20) D := B2

    4 * A * C(21) IF D < 0 THEN(22) WRITE Ecuatia nu are solutii reale(23) ELSE(24) IF D = 0 THEN(25) BEGIN(26) X := B / 2 * A(27) WRITE X;(28) END;(29) ELSE(30) BEGIN(31) X1 := (B D1/2) / 2*A;(32) X2 := (B + D1/2) / 2*A;(33) WRITE X1, X2;(34) END;(35) ENDIF;

    (36) ENDIF;(37) END;(38) ENDIF(39) END.

  • 8/13/2019 Algoritmica E Ciurea

    21/84

    Eleonor CIUREA ALGORITMICA

    21

    Exemplul 2.7Se d o matrice A cu mlinii i ncoloane. S se afieze cte elemente nule are fiecare linie a matricei.(1) PROGRAM NUMARA;(2) BEGIN(3) READ M, N, AI,J, 1 I M, 1 J N;(4) FOR I := 1, I N(5) BEGIN(6) L := 0;(7) FOR J := 1, J M DO

    (8) IF AI,J= 0 THEN(9) L := L + 1(10) ENDIF;(11) ENDFOR;(12) WRITE L;(13) END;(14) ENDFOR;(15) END.

    Exemplul 2.8Se d un ir A cu nelemente. S se elimine elementele nule din ir.

    (1) PROGRAM ELIMINARE;(2) BEGIN(3) READ N, AI,1 I N;(4) I := 1;(5) WHILE I N DO(6) IF AI= 0 THEN(7) FOR J := I, J N 1(8) AJ := AJ+1;(9) ENDFOR;(10) N := N 1;(11) I := I 1;(12) ENDIF(13) I := I + 1;(14) ENDWHILE;(15) WRITE A(16) END.

    Exemplul 2.9Se d un ir A cu nelemente. S se ordoneze irul A folosind metoda bulelor.

    (1) PROGRAM ORDONARE;(2) BEGIN(3) READ N, AI,1 I N;(4) REPEAT(5) ORDONAT := TRUE;(6) FOR I := 1, I < N(7) IF AI> AI + 1 THEN(8) AUX := AI;(9) AI:= AI+1;(10) AI + 1:= AUX;(11) ORDONAT := FALSE;(12) ENDIF;(13) ENDFOR;(14) UNTIL ORDONAT = TRUE;(15) END.

    2.5. Noiuni de complexitatea algoritmilor

    n procesul de rezolvare a problemelor folosind calculatorul se disting urmtoarele faze:- elaborarea algoritmului;- descrierea algoritmului;- demonstrarea corectitudinii algoritmului;- analiza complexitii algoritmului;- implementarea algoritmului.

    Faza de elaborare a algoritmuluiconst n: crearea unui algoritm pentru rezolvarea problemei propuse.Actul de creare a unui algoritm este un mecanism complex care produce noul printr-o sintez ntre tehnicilefundamentale de elaborare a algoritmilor i creativitatea uman. Aceast faz este necesar n urmtoarele dou

    cazuri : - nu se cunosc algoritmi pentru rezolvarea problemei propuse;- algoritmii cunoscui pentru problema propus sunt ineficieni.

  • 8/13/2019 Algoritmica E Ciurea

    22/84

    Eleonor CIUREA ALGORITMICA

    22

    Faza de descriere a algoritmuluiconst n exprimarea n mod natural a metodei de rezolvare a problemei dupcare se elaboreaz programul sub form de schem logic sau n limbaj algoritmic al algoritmului ce urmeaz aceastmetod.

    Faza de demonstrare a corectitudinii algoritmului const n validarea lui pentru a ne asigura calgoritmul este corect, independent de limbajul n care el va fi apoi programat.

    Faza de analiz a complexitii algoritmului const n determinarea unui criteriu de apreciere a

    algoritmilor pentru a putea decide care dintre algoritmii care rezolv aceeai problem este mai bun.Faza de implementare a algoritmuluiconst din dou subfaze :- programarea algo ritmului ntr-un lim baj de p rogramare ;- testarea programului elaborat.Aceste faze nu sunt distincte n general i rareori se pot parcurge liniar.n acest paragraf se va nota cu rcel mai mic ntreg, mai mare sau egal cu r, pentru r R .Fie un digraf G = (N, A) cu |N| = n noduri i |A| = m arce. Se consider funcia valoare b : A R i funcia

    capacitate c : A R. Funcia valoare breprezint fie funcia distan, fie funcia cost, etc. Fie b = max { b(x, y) | (x, y) A } i c = max {c(x, y) | (x, y) A}.

    Definiia 2.10 Prin problem se nelege o funcie total definit P : I > F, unde Ieste mulimea informaiilor iniiale (datele de

    intrare ale problemei) iF

    este mulimea informaiilor finale (datele de ieire ale problemei).Se presupune c mulimileIi Fsunt nevide i cel mult num rabile.

    Exemplul 2.10n reeaua G = (N, A, b) se poate formula problema drumului cel mai scurt, iar in reeaua G = (N, A, c)

    problema fluxului maxim .

    Definiia 2.11

    Se numete instana problemeiP, precizarea problemei P(i) pentru o valoare specificat i I .Pentru o instan P(i) se va folosi i notaiap, iar prin abuz de notaie, uneori vom scrie p P.

    Exemplul 2.11

    n problema drumului cel mai scurt n reeaua G = (N, A, b), pentru a defin i o instan a acestei

    probleme este necesar s specificm topologia digrafului G = (N, A), nodurile surs i destinaie i funcia

    b.

    Definiia 2.12

    Se spune c algoritmul rezolv problemaP, dac algoritmul determin soluia oricrei instane p P.Un algoritm care rezolv instanapva porni de la o codificare a informaiei iniiale i I i va furniza o

    codificare a rezultatului.

    Definiia 2.13

    Se numete dimensiunea problemei P un numr natural, notat d(p), p P, care reprezint lungimeaunei codificri binare a informaiei iniiale.

    n general, d(p) este un numr natural care reprezint dimensiunea structural a informaiei

    iniiale, deoarece lungimea unei codificri binare a informaiei iniiale va fi mrginit de o funcie avnd ca

    argument dimensiunea sa structural.

    Exemplul 2.12S considerm o problem care are ca dat de intrare un digraf G = (N, A) reprezentat prin matricea sa de

    adiacen M. Pentru aceast problem trebuie log nbii pentru codul numrului n i n2bi i pentru rep rezentareamatricei. Dimensiunea problemei este log n + n2. Pentru n suficient de mare, se poate considera dimensiuneaproblemei egal cu n2.

    Exemplul 2.13S considerm o problem care are ca dat de intrare o reea G = (N, A, b). Presupunem c pentru

    reprezentarea grafului G = (N, A), se folosesc listele de adiacen P (lista de pointeri) i V (lista nodurilor).Dac notm cu +(i) semigradul exterior al nodului i N, atunci lista P este un tablou unidimensional ce aren+1elemente cu P(1) = 1 i P(i+1) = P(i) + +(i), i = 1, 2, , n. Lista Veste un tablou unidimensional ce are melemente i V(P(i)) pn la V(P(i+1) 1) conin succesorii nodului i. Deci 1 P(i) m+1, i = 1, , n+1 i 1V(i) n, i = 1, , m. D eci pentru a descrie aceast problem sunt necesari :

  • 8/13/2019 Algoritmica E Ciurea

    23/84

    Eleonor CIUREA ALGORITMICA

    23

    log nbii pentru codificarea lui n;log mbii pentru codificarea lui m;(n+1)log(m+1)bii pentru codificarea elementelor tablouluiP;mlog nbii pentru codificarea elementelor tabloului V;mlog bbii pentru codificarea valorilor numerice b(x,y), (x,y)A.

    Rezult c dimensiunea problemei este log n+ log m+ (n+1)log(m+1) + mlog n+ mlog b.

    Pentrum

    in

    suficieni de mari se poate considera c problema are dimensiunea mlog n

    .n continuare, se vor prezenta diferite abordri ale complexitii unui algoritm.

    Resursele de calcul asociate execuiei unui algoritm sunt spaiul de me morie i timpul necesar de execuie.Ne vom ocupa numai de resursa timp, deoarece progresele tehnolog ice din ult ima perioad conduc la o scdere aimportanei memoriei folosite de algoritm.

    Vom nota cu T (p) timpul de execuie necesar algoritmului pentru rezolvarea instanei p, pP. Acest

    timp reprezint numrul pailor efectuai de algoritm pentru rezolvarea instaneip. Un pas al unui algoritm , este ooperaie elementar (instruciune elementar). n general, operaiile elementare sunt: operaii de atribuire, operaiiaritmetice (+, , *, /), operaii logice (comparaii). Se presupune c execuia unei instruciuni elementare nu depindede mrimea operanzilor i de timpul de memorare a rezultatelor. Aceasta nseamn c resursa timp este studiatindependent de sistemul de calcul pe care se face implementarea algoritmului.

    n literatura de specialitate, exist trei tipuri de abordri ale complexitii unui algoritm : analizaempiric, analiza cazului mediu i analiza cazului cel mai defavorabil.

    Obiectivul analizei empirice const n studierea comportrii n practic a unui algoritm. Se scrie unpro gram pentru algor itm ul respectiv i se testeaz performanele programului pe difer ite clase de instane alepro blemei. Aceast analiz are cteva dezavantaje majore: (1) performanele unui pro gram depind de limbajul depro gramare, de calculatorul folosit i de priceperea programatorului care a scr is programul; (2) de obicei, aceastanaliz este mare consumatoare de timp i este scump; (3) compararea algoritmilor prin aceast analiz poate sconduc la rezultate eronate.

    Obiectivul analizei cazului mediu const n studierea comportrii n medie a unui algoritm, carepresupune rezolvarea urm toare lor dou etape: (a) precizarea unei dis tribuii de probabilita te pe mulimeainstanelor p, pP; (b) determinarea mediei variabilei aleatoare T

    (p), Tm(k) = M( { T

    (p) | pP, d(p) = k} ).Analiza cazului mediu are de asemenea, dezavantaje majore: (1) n general, este dificil s se determine o distribuiede probabilitate corect pe mulimea instanelor p, pP; (2) aceast analiz depinde de distribuia de probabilitatealeas; (3) n general, determinarea mediei Tm(k) se reduce la calculul unor sume finite care sunt evaluate cu mari

    dificulti. Totui aceast analiz este folosit n cazul cnd algoritmul are performane bune pentru majoritateainstanelor i pentru un numr mic de instane, care apar rar n practic, algoritmul funcioneaz prost sau foartepro st.

    Analiza cazului cel mai defavorabil elimin multe din dezavantajele precizate mai sus. Aceast analizconst n a determina T (k) = sup{ T(p) | pP, d(p) = k}. Rezult c analiza cazului cel mai defavorabil: (1)furnizeaz o margine superioar pentru numrul operaiilor elementare (instruciunilor elementare) necesarealgoritmului pentru rezolvarea oricrei instane p, pP ; (2) este independent de calculatorul pe care se faceimplementarea algoritmului; (3) face posibil compararea algoritmilor; (4) are i avantajul c T (k) se determin maiuor dect Tm(k). Totui, analiza cazului cel mai defavorabil nu este perfect. Un dezavantaj major este faptul cT(k) poate fi determinat de instane patologice care apar destul de rar n practic. Dar avantajele acestei analizedepesc dezavantajele i de aceea este cea mai folosit metod pentru a msura performanele unui algoritm.

    Deoarece determinarea exact a lui T(k) este uneori dificil, iar pe de alt parte, aceasta ar nsemnaconsiderarea unor detalii de implementare, se vor cuta margini superioare i inferioare pentru T(k), se va studiacomportarea sa asimptotic.

    n cele ce urmeaz se vor introduce notaiile , , i se vor defini algoritmii polinomiali i ceiexponeniali.

    Fie funcia f : N N. Se folosesc urmtoarele notaii :(f) = {g | g : N N, r1R

    *+, k0N : g(k) r1f(k), k k0} ;

    (f) = {gg : N N, r2R*

    +, k0N : g(k) r2f(k), k k0} ;(f) = {gg : N N, g(f) (f)}.

    Se obinuiete ca n loc de a scrie g (f) s se foloseasc notaia g = (f) (similar pentru si ).

    Definiia 2.14

    Se numete complexitatea timp(sau simplu complexitate) a algoritmului comportarea asimptotic a luiT(k).

    Definiia 2.15

    Se spune c o problem algoritmic P are complexitatea O(f(k))dac exist un algoritm care rezolvpro blema P i algoritm ul are complexitatea T(k) = O(f(k)).

  • 8/13/2019 Algoritmica E Ciurea

    24/84

    Eleonor CIUREA ALGORITMICA

    24

    Definiia 2.16Se spune c o problem algoritmic P are complexitatea (f(k)) dac orice algoritm care rezolv

    problema Pare complexitatea T(k) = (f(k)).

    Definiia 2.17Se spune c un algoritm pentru rezolvarea problemei Peste optimaldac problema Pare complexitatea

    (T(k)).Demonstrarea optimalitii unui algoritm pentru o problem Peste o activitate foarte complicat. Exist

    foarte puine rezultate de acest fel.Definiia 2.18

    Se numete algoritm polinomialun algoritm cu complexitatea O(f(k)), unde f(k) este un polinom n k.Un algoritm care nu este polinomial se nume te exponenial.

    Exemplul 2.14Presupunem c o operaie elementar necesit pentru execuie 10 -6secunde, adic O(1) = 10 -6secunde. n

    tabelul de mai jos sunt prezentate complexitile timp pentru cteva funcii, unde m nseamn minute, z nseamnzile, iarsnseamn secole.

    n n n5

    2n

    nn

    20 0.33x10-6m 5.33x10-2m 1.66x10 -2m 3x1010s

    40 0.66x10-6m 0.17x10m 1.27x10z . . .

    Exemplul 2.15S considerm graful G = (N, A) reprezentat prin matricea sa de adiacen M. Unele probleme de teorie a

    grafurilor necesit calcularea m atricei Mn-1, unde prin Minotm, n acest exemplu, puterea boolean de ordinul i amatriceiM. Deci problemaPconst n calculul matricei M n-1 .

    Dintr-un exemplu prezentat mai sus, rezult c dimensiunea problemei este n2.Dac avem de efectuat produsul boolean a dou matrice booleene (cu elemente 0,1) B i Cptratice,

    de dimensiune n, atunci pentru calculul matricei produs D = B C trebuie determinate toate elementele d ij =b i1 c11 .. .b in cnj , unde , reprezint nmulirea boolean, respectiv adunarea boolean. Convenim

    s considerm ca operaie elementar perechea ordonat ( , ). Rezult c, pentru calculul unui element dij sunt necesare n operaii elementare. Deci, pentru calculul a n2 elemente dij sunt necesare n3 operaiielementare. Fie

    n1 =

    k

    i

    i

    ia0

    ,2 ,0ka k,10,ia log(n1) 1

    n acest caz avem kk

    10 a2a2a1-n )(M)(MM=M . Acest produs boolean conine cel mult k

    nmuliri booleene, deoarece dac a i= 0, atunci Iii a2 )(M (matricea unitate) i nu se mai efectueaz nmulirea.

    Considerm cazul cel mai defavorabil cu a i= 1, i = 0, , k, k = log(n-1) 1. Algoritmul necesit atunci:1. Calculul matricelor booleene:

    M, M2 = MM, , 1-k1-kk 222 MM=M ce reprezint knmuliri booleene de matrice booleene;

    2. Calculul matricelor booleene:

    M3 = MM2, M 7 = M3M4, M 15 = M7 M8, ce reprezint knmuliri booleene de matrice booleene.

    Deci pentru a calcula Mn-1 trebuie s efectum n cazul cel mai defavorabil, 2k nmuliri booleene dematrice booleene. Cum pentru nmulirea boolean a dou matrice booleene sunt necesare n3operaii elementare,rezult c pentru calculul matricei Mn-1 sunt necesare 2n3k operaii elementare. Deoarece k = log(n-1) 1 idimensiunea problemei este n2, rezult c algoritmul pentru calculul matriceiMn-1are complexitatea O(n3/2log n).

    n continuare se vor prezenta anumite reguli de calcul pentru O, , . Mai nti s precizm c relaiile O,, pot fi considerate ca relaii ntre funcii: Oeste relaia este dominat asimptotic de, este relaia dominasimptotic pe, i este relaia are acelai ordin de mrime ca. Se constat uor c relaiile O i sunt relaii depre -ordine ( reflexiv i tranzitiv) i c relaia este o relaie de echivalen (reflexiv, simetric i tranzitiv).

    Regulile de calcul pentru O, , sunt urm toarele:

  • 8/13/2019 Algoritmica E Ciurea

    25/84

    Eleonor CIUREA ALGORITMICA

    25

    1. Reflexivitatea relaiilor O, , :

    a. f = O(f)b. f = (f)c. f = (f)

    2. Simetria relaiei :g = (f) implic f = (g)

    3. Tranzitivitatea relaiilor O, , :a. g = O(f) i f = O(h) implic g = O(h)b. g = (f) i f = (h) implic g = (h)c. g = (f) i f = (h) implic g = (h)

    4. Fie c R*+ :a. g = O(f) implic cg = O(f)b. g = (f) implic cg = (f)c. g = (f) implic cg = (f)

    5. Fie g1 g2 sau g1 g2:a. g1 = O(f1) i g2 = O(f2) implic g1+g2 = O(max(f1,f2))b. g1 = (f1) i g2 = (f2) implic g1+g2 = (min(f1,f2))

    c. g1 = (f1) i g2 = (f2) implic g1+g2 = (max(f1,f2))6. Fie g1 g2:

    a. g1 = O(f1) i g2= O(f2) implic g1g2= O(f1)b. g1 = (f1) i g2= (f2) implic g1g2= (f2)c. g1= (f1) i g2= (f2) i f1= (f2), f2= O(f1) implic g1g2= (f1)

    7. Fie g1 g2sau g1 g2:

    a. g1= O(f1) i g2= O(f2) implic g1g2= O(f1f2)b. g1= (f1) i g2= (f2) implic g1g2= (f1f2)c. g1= (f1) i g2= (f2) implic g1g2= (f1f2)

    Aceste reguli sunt consecine evidente ale definiiilor.

    Deseori, se pot compara funciile f i g, calculnd

    Se obin urmtoarele proprieti:

    Aceste proprieti rezult din definiia limitei: de exem plu, pentru proprietatea de la punctul 1) avem: >0, n0N astfe l nct n 0 avem c

    nf

    ng

    )()( sau > 0, n0N astfel nct n n0avem:

    (c) f(n) < g(n) < (c+) f(n)

    Reciprocele proprietilor 1), 2), 3), sunt false. n cazul cnd nu exist limit, trebuie revenit la definiiile luiO, , , pentru a putea compara gi f. De exemplu, dac f(n) = 2n, g(n) = n, pentru n = 2k+1 i g(n) = 2n, pentru n =

    2k, atunci limita de mai sus nu exist, dar g (f), deoarece pentru orice navem21 f(n) g(n) f(n).

  • 8/13/2019 Algoritmica E Ciurea

    26/84

    Eleonor CIUREA ALGORITMICA

    26

    3. DATE ELEMENTARE I STRUCTURI DE DATE

    3.1. Date elementare. Clasificarea datelor structurate

    Specialiti n informatic fac deosebirea ntre o dat i o informaie. Informaiaca noiune presupune cevanou care aduce o cunotin. Cantitatea de informaie poate fi determinat pe baza lungimii unui text scris. Datele

    sunt elemente constitutive ale informaiei, sunt cuvintele textului care reprezint informaia. Datele sunt formate dinlitere, cifre sau semne i n momentul n care se reprezint se admite implicit c exist un suport material al lor.Din punct de vedere al programatorului, ceea ce face obiectul prelucrrii sunt de fapt irul de bii care

    reprezint date sau informaii, funcie de contextul n care sunt generate i de modul n care se interpreteazrezultatele. De aceea, n continuare, nu se va face deosebirea dintre informaie i dat. U tilizatorii vor fi aceea carevor decide dac ofer spre prelucrare informaii sau date i dac rezultatele prelucrrii sunt date sau informaii.

    n orice limbaj de programare fiecare dat are asociat un tip de dat. Noiunea tip de dat stabileteurmtoarele:

    - mulimea valorilor pe care le poate lua o dat;- mulimea operaiilor care se pot efectua asupra datei;- cantitatea de memorie care trebuie alocat datei;- modul de reprezentare a valorilor datei.

    Exist numeroase criterii de a clasifica datele.De exemplu,criteriul compuneriiclasific datele n: date simple sau elementare; date compuse sau structurate.

    Datele elementare au o anumit semnificaie i sunt independente ntr-un context specificat. n general,drept date elementare sunt considerate urmtoarele:

    date numerice care au ca domenii de valori mulimi finite de numere ntregi i numere reale; date logice, care pot lua numai dou valori: adevrat i fals; date caracter care au ca domenii de valori literele alfabetului englez, cifrele sistemului de numeraie

    zecimal i caracterele speciale.

    Definiia 3.1 Prin structur de datese nelege o mulime ordonat de date.

    De obicei, se consider dou categorii de structuri de date: structuri de date interne create n memoria intern a calculatorului (de exemplu tablourile, listele, etc.); structuri de date externe create pe memoriile externe (de exemplu fiierele).Se vor prezenta numai structuri de date interne.O caracteristic important a structurilor de date este posibilitatea de a le individualiza ca entiti de sine

    stttoare printr-un nume.Dac toate elementele unei structuri de date sunt de acelai tip, se obine o structur de date omogen(de

    exemplu tabloul), n caz contrar se obine o structur se date eterogen(de exemplu lista).Cele mai rspndite structuri de date ntlnite n limbajele curente sunt: irul, tabloul, structuri liniare,

    structuri arborescente.

    3.2. irul i tabloulDefiniia 3.2

    Un ireste o mulime ordonat de elemente, care aparin unei clase de simboluri elementare.Lungimea unui ir este egal cu numrul de elemente care compun irul. Tipul unui ir este tipul caracter.

    Pot exista iruri de bii, iruri de cifre, iruri de litere, iruri de cifre i litere, iruri de caractere. Cele mai importanteoperaii definite pe iruri sunt operaia de concatenare i operaia de comparare.

    Definiia 3.3 Un tabloueste o m ulime ordonat de elemente de acelai tip.Ordonarea elementelor ntr-un tablou este folosit pentru a identifica elementele n cadrul tabloului, n care

    scop se utilizeaz un ansamblu de indici. Numrul de indici folosii pentru a identifica elementele unui tablouconstituie numrul de dimensiunial tabloului. Astfel, exist tablouri cu o dimensiune (vectori), tablouri cu doudimensiuni (matrice) etc.

    Fiecrui element al unui tablou i se va aloca o zon de memorie numit locaie, lungimea acestei locaiifiind funcie de tipul tabloului. Elementele unui vector vor ocupa n ordine locaii succesive de memorie. Pentrureprezentarea unei matrice se pot folosi dou metode:

  • 8/13/2019 Algoritmica E Ciurea

    27/84

    Eleonor CIUREA ALGORITMICA

    27

    memorarea succesiv pe linii a elementelor; memorarea succesiv pe coloane a elementelor.

    Fie N1,...,Npmulimi total ordonate cu | N i | = ni, i = 1,,p. Pentru simplificare, vom nota n acelai mod(

  • 8/13/2019 Algoritmica E Ciurea

    28/84

    Eleonor CIUREA ALGORITMICA

    28

    Listele au fost introduse din necesitatea realizrii unor structuri de date dinamice, adic structura lor sepoate modifica n cursul procesului de calcul.

    Definiia 3.5 Se numete list liniaro list L = (l1, l2, ..., ln) care satisface proprietile:1. exist o relaie de ordine ntre elementele listei L, astfel nct orice element li are predecesor pe li-1,

    i = 2, ..., n i succesor pe li1, i = 1, ..., n-1;2. elementul l1nu are predecesor i este numit element iniial al listei ;3. elementul lnnu are succesor i este numit element terminal al listei.Pentru a indica predecesorul sau succesorul unui element al listei liniare se folosete un indicator numit

    pointer(care reprezint o adres).

    Definiia 3.6Se numete list liniar simpl o list liniar L = (l1, l2, ..., ln) n care fiecare element lieste dublet ordonat

    de forma (d i, pi) , unde dieste o dat elementar sau o structur de date, iar p ieste un pointer care indic succesorulelementului lidin list.

    Observaia 3.11. n cazul elementului terminal lnal listei L = (l1, l2, ... , ln), pointerulpn are o valoare special.2. Parcurgerea unei liste liniare simple L = (l1, l2, ..., ln) se poate face ntr-un singur sens de la elementul

    iniial l1ctre elementul terminal ln. De aceea o astfel de list se mai numete list liniar asimetric.

    3. Pentru reprezentarea grafic a unei liste liniare simple L = ((d1, p 1), ..., (dn, p n)) se poate folosi un digraf(graf orientat) G = (N, A), N = d1, d 2, ..., dn, A = p1, p 2, ..., pn, p i = (d i, d i1).

    Exemplul 3.2Lista L = ((d1, p 1), (d2, p 2), (d3, p 3), (d4, p 4), (d5, p 5)) este reprezentat grafic prin digraful din figura 3.1

    Figura 3.1

    Definiia 3.7Se numete list liniar dublu nlnuit o list L = (l1, l2, ..., ln) n care fiecare element lieste un triplet

    ordonat de forma (d i, pi, pi) unde di este o dat elementar sau o structur de date, pi este un pointer sprepredecesor i pieste un pointer spre succesor.

    Observaia 3.21. n cazul elementului iniial l1 i al elementului terminal lnale listei liniare dublu nlnuite L = (l1, l2,

    ..., ln) pointerulp1i respectiv pointerulpnau valori speciale;2. Parcurgerea unei liste liniare dublu nlnuit se po ate face n ambele sensuri. De aceea o astfel de list

    se mai numete list liniar simetric .3. Pentru reprezentarea grafic a unei liste liniare dublu nlnuit L = ((d 1, p1, p1), ..., (dn, pn, pn))

    se poate folosi un digraf (graf orientat) G = (N, A), N = d1, ..., dn, A = {p1, p1, ..., pn, pn}, p i=(d i, d i-1 ), p i = (d i, d i1).

    Exemplul 3.3Lista L = ((d1, p 1, p 1), ..., (d5, p5, p 5)) este reprezentat grafic prin digraful din figura 3.2.

    Figura 3.2

    Definiia 3.8 Se numete list liniar circular o list liniar L = (l1, l2, ..., ln) n care elementul iniial l1este succesorul

    elementului terminal ln.

    Observaia 3.3O list liniar circular poate fi simpl sau dublu nlnuit dup cum elementele listei sunt dublete sau triplete,

    adic conin un pointer sau doi pointeri.Memorarea listelor liniare se poate face n mai multe m oduri, n continuare prezentndu-se dou dintre ele: alocarea secvenial; alocarea nlnuit.

    Alocarea secvenial const n a memora elementele listei n locaii succesive de memorie, conformordinii acestor elemente n list; n acelai timp se memoreaz adresa de baz (adresa primului element al listei).Pointerii nu se reprezint, iar ordinea logic a elementelor n list este identic cu ordinea fizic pe suport. n acest

  • 8/13/2019 Algoritmica E Ciurea

    29/84

    Eleonor CIUREA ALGORITMICA

    29

    caz, n general, elementele listei sunt memorate ntr-un vector, adresa de baz fiind adresa primului element alvectorului.

    Alocarea nlnuitconst n a memora fiecare element al listei ntr-o locaie de memorie. Fiecare locaieare dou sau trei cmpuri, un cmp pentru dat i unul sau dou cmpuri pentru pointeri dup cum lista este simplusau dublu nlnuit. Trebuie memorat i adresa de baz. Deci, n acest caz pointerii se reprezint efectiv, ei fiindadresele locaiilor unde se afl predecesorii sau succesorii elementelor. Astfel se asigur o independen a ordiniilogice a elementelor n list n raport cu ordinea fizic pe suport i, de aceea elementele listei se pot memora n

    diverse zone de memorie.Alocarea nlnuit cere mai mult memorie dect alocarea secvenial, dar are avantajul c eliminnecesitatea deplasrii de elemente pentru operaiile de introducere i de extragere din list.

    Asupra unei liste de date se pot efectua o mulime de operaii care se refer la datele elementelor sau lastructur. Aceste operaii sunt:

    1 - creare(L)care const n memorarea listeiLn forma iniial;2 - card(L)care const n determinarea numruluielementelor listeiL;3 - sortare(L)care const n ordonarea elementelorlisteiLdup un criteriu;4 - suprimare(L)care const n tergerea listeiLde pe suport;5 - introducere(L, l)care const n adugareala listaLa elementului l;6 - consultare(L, l)care const n accesuln listaLla elementul l;7 - extragere(L, l)care const n tergerea din listaLa elementului l;8 - actualizare(L, l)care const n actualizarean listaLa valorii elementului l;

    9 - inserare(L, l)care const n adugareala listaLa elementului lntr-un anumit loc din list;10 - descompunere(L; L1, . .., Lm)care const n descompunerea listeiLn listeleL1, . .., Lm;11 - concatenare(L1, . .., Lm; L)care const n obinerea listei L dinconcatenarealistelorL1, ...,Lm;12 - salvare(L1, L2) care const n copierealisteiL1n listaL2, n general, pe un alt suport.

    n cazul n care se impun anumite restricii asupra operaiilor de introducere i extragere a elementelor uneiliste liniare, se obin cteva tipuri particulare de liste folosite frecvent n practic.

    Definiia 3.9 Se numete stivo list liniar cu proprietatea c operaiile de introducere i tergere din list se fac la un singur

    capt al listei numit vrful stivei.

    Observaia 3.4 O stiv mai poart numele de stack, pil, list LIFO (Last-In, First-Out) sau list push-down.

    Definiie 3.10Se numete coado list liniar cu proprietatea c operaia de introducere se efectueaz la un capt al listeinumit baza coziii operaia de extragere se efectueaz la cellalt capt al listei numit vrful cozii.

    Observaia 3.5 O coad mai poart i numele de queue, ir de ateptaresau list FIFO(First-In, First-Out).n reprezentarea secvenial, elementele stivei vor fi memorate ntr-un vector s cu n componente, n fiind

    capacitatea maxim a stivei. O stiv fr nici un element se numete stiv vid. O stiv cu nelemente se numete stivplin.

    Fie k numrul efectiv de elemente din stiv; ca urmare elementul sk apare n vrful stivei. Operaia deintroducere n stiv se realizeaz aa cum se arat n procedura SIN:

    PROCEDURE SIN(s, n, k, x);ARRAY s(n);IF k n THEN

    WRITE STIV PLIN;STOP;

    ENDIFk := k + 1;s(k) := x;RETURN

    END.

    Operaia de extragere din stiv se realizeaz aa cum se arat n procedura SOUT :

    PROCEDURE SOUT(s,n,k,x);ARRAY s(n);IF k 0 THEN

    WRITE STIV VID;STOP;

    ENDIFx := s(k);k := k 1;RETURN

    END.

  • 8/13/2019 Algoritmica E Ciurea

    30/84

    Eleonor CIUREA ALGORITMICA

    30

    n reprezentarea nlnuit, adresa de baz va fi adresa vrfului stivei, legturile mergnd de la ultimul spreprimul element al stivei .

    n alocarea secvenial vom folosi pentru o coad un vector c cu n componente n care, dac elementelecozii sunt memorate n ci+1, ci+2 , ..., ck (unde ci+1 este vrful cozii, iar ck este baza cozii), atunci p = i i u = k.Introducerea variabilelorpi ueste necesar pentru a putea testa dac o coad este vid, caz n care p = u. Scoaterea,respectiv introducerea unui element n coad conduce la mrirea lui p, respectiv u cu o unitate. Dar operaiile deintroducere i extragere din coad produc o deplasare spre dreapta a elementelor. Astfel se p oate ajunge la situaia p

    = u = n, cnd coada esta vid, dar nu putem introduce nici un element n coad. Pentru a elimina acest neajuns se vaconsidera c lista coad este o list circular, adic dup c nurmeaz c1. n acest caz relaia p = u este valabil attpen tru o coad vid ct i pen tru una p lin. Pentru a deosebi cele cou cazuri se poate folosi una din metodele:

    - introducerea unei variabile bcare s ia valoarea 0 n cazul unei cozi vide i 1 n rest;- utilizarea a n1 componente ale vectorului c; n aceast situaie coada vid este identificat prin p = u, iar

    coada plin prin u + 1 = p (mod n).

    Convenim c la iniializarea cozii punem p := n, u := n.Operaia de introducere n coad se realizeaz aa cum se arat n procedura CIN:

    PROCEDURE CIN(c, n, p, u, x);ARRAY c(n);u := u + 1;IF u > n THEN

    u := 1;ENDIFIF p = u THEN

    WRITE COAD PLIN;STOP;

    ENDIFc(u) := x;RETURN

    END.

    Operaia de extragere din coad se realizeaz aa cum se arat n procedura COUT:

    PROCEDURE COUT(c, n, p, u, x);ARRAY c(n);IF p = u THEN

    WRITE COAD VID;STOP;

    ENDIF;

    IF p = n THENp := 0;ENDIFp := p + 1;x := c(p);RETURN

    END.

    Reprezentarea nlnuit a cozilor se realizeaz analog ca pentru stive, cu deosebirea c se m emoreaz douadresepi upentru vrful, respectiv baza cozii.

    3.4. Structuri arborescente

    Definiia 3.11

    O structur de date arborescent este o structur de date organizat ca un arbore rdcin sau ca unarbore binar.

    n prima parte a acestui paragraf se prezint structura arborescent rdcin i n a doua parte se prezintstructura arborescent binar.

    Una din operaiile frecvente asupra unei structuri arborescente rdcin const n a vizita , ntr-o anumitordine, fiecare nod al structurii arborescente rdcin pentru efectuarea unor prelucrri a informaiei ataate nodului.Aceast operaie se numete parcurgerea sau traversarea structurii arborescente rdcin, care se reduce laparcurgerea arborelui rdcin al structurii.

    Exist mai multe posibiliti de parcurgere a arborelui rdcin: parcurgerea n adncime, parcurgerea nlime i parcurgerea arborelui binar echivalent.

    Parcurgerea n adncime se poate realiza n dou moduri: parcurgerea n adncime la stnga iparcurgerea n adncime la d reapta .

    Deoarece nu exist deosebiri eseniale ntre cele dou moduri de parcurgere n adncime se va prezentanumai parcurgerea n adncime la stnga. Acest mod de parcurgere const n a ocoli mprejurul arboreluirdcin mergnd ntotdeauna cel mai la stnga posibil. Dac nkeste numrul succesorilor nodului k, atunci acestnod este vizitat de nk+1 ori n parcurgerea n adncime la stnga. La fiecare din aceste vizitri poate s-i corespund

  • 8/13/2019 Algoritmica E Ciurea

    31/84

    Eleonor CIUREA ALGORITMICA

    31

    o anumit prelucrare a informaiei asociat nodului k. Se noteaz cu piprelucrarea inform aiei cnd nodul k estevizitat a i-a oar, i = 1, ... , n k+1.

    Exemplul 3.4n figura 3.3 se prezint parcurgerea n adncime la stnga a unui arbore rdcin n care s-a specificat

    nodul k.

    Figura 3.3

    Parcurgerea n adncime la stnga a arborilor rdcin conine cazuri particulare care corespund laurmtoarea ordine:1. ordinea rprefixat sau rpreordine care se obine cnd numai prelucrareap1este efectuat;2. ordinea rpostfixat sau rpostordine care se obine cnd numai prelucrarea 1knp este efectuat.

    Fie G = (r, G1 , ..., G s ) un subarbore al arborelui rdcin G = (r, G1, ..., G t). Reamintim c nconformitate cu definiia recursiv, subarborele G poate fi chiar G. Cele dou cazuri particulare de parcurgerea arborilor rdcin corespund, referitor la subarborele G , respectiv la urmtoarea ordine:

    1. rpreordinea corespunde la ordinea r, G 1 , ..., Gs ;

    2. rpreordinea corespunde la ordinea G 1 , ..., Gs , r.

    Exemplul 3.5Fie arborele rdcin din figura 3.4. Parcurgerea n rpreordine furnizeaz nodurile n ordinea: 1, 2,

    3, 4, 5, 6, 7 , 8, 9, 10. Parcurgerea n rpostordine furnizeaz nodurile n ordinea: 3, 4 , 2, 5, 7, 8, 10, 9 , 6, 1.

    Figura 3.4

    Parcurgerea n limea arborilor, nu o prezentm deoarece, n general, nu este utilizat n practic.Parcurgerea arborilor rdcin prin parcurgerea arborelui binar echivalent const n a asocia

    arborelui rdcin, arborele binar corespunztor i al parcurge pe acesta prin una din metodele care vor fi prezentaten acest paragraf.

    Arborele binar asociat arborelui rdcin se obine n modul urmtor: pentru fiecare nod intern x cusuccesorii s1, ..., skse fac urmtoarele dou transformri:

    (t1) se construiete un arc (fr sgeat) la stnga de laxla primul succesor s1;(t2) se construiete un arc (fr sgeat) la dreapta de la s1la s2, n continuare de la s2la s3, ..., de la sk1la

    sk.Transformrile t1i t2sunt prezentate n figura 3.5.

    kp1

    p2p3 p4

    p5

    1

    5

    7

    10

    2 6

    43 8 9

  • 8/13/2019 Algoritmica E Ciurea

    32/84

    Eleonor CIUREA ALGORITMICA

    32

    Figura 3.5

    Exemplul 3.6Arborele binar asociat arborelui rdcin din figura 3.4 este prezentat n figura 3.6.

    Figura 3.6.

    Dintre reprezentrile n calculator a unei structuri arborescente organizat ca un arbore rdcin se prezinturmtoarele: reprezentarea standard, reprezentarea cu referina predecesorului i reprezentarea prin structuraarborescent binar echivalent.

    Reprezentarea standard poate fi realizat n dou moduri: alocnd memorie sub form contigu saualocnd memorie sub form dinamic.

    Reprezentarea standard alocnd memorie sub form contigu este utilizat n cazul n care nu existposibilitatea de alocare dinamic a memoriei i este rea lizat prin utilizarea tablourilor. Fie nnumrul de noduri alestructurii arborescente. Se utilizeaz matricea

    S = (si j), i = 1,2,3; j = 1,...,n;

    unde: s1j reprezint informaia ataat nodului j;s2j reprezint primul succesor al nodului j; dac nodul jnu are succesori atunci s2j = 0;s3jreprezint urmtorul frate al noduluij; dac noduljeste ultimul frate atunci s3j = 0.

    Exemplul 3.7Fie structura arborescent reprezentat n figura 3.4.Matricea Sasociat acestei structuri este urmtoarea:

    00980604500100070003210987654321 iiiiiiiiii

    S

    Reprezentarea standard alocnd memorie sub form dinamic este realizat prin utilizarea pointerilor.Fie nsnumrul de succesori ai nodului cu cei mai muli succesori. Fiecrui nod k i se aloc o locaie format dinns+1 cmpuri de memorie. Unul ataat informaiei nodului i restul pentru pointerii ctre succesori.

    x

    s2s1 sk-1 sk. . .

    x

    s1

    s2

    sk-1

    sk

    1

    4

    3

    2

    5

    6

    7

    8

    9

    10

  • 8/13/2019 Algoritmica E Ciurea

    33/84

    Eleonor CIUREA ALGORITMICA

    33

    Exemplul 3.8Reprezentarea standard alocnd memorie sub form dinamic a structurii arborescente din figura 3.4 este

    prezen tat n figura 3.7 . Dac pentru un cmp nu exist succesor se trece *.

    Figura 3.7

    Reprezentarea cu referina predecesoruluieste realizat prin utilizarea tablourilor. Fie nnumrul de noduri ale

    structurii arborescente. Se utilizeaz matricea:P = (pi j), i = 1, 2; j=1,...,n;

    unde: p1j reprezintinformaia ataat nodului j;p2j reprezint predecesorul noduluij.

    Exemplul 3.9Pentru structura arborescent reprezentat n figura 3.3 matricea Peste urmtoarea:

    966611221010987654321 iiiiiiiiii

    p

    Reprezentarea prin structura arborescent binar echivalent este realizat prin asocierea structuriiarborescente rdcin, a structurii arborescente binar echivalent i aceasta poate fi reprezentat cu una dinmetodele care vor fi prezentate n acest paragraf.

    n continuare, se prezint parcurgerea i reprezentarea structurilor arborescente binare.Asemntor cu cazul unei structuri arborescente rdcin, parcurgerea unei structuri arborescente binare se

    reduce la parcurgerea arborelui binar asociat structurii.Parcurgerea arborilor binari poate fi fcut n adncime sa u n lime. Parcurgerea n adncimese poate

    realiza n urmtoarele dou moduri: la stnga sau la dreapta. La fel ca n cazul arborilor rdcin se va prezentanumai parcurgerea n adncime la stnga. Pentru a ilustra aceast parcurgere transformm arborele binar intr-unarbore binar complet prin adugarea de noduri i arce fictive n modul urmtor:

    - pentru fiecare nod intern care are un singur succesor se adaug al doilea succeso r i arcul respectiv;- pentru fiecare nod terminal se adaug cei doi succeso ri i arcele respective.

    Rezult c fiecare nod efectiv k al arborelui binar are numrul succesorilor n k = 2. Conformprec izr ilor fcu te la pa rc urgere a n adn cime la stn ga a ar bori lo r rdcin , rezu lt c fiec are no d efec tiv k,este vizitat de nk+1 = 2+1 = 3 ori i corespund prelucrrile p 1, p2, p3.

    Teorema 3.1Complexitatea metodei de parcurgere n adncime la stnga a unui arbore binar cu nnoduri este (n).

    Dem onstraie Fie T(n) timpul necesar pentru parcurgerea n adncime la stnga a unui arbore binar cu n noduri. Se

    presupune c exist o constan t rea l strict pozit iv c1astfel nct

    T(n) c1pentru n = 0, 1 (3.1)

    Vom arta prin inducie dup nc

    T(n) c2n + c1pentru n = 2, 3, (3.2)

    unde c2este o constant real strict pozitiv.Pentru n = 0 afirmaia este adevrat conform relaiei (3.1). Presupunem afirmaia adevrat pentru toi

    arborii binari cu cel mult n1 noduri i anume :T(n-1) c2(n1) + c1 (3.3)

    i

    * * *i3 * * * i

    * * * i

    * * * i

    * *

    i10 * * *

    i

    i

    * * *

    i

    i

    *

  • 8/13/2019 Algoritmica E Ciurea

    34/84

    Eleonor CIUREA ALGORITMICA

    34

    Fie G = (r, G1, G2), un arbore binar cu nnoduri. Presupunem c subarborii binari G1 i G2 au n1 irespectiv n2noduri. Deoarece nodul rdcin reste un arbore binar cu un nod, G1i G2sunt arbori binari cu n1n-1, n2 n-1 i 1+n1+n2 = n. Conform relaiilor (3.1) i (3.3) se obine:

    T(n) c1 + c2n1 + c1 + c2n2 + c1= c1 + c 2n1 + c 1 + c2(nn11) + c1= c2n + c1 (c2 2c1)

    Considerndc

    2astfel nct c2 2c1 0 se obine:T(n) c2n + c1

    Rezult c T(n) O(n). D eoarece fiecare nod este vizitat rezult c T(n) (n). Deci T(n)(n).

    Parcurgerea n adncime la stnga a arborilor binari conine cazuri particulare cu urmtoarele ordine:1) Ordinea prefixat sau preordine, care se obine cnd numai prelucrareap1este aplicat .2) Ordinea infixat sau inordine, care se obine cnd num ai prelucrareap2este aplicat .3) Ordinea postfixat sau postordine, care se obine cnd num ai prelucrareap3este aplicat.

    Fie G = (r, G1 , G2 ) un subarbore al arborelui binar G= (r, G1, G2). Cele trei cazuri particulare deparcurgere a arborilor b inari corespund, referi tor la subarborele G , urmtoarelor ordine:

    1) preord inea corespunde la ord inea r, G 1 , G 2 ;2) inordinea corespunde la ordinea G1 , r, G 2 ;

    3) postordinea corespunde la o rdinea G1

    , G 2

    , r

    .Exemplul 3.10

    Fie arborele binar din figura 3.8.

    Figura 3.8

    Parcurgerea n preordine furnizeaz nodurile n ordinea:

    1, 2, 4, 8, 9, 5, 10, 11, 3, 6, 12, 7.

    Parcurgerea n inordine furnizeaz nodurile n ordinea:

    8, 4, 9, 2, 10, 5, 11, 1, 12, 6, 3, 7.

    Parcurgerea n postordine furnizeaz nodurile n ordinea:

    8, 9, 4, 10, 11, 5, 2, 12, 6, 7, 3, 1.

    Parcurgerea n lime a arborilor binaricorespunde ordinei ierarhice perfecte asociat arborelui.Exemplul 3.11

    Parcurgerea n lime a arborelui binar din figura 3.8 furnizeaz nodurile n ordinea:

    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.

    Legtura dintre parcurgerile unui arbore rdcin este dat de urmtoarea teorem.

    Teorema 3.2Parcurgerea n r preordine a unui arbore rdcin este echivalent cu parcurgerea n preordine a

    arborelui binar echivalent. Parcurgerea n r postordine a unui arbore rdcin este echivalent cuparcur ge re a n inor dine a arbo re lu i bin ar ec hi va le nt .

    Exemplul 3.12

    Parcurgerea n r p reordine a arborelui rdcin din figura 3.4 i parcurgerea n preordine a arborelui binarechivalent din figura 3.6 furnizeaz nodurile n ordinea :

    1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

    1

    9

    6

    12

    2 3

    8

    74 5

    1011

  • 8/13/2019 Algoritmica E Ciurea

    35/84

    Eleonor CIUREA ALGORITMICA

    35

    Parcurgerea n r postordine i inordine a arborilor precizai mai sus furnizeaz nodurile n ordinea :

    3, 4, 2, 5, 7, 8, 10, 9, 6, 1.

    Asemntor cu cazul unei structuri arborescente rdcin, reprezentarea unei structuri arborescente binarepoate fi realizat prin mai multe modaliti. n acest paragraf prezentm urmtoarele dou modaliti: rep rezentareastandard i reprezentarea secvenial.

    Reprezentarea standard poate fi realizat n dou moduri: alocnd memorie sub form contigu i alocnd

    memorie sub form dinamic.Reprezentarea standard alocnd memorie sub form contiguconst n definirea matricei S = (sij), i =1, 2, 3; j = 1,...,n,unde: s1j reprezint informaia ataat nodului j;

    s2jreprezint succesorul stng al nodului j; dac nodul j nu are succesor stng atunci s2j=0;s3jreprezint succesorul drept al nodului j; dac nodul j nu are succesor drept atunci s 3j=0.

    Exemplul 3.13Fie structura arborescent binar reprezentat n figura 3.8.Matricea S este urmtoarea:

    000000011975300000012108642121110987654321 iiiiiiiiiiii

    S

    Reprezentarea standard alocnd memorie sub form dinamic este realizat la fel ca n cazul uneistructuri arborescente rdcin.

    Reprezentarea secvenial poate fi realizat n urmtoarele dou moduri: parcurgnd structura arborescentbinar n l ime i parcurgnd structura arborescent b inar n adnc ime.

    Pentru reprezentarea secvenial parcurgnd structura arborescent binar n limese consider carborele binar asociat este perfect i numerotat n ordine ierarhic perfect. Aceast numerotare permite s folosimnumai un tablou L unidimensional cu nelemente. Fiecare element reprezint informaia ataat nodului respectiv.Restul informaiilor referitoare la un nod kse obin n modu l urmtor:

    - predecesorul lui keste numerotat k/2dac k 2 i 0 dac k = 1;- succesorul stng al lui keste numerotat 2kdac 2k n i 0 dac 2k > n;

    - succesorul drept al lui keste numerotat 2k+1 dac 2k+1 n i 0 dac 2k+1 > n.n acest caz, un nod numerotat cu 0 nseamn c nodul nu exist.

    Exemplul 3.14Reprezentarea secvenial parcurgnd structura arborescent binar n lime pentru structura din figura 3.8

    este urmtoarea:

    L = (i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12)

    Pentru k=5 avem:- predecesorul nodului 5 este nodul 5/2= 2;- succesorul stng al nodului 5 este nodul 2*5=10;- succesorul drept al nodului 5 este nodul 2*5+1=11.

    Dac arborele binar al structurii nu este perfect, atunci el se completeaz la un arbore binar perfect. Rezultc reprezentarea secvenial parcurgnd structura arborescent binar n lime este adecvat pentru structuri alecror arbori binari sunt perfeci sau apropiai de acetia.

    Pentru reprezentarea secvenial parcurgnd structura arborescent binar n adncime se considerparcurgea n inordine. n acest caz repreze ntarea necesit un tablou Aunidimensional cu nelemente. Fiecare elementreprezint informaia ataat nodului respectiv.

    Exemplul 3.15Reprezentarea secvenial parcurgnd structura arborescent binar n adncime n inordine a structurii din

    figura 3.8 este urmtoarea:

    A = (i8, i4, i9, i2, i10, i5, i11, i1, i12, i6, i3, i7)

  • 8/13/2019 Algoritmica E Ciurea

    36/84

    Eleonor CIUREA ALGORITMICA

    36

    4. METODE DE ELABORARE A ALGORITMILOR

    4.1. Metoda greedy

    4.1.1. Prezentarea metodei

    n general, metoda greedy (n traducere avid) se aplic problemelor n care, pentru o mulime d at M ={m1, , mn}, se cere determinarea unei submulimi }m...,,{mSp1 ii

    a sa care s ndeplineasc anumite condiii.

    O soluie a problemei se numete soluie posibil. Cum, n general, exist mai multe soluii posibile se ceres se determine una singur conform unui criteriu. Acest criteriu se numete criteriu de optimizare i soluiadeterminat se numete soluie optim.

    Metoda greedy construiete soluia optim pas cu pas prin determinarea la fiecare pas a unei soluii parialenumit soluie acceptabil. O soluie acceptabil are urmtoarea proprietate: dac S este o soluie acceptabil i

    S S atunci Seste o soluie acceptabil. Se presupune c mulimea vid este ntotdeauna soluie acceptabil.Dac metoda greedy rezolv problema, atunci ultima soluie acceptabil determinat este soluie posibil

    care este i optim.Pentru a rezolva problema sunt necesare urmtoarele:1. mulimea iniialM;

    2. o funcie c1 care exprim criteriul de selecie a unui element mjnc neselectat din mulimea Mpentrua fi adugat eventual la soluia acceptabil S;3. o funcie t1care testeaz dac elementul selectat mjeste acceptabil;4. o funcie t2 care testeaz dac noua soluie acceptabil S := S{mi j} este soluie posibil;5. o funcie c2care exprim criteriul de optimizare.

    Observaii1. Metoda greedy nu determin toate soluiile posibile i abia apoi s o aleag pe cea optim d intre acestea

    (ceea ce ar necesita timp de calcul i spaiu de memorie mari), ci ncearc s determine de la bunnceput o soluie posibil care s fie i o ptim.

    2. Funcia c1este de obicei obinut din funcia c2, uneori aceste dou funcii sunt chiar identice. De aceea,soluiile acceptabile sunt soluii optime locale. Dar, prin optimizri locale succesive, nu se obinetotdeauna n final soluia optim global. Uneori metoda nu furnizeaz nici mcar o soluie posibil.

    n funcie de modul de selectare al elementelor din mulimea Mse obin dou variante ale metodei greedype care le prezentm n continuare sub forma uno r proceduri .

    (1) PROCEDURA GREEDY1(M, n, S);(2) BEGIN(3) S := ;(4) FOR i := 1 TO n DO(5) ESELECT(M, i, mj);(6) EACCEPT(S, mj, v1);(7) IF v1 = 1 THEN(8) SACCEPT(S, mj);(9) SPOSIBIL(S, v2);(10) IF v2 = 1 THEN EXIT;

    (11) ENDIF;(12) ENDFOR;(13) END.

    Procedura ESELECT selecteaz, conform criteriului c1, elementul mj {m i, , mn} i efectueazinterschimbarea dintre m i i mj.

    Procedura EACCEPT determin, conform testului t1valoarea lui v1 :

    dac mjeste element acceptabil,

    n caz contrar.

    Procedura SACCEPT determin noua soluie acceptabil S := S {m j}.Procedura SPOSIBIL determin, conform restului t2, valoarea lui v2 :

    dac S este soluie posibil,n caz contrar.

    0,1,

    v1

    0,1,

    v2

  • 8/13/2019 Algoritmica E Ciurea

    37/84

    Eleonor CIUREA ALGORITMICA

    37

    A doua variant a m etodei greedy este urmtoarea:

    (1) PROCEDURA GREEDY2(M, n, S);(2) BEGIN(3) PERM(M);(4) S := ;(5) FOR i:=1 TO n DO(6) EACCEPT(S, mi, v1);

    (7) IF v1=1 THEN(8) SACCEPT(S, mi);(9) SPOSIBIL(S, v2);(10) IF v2=1 THEN EXIT;(11) ENDIF;(12) ENDIF;(13) ENDFOR;(14) END.

    Procedura PERM efectueaz conform unui criteriu o permutare a elementelor mulimii M.

    Observaii1. n procedura GREEDY1 ordinea n care trebuie selectate elementele se stabilete n mod dinamic la

    fiecare pas prin procedura ESELECT, iar n procedura GREEDY2 aceast ordine se stabilete de la

    nceput prin procedura PERM.2. Procedurile GREEDY1 i GREEDY2 sunt prezentate pentru cazul general. Ele pot fi adaptate pentru

    fiecare problem rezolvabil cu aceast metod.

    Teorema 4.1Metoda greedy are complexitatea O(n2).

    Dem onstraie Instruciunea FOR itereaz de cel mult nori. Complexitatea unei iteraii a instruciunii FOR este O(n). D eci

    complexitatea metodei este O(n2).

    4.1.2. Probleme rezolvate

    Problema G1Problema submulimii cu valoare maxim.Se d o mulime M = {x1, , xn} cu elemente reale. S se determine o submulime a sa, }x...,,{xS

    p1 ii

    astfel nct

    p

    k 1ik

    x s fi maxim.

    Rezolvare Dac xi 0 oricare ar fi x i M atunci S = {max{x1, , xn}}. Dac exist x i > 0, xi M, atunci rezolvm

    pro blema cu metoda greedy. n acest caz e lem entele p rob lemei sunt urmtoarele.1. mulimea M = {x1, , xn};2. o soluie acceptabil este o submulime

    }x...,,{xS p1 iicu proprietatea c

    0x ki , k = 1, , p;

    3. o soluie posibil este o soluie acceptabil Scare conine toate elementelexidinMcu x i 0;4. o soluie optim este soluia posibil; vom determina soluia optim cu toate elementele xi > 0;5. criteriul de selecie este evident x i > 0.

    Procedura este urmtoarea:

    (1) PROCEDURA SUBMAX(M,S,n);(2) BEGIN(3) ARRAY M(n),S(n);(4) j := 0;(5) FOR i := 1, i n(6) IF xi > 0 THEN(7) j := j + 1; sj := xi;

    (8) ENDIF;(9) ENDFOR;(10) END.

  • 8/13/2019 Algoritmica E Ciurea

    38/84

    Eleonor CIUREA ALGORITMICA

    38