Sunteți pe pagina 1din 114

CUPRINS

PREFA.................................................................................Pag. 2 LISTE SIMPLU NLNUITE.............................................Pag. 5 LISTE CIRCULARE SIMPLU NLNUITE....................Pag. 15 LISTE DUBLU NLNUITE..............................................Pag. 22 ARBORI...................................................................................Pag. 30 ARBORI BINARI DE CUTARE.......................................... Pag. 39 REPREZENTAREA I TRA ERSAREA !RAFURILOR........................................................................Pag. 5" AL!ORITMI PENTRU PRELUCRAREA !RAFURILOR........................................................................Pag. #3 TABELE DE DISPERSIE...................................................... Pag. #9 METODE !ENERALE DE ELABORARE A AL!ORITMILOR $I%.............................................................Pag. &5 METODE !ENERALE DE ELABORARE A AL!ORITMILOR $II%............................................................Pag. "& METODE !ENERALE DE ELABORARE A AL!ORITMILOR $III%..........................................................Pag. 95 AL!ORITMI FUNDAMENTALI DE SORTARE...............Pag. 10' BIBLIO!RAFIE......................................................................Pag. 115

PREFA

Lucrarea de laborator nr. 1.

LISTE SIMPLU NLNUITE


1. C()*+),-,. .,/010++ n lucrare sunt prezentate operaiile importante asupra listelor simplu nlnuite i particularitile stivelor i cozilor. 2. C()2+340a*++ -4(04-+/4 Lista este o mulime finit i ordonat de elemente de acelai tip. Elementele listei se numesc noduri. Listele pot fi organizate sub form static de tablou caz n care ordinea este implicit dat de tipul tablou unidimensional sau cel mai des sub form de liste dinamice n care ordinea nodurilor este stabilit prin pointeri. !odurile listelor dinamice sunt alocate n memoria "eap. Listele dinamice se numesc liste nlnuite put#nd fi simplu sau dublu nlnuite. n continuare se vor prezenta principalele operaii asupra listelor simplu nlnuite. $tructura unui nod este urmtoarea% -564347 2-0,/- -+68)(3 9 +)- /:4+4; <= />?6 )4(@.+ga-(0+, =< a.-4 />?6,0+ 34 3a-4 ,-+.4; 2-0,/- -+68)(3 ,0?; <= .4g1-,0a 2604 ,0?1-(0,. )(3 =< A TIP8NOD; &odelul listei simplu nlnuite este prezentat n fig. '.1.

)ig. '.1. &odel de list simplu nlnuit *ointerii 60+? i ,.-+? vor fi declarai astfel% TIP8NOD =60+?B =,.-+?; 2.1 C04a04a ,)4+ .+2-4 2+?6., C).1)*,+-4 +rearea unei liste simplu nlnuite se va face astfel% a, -niial lista este vid% 60+? D 0; ,.-+? D 0; b, $e genereaz nodul de introdus% )D2+E4(7$TIP8NOD%; 6D$TIP8NOD =%?a..(/$)%; <= 04E40Fa04 26a*+, 34 ?4?(0+4 C) :4a6=< /+-+04 3a-4 C) )(3,. 34 a30421 6; c, $e fac legturile corespunztoare% 6GH,0? D 0; <=)(3,. 42-4 ,.-+?,. C) .+2-1 =< +7$,.-+? ID 0% ,.-+?GH,0? D 6; <= .+2-a ), 42-4 F+31 =< 4.24 60+? D 6; <= )(3,. 6 42-4 60+?,. +)-0(3,2 C) .+2-1 =< ,.-+?D6;

2.2 A//42,. .a ,) )(3 a. ,)4+ .+2-4 2+?6., C).1)*,+-4 n funcie de cerine nodurile listei pot fi accesate secvenial e/trg#nd informaia util din ele. 0 problem mai deosebit este gsirea unui nod de o c"eie dat i apoi e/tragerea informaiei din nodul respectiv. +utarea nodului dup c"eie se face liniar el put#nd fi prezent sau nu n list. 0 funcie de cutare a unui nod de c"eie 12e34 va conine secvena de program de mai 5os6 ea returneaz adresa nodului respectiv n caz de gsire sau pointerul !7LL n caz contrar% TIP8NOD =6; 6D60+?; J:+.4$ 6 ID 0 % +7 $6GH/:4+4 DD K45% 9 <= 2Ga g12+- )(3,. 34 /:4+4 3a-1 =< <= 4. a04 a3042a 6 =< 04-,0) 6; A 4.24 6D6GH,0?; 04-,0) 0; <= ), 4L+2-1 )(3 34 /:4+4 D K45 =< 2.3 I)240a04a ,),+ )(3 C)-0G( .+2-1 2+?6., C).1)*,+-1 !odul de inserat va fi generat ca la paragraful '.16 se presupune c are pointerul p. 8ac lista este vid acest nod va fi singur n list% +7 $60+? DD 0% 9 60+?D6; ,.-+?D6; 6GH,0?D0; A 8ac lista nu este vid inserarea se poate face astfel% a, naintea primului nod +7$60+? ID 0% 9 6GH,0? D 60+?; 60+? D 6; A

b, dup ultimul nod% +7 $,.-+? ID 0% 9 6 GH ,0? D 0; ,.-+? GH ,0? D 6; ,.-+? D 6; A c, naintea unui nod precizat printr:o c"eie 12e34% : se caut nodul de c"eie 12e34% TIP8NOD =MB =M1; M1D0; MD60+?; J:+.4$MID0% 9 +7$MGH/:4+4DDK45% @04aK; M1DM; MDMGH,0?; A : se insereaz nodul de pointer p corespunztoare% fc#nd legturile

+7$MID0% 9 <=)(3,. 34 /:4+4 NK45O a04 a3042a M =< +7 $MDD60+?% 9 6GH,0?D60+?; 60+?D6; A 4.24 9 M1GH,0?D6; 6GH,0?DM; A A d, dup un nod precizat printr:o c"eie 12e34% : se caut nodul av#nd c"eia 12e34% TIP8NOD =M; MD60+?; J:+.4$MID0% 9 +7$MGH/:4+4DDK45% @04aK; MDMGH,0?; A

: se insereaz nodul de adres p corespunztoare%

fc#nd legturile

+7 $M ID%0% 9 <= )(3,. 34 /:4+4 NK45O a04 a3042a M =< 6 GH ,0? D M GH ,0?; M GH ,0?D6; +7 $M DD ,.-+?% ,.-+? D 6; A 2.' -40g404a ,),+ )(3 3+)-0G( .+2-1 2+?6., C).1)*,+-1 La tergerea unui nod se vor avea n vedere urmtoarele probleme% lista poate fi vid lista poate conine un singur nod sau lista poate conine mai multe noduri. 8e asemenea se poate cere tergerea primului nod a ultimului nod sau a unui nod dat printr:o c"eie 12e34. a, <tergerea primului nod TIP8NOD =6; +7$60+?ID0% 9 <= .+2-a ), 42-4 F+31 =< 6D60+?; 60+?D60+?GH,0?; 4.+@8)(3$6%; <=4.+@40a04a 26a*+,.,+ 34 ?4?(0+4 =< +7$60+?DD0% ,.-+?D0; <= .+2-a a 34F4)+- F+31 =< A

b, <tergerea ultimului nod TIP8NOD =MB =M1; M1D0; MD60+?; +7$MID0% 9 <= .+2-a ), 42-4 F+31 =< J:+.4$MID,.-+?% 9 M1DM; MDMGH,0?; A +7$MDD60+?% 9 60+?D0; ,.-+?D0; A 4.24 9 M1GH,0?D0; ,.-+?DM1; A 4.+@8)(3$M%; A c, <tergerea unui nod de c"eie 12e34 TIP8NOD =MB =M1; <= /1,-a04 )(3 =< M1D0; MD60+?; J:+.4 $MID0% 9 +7$MGH/:4+4 DD K45% @04aK; <= 2Ga g12+- )(3,. =< M1DM; MDMGH,0?; A +7$M ID 0% 9 <= 4L+2-1 ,) )(3 34 /:4+4 NK45O =< +7 $M DD 60+?% 9 60+?D60+?8H,0?; 4.+@8)(3$M%; <=4.+@40a04 26a*+, =< +7$ 60+?DD0% ,.-+?D0; A 4.24 9 M1GH,0?DMGH,0?; +7$MDD,.-+?% ,.-+?DM1; 4.+@8)(3$M%; <= 4.+@40a04 26a*+, =< A

1>

2.5 -40g404a ,)4+ .+2-4 2+?6., C).1)*,+-4 n acest caz se terge n mod secvenial fiecare nod% TIP8NOD =6; J:+.4$ 60+? ID 0% 9 6D60+?; 60+?D60+?GH,.-+?; 4.+@8)(3$6%; <=4.+@40a04 26a*+, 34 ?4?(0+4 =< A ,.-+?D0; 2.# S-+F4 $tiva este o list simplu nlnuit bazat pe algoritmul L-)0 ?Last -n )irst 0ut, adic ultimul nod introdus este primul scos. &odelul stivei care va fi avut n vedere n continuare este prezentat n fig.'...1.

)ig. '...1. &odel de stiv )iind o structur particular a unei liste simplu nlnuite operaiile principale asupra unei stive sunt% : 6,2: : pune un element pe stiv6 funcia se realizeaz conform paragrafului '.3.a. adic prin inserarea unui nod naintea primului6 : 6(6 : scoate elementul din v#rful stivei6 funcia se realizeaz conform paragrafului '.4.a. adic prin tergerea primului nod6 : /.4a0 : tergerea stivei6 funcia se realizeaz conform paragrafului '.(. n concluzie accesul la o stiv se face numai pe la un capt al su.

11

2.&. C(E+ +oada este o list simplu nlnuit bazat pe algoritmul )-)0 ?)irst -n )irst 0ut, adic primul element introdus este primul scos. &odelul cozii care va fi avut n vedere n consideraiile urmtoare este prezentat n fig.'.9.1.

S4 +)-0(3,/4 ,) 4.4?4))(,

)ig.'.9.1. &odel de coad 8eci coada are dou capete pe la unul se introduce un element iar de la celalalt capt se scoate un element. 0peraiile importante sunt% - introducerea unui element n coad : funcia se realizeaz prin inserarea dup ultimul nod conform celor prezentate la paragraful '.3.b.6 - scoaterea unui element din coad @ funcia se realizeaz prin tergerea primului nod conform celor prezentate la paragraful '.4.a.6 - tergerea cozii @ funcia se realizeaz conform paragrafului '.(. 3. M402,. .,/010++ 3.1.$ se defineasc i s se implementeze funciile pentru structura de date -564347 2-,/- 9 +)- .,)g+?4; 2-0,/- TIP8NOD =+)/46,-B =/,04)-B =27a0P+-; A LISTA; av#nd modelul din fig.3.1.

1'

)ig.3.1.&odelul listei pentru problema 3.1


3.'.$ se implementeze o list ca un tablou static ce conine pointeri la nodurile de informaie din "eap conform modelului din fig.3.'.

)ig.3.'. &odel de list pentru problema 3.'.


3.3. 8e la tastatur se citesc cuvinte. $ se creeze o list simplu nlnuit ordonat alfabetic care conine n noduri cuvintele distincte i frecvena lor de apariie. $e va afia coninutul listei n ordine alfabetic . 3.4. $e consider un depou de locomotive cu o singur intrare i cu o singur linie de cale ferat care poate cuprinde oric#te locomotive. $ se scrie programul care realizeaz dispecerizarea locomotivelor din depou. *rogramul prelucreaz comenzi de intrare n depou a unei locomotive de ieire din depou a unei locomotive i de afiare a locomotivelor din depou. 3.(. Aceeai problem 3.4 cu deosebirea c depoul are intrarea la un capt i ieirea la captul opus. 3... $ortarea topologic. Elementele unei mulimi & sunt notate cu litere mici din alfabet. $e citesc perec"i de elemente / 3 ?/ 3 aparin mulimii &, cu semnificaia
13

c elementul / precede elementul 3. $ se afieze elementele mulimii & ntr:o anumit ordine nc#t pentru orice elemente / 3 cu proprietatea c / precede pe 3 elementul / s fie afiat naintea lui 3. 3.9.$ se scrie programul care creeaz dou liste ordonate cresctor dup o c"eie numerica i apoi le interclaseaz. 3.;.$ se conceap o stuctur dinamic eficient pentru reprezentarea matricelor rare. $ se scrie operaii de calcul a sumei i produsului a dou matrice rare. Afisarea se va face in forma natural. 3.=.$ se conceap o structur dinamic eficient pentru reprezentarea n memorie a polinoamelor. $e vor scrie funcii de calcul a sumei diferenei produsului i mpririi a dou polinoame. 3.1>. $e citete de la tastatur o e/presie postfi/at corect sintactic. $ se scrie programul de evaluare a sa. E/presia conine variabile formate dintr:o liter i operatorii binari B : C D.

14

Lucrarea de laborator nr. '.

LISTE CIRCULARE SIMPLU NLNUITE


1. C()*+),-,. .,/010++ n lucrare sunt prezentate principalele operaii asupra listelor circulare simplu nlnuite% crearea inserarea unui nod tergerea unui nod i tergerea listei. 2. C()2+340a*++ -4(04-+/4 Lista circular simplu nlnuit este lista simplu nlnuit a crei ultim element este legat de primul element6 adic ,.-+? GH ,0? D 60+?. n cadrul listei circulare simplu nlnuite nu e/ist capete. *entru gestionarea ei se va folosi un pointer 6-08)(3 care adreseaz un nod oarecare al listei mai precis ultimul introdus?fig.'.1.,.

)ig. '.1 &odelul listei circulare simplu nlnuite


+a i la lista simplu nlnuit principalele operaii sunt% crearea6 accesul la un nod6 inserarea unui nod6 tergerea unui nod tergerea listei.

1(

$tructura unui nod este urmtoarea% -564347 2-0,/- -+68)(3 9 +)- /:4+4; <= ), 42-4 (@.+ga-(0+, a/42- />?6 =< />?6,0+; 2-0,/- -+68)(3 =,0?; A TIP8NOD; '.1. C04a04a .+2-4+ /+0/,.a04 2+?6., C).1)*,+-4 -niial lista este vid% 6-08)(3 D 0; -ntroducerea n list a c#te unui nod se va face astfel% <= /04a04a )(3,.,+ =< ) D 2+E4(7$TIP8NOD%; <= 3+?4)2+,)4a )(3,.,+ =< 6 D $TIP8NOD =%?a..(/$)%; <= 04E40Fa04a ?4?(0+4 C) :4a6 =< /+-+04 3a-4 C) )(3 .a a3042a 6; +7 $6-08)(3 D D 0% 9 <= .+2-a 42-4 F+31 =< 6-08)(3 D 6; 6-08)(3 GH ,0? D 6; A 4.24 9 <= .+2-a ), 42-4 F+31 =< 6 GH ,0? D 6-08)(3 GH ,0?; 6-08)(3 GH ,0? D 6; 6-08)(3D6; <= 6-08)(3 6(+)-4aE1 .a ,.-+?,. )(3 +)240a- =< A

1.

'.'. A//42,. .a ,) )(3 !odurile pot fi accesate secvenial plec#nd de la nodul de pointer ptrEnod% 6D6-08)(3; +7$6I D 0% 3( 9 <= .+2-a ), 42-4 F+31 =< a//424aaE1 )(3,. P+ 604+a +)7(0?a*+a; 6 D 6 GH ,0?; A J:+.4 $6I D 6-08)(3%; sau cut#nd un nod de c"eie dat 2e36 n acest caz o funcie care va returna pointerul la nodul gsit va conine urmtoarea secven de program% 6 D 6-08)(3; +7 $6I D 0% 3( 9 <= .+2-a ), 42-4 F+31 =< +7 $ 6 GH /:4+4 DD K45% 9 <= 2Ga g12+- )(3,. =< <= )(3,. a04 a3042a 6 =< 04-,0) 6; A 6 D 6 GH ,0?; A J:+.4 $6I D 6-08)(3%; 04-,0) 0; '.3. I)240a04a ,),+ )(3 $e pun urmtoarele probleme% inserarea naintea unui nod de c"eie dat6 inserarea dup un nod de c"eie dat.

19

n ambele cazuri se caut nodul de c"eie dat av#nd adresa F6 dac e/ist un astfel de nod se creeaz nodul de inserat de adres p i se fac legturile corespunztoare. a% I)240a04a C)a+)-4a ,),+ )(3 34 /:4+4 3a-1 se caut nodul de c"eie dat ?adresa sa va fi F,% TIP8NOD =6B=MB=M1; M D 6-08)(3; 3( 9 M1 D M; M D M GH ,0?; +7 $M GH /:4+4 D DK45 % @04aK; A J:+.4 $MI D 6-08)(3%;

<= 2Ga g12+- )(3,. =<

se insereaz nodul de adres p6 M1 GH ,0? D 6; 6 GH ,0? D M; A

+7 $M GH /:4+4 DD K45% 9

@% I)240a04a 3,61 ,) )(3 34 /:4+4 3a-1 se caut nodul de c"eie dat%

TIP8NOD =6B=M; M D 6-08)(3; 3( 9 +7 $M GH /:4+4 DD K45 % @04aK; M D M GH ,0?; A J:+.4$MID6-08)(3%;

1;

se insereaz nodul de adres p % 6 GH ,0? DM GH ,0?; M GH ,0? D 6; A

+7 $M GH /:4+4 DD K45% 9

'.4. -40g404a ,),+ )(3 34 /:4+4 3a-1 <tergerea unui nod de c"eie dat 2e3 se va face astfel% se caut nodul de c"eie dat% M D 6-08)(3; 3( 9 M1 D M; M D M GH ,0?; +7 $M GH /:4+4 DD K45 % @04aK; <= 2Ga g12+- )(3,. =< A J:+.4 $MI D 6-08)(3%; se terge nodul cu meniunea c dac se terge nodul de pointer ptrEnod atunci ptrEnod va pointa spre nodul precedent F1% +7 $MGH /:4+4 DD K45% 9 +7 $MDDM GH ,0?% 6-08)(3DD0; <= .+2-a a 34F4)+- F+31 =< 4.24 9 M1 GH ,0? D M GH ,0?; +7 $M DD 6-08)(3% 6-08)(3 D M1; A 4.+@8)(3$M%; A

1=

'.(. -40g404a .+2-4+ <tergerea listei circulare simplu nlnuite se va face astfel% 6 D 6-08)(3; 3( 9 61 D6; 6 D 6 GH ,0?; 4.+@8)(3$61%; A J:+.4 $6I D 6-08)(3%; 6-08)(3 D 0; 3. M402,. .,/010++ 3.1. $ se defineasc i s se implementeze funciile pentru structura de date% 2-0,/- LISTA8CIRC 9 +)- .,)g+?4; 2-0,/- TIP8NOD =C)/46,-; =/,04)-; A av#nd modelul din fig. 3.1.

)ig.3.1. &odelul listei pentru problema 3.1.


3.'. 8e la tastatur se citete numrul n i numele a n copii. $ se simuleze urmtorul 5oc% cei n copii stau ntr:un cerc. ncep#nd cu un anumit

'>

copil se numr copiii n sensul acelor de ceasornic. )iecare al n:lea copil iese din cerc .+#tig ultimul copil rmas n 5oc. 3.3. $ se implementeze un buffer circular care conine nregistrri cu datele unui student i asupra cruia acioneaz principiul de sincronizare productor:consumator care const n urmtoarele% a, nregistrrile sunt preluate n ordinea producerii lor6 b, dac bufferul nu conine nregistrri consumatorul este nt#rziat p#n c#nd productorul depune o nregistrare6 c, dac bufferul este plin productorul este nt#rziat p#n c#nd consumatorul a preluat o nregistrare.

'1

Lucrarea de laborator nr. 3.

LISTE DUBLU NLNUITE


1. C()*+),-,. .,/010++ n lucrare sunt prezentate principalele operaii asupra listelor dublu nlnuite% crearea inserarea unui nod tergerea unui nod tergerea listei. 2. C()2+340a*++ -4(04-+/4 Lista dublu nlnuit este lista dinamic ntre nodurile creia s:a definit o dubl relaie% de succesor si de predecesor. &odelul listei dublu nlnuite pentru care se vor da e/plicaiile n

F+g. 2.1 M(34.,. .+2-4+ /+0/,.a04 2+?6., C).1)*,+-4


continuare este prezentat n figura '.1. Gipul unui nod dintr:o list dublu nlnuit este definit astfel% -564347 2-0,/- -+68)(3 9 /:4+4; <= ), 42-4 (@.+ga-(0+, =< 3a-4; 2-0,/- -+68)(3 =,0?; <= a3042a ,0?1-(0,.,+ )(3 =< 2-0,/- -+68)(3 = 604/; <= a3042a 604/434)-,.,+ )(3 =< A TIP8NOD;

''

+a i la lista simplu nlnuit principalele operaii sunt% crearea6 accesul la un nod6 inserarea unui nod6 tergerea unui nod tergerea listei. Lista dublu nlnuit va fi gestionat prin pointerii prim i ultim% TIP8NOD =60+?B =,.-+?; 60+? GH 604/ D 0; ,.-+? GH ,0? D 0; 2.1. C04a04a ,)4+ .+2-4 3,@., C).1)*,+-4 -niial lista este vid% 60+? D 0; ,.-+? D 0; 8up alocarea de memorie i citirea datelor n nod introducerea nodului de pointer n list se va face astfel% +7$60+?D D0%9 <= 42-4 60+?,. )(3 C) .+2-1 =< 60+? D 6; ,.-+? D 6; 6 GH ,0? D 0; 6 GH 604/ D 0; A 4.24 9 <= .+2-a ), 42-4 F+31 =< ,.-+? GH ,0? D 6; 6 GH 604/ D ,.-+?; 6 GH ,0? D 0; 6 GH 604/ D ,.-+?; ,.-+? D 6; A

'3

2.2. A//42,. .a ,) )(3 Accesul la un nod se poate face% secvenial nainte ?de la Hprim4 spre Hultim4,% 6 D 60+?; J:+.4 $6 ID 0% 9 F+E+-a04 )(3 34 6(+)-40 6; 6 D 6 GH ,0?; A secvenial napoi ? de la Hultim4 spre Hprim4,%

6 D ,.-+?; J:+.4 $6 ID 0% 9 F+E+-a04 )(3 34 6(+)-40 6; 6 D 6 GH 604/; A pe baza unei c"ei. +utarea unui nod de c"eie dat key se va face identic ca la lista simplu nlnuit ?lucrarea 1 par. '.'.,. 2.3. I)240a04a ,),+ )(3 -nserarea unui nod ntr:o list dublu nlnuit se poate face astfel% a, naintea primului nod% +7 $60+? DD 0% 9 <= .+2-a 42-4 F+31 =< 60+? D 6; ,.-+? D 6; 6 GH ,0? D 0; 6 GH 604/ D 0; A 4.24 9 <= .+2-a ), 42-4 F+31 <= 6 GH ,0? D60+?; 6 GH 604/ D 0; 60+? GH 604/ D 6; 60+? D 6; A

'4

b, dup ultimul nod% +7 $60+? DD 0% 9 <= .+2-a 42-4 F+31 =< 60+? D 6; ,.-+? D 6; 6 GH ,0? D 0; 6 GH 604/ D 0; A 4.24 9 <= .+2-a ), 42-4 F+31 <= 6 GH ,0? D0; 6 GH 604/ D ,.-+?; ,-+? GH ,0? D 6; ,.-+? D 6; A c, naintea unui nod de c"eie dat key: 8up cutarea nodului de c"eie 2e3 presupun#nd c acesta e/ist i are adresa F nodul de adres p va fi inserat astfel% 6 GH 604/ D M GH 604/; 6 GH ,0? D M; +7 $M GH 604/ ID 0% M GH 604/ GH ,0? D 6; M GH 604/ D 6; +7 $M DD 60+?% 60+? D 6; d, dup un nod de c"eie dat key% 8up cutarea nodului de c"eie 2e3 presupun#nd c acesta e/ist i are adresa F nodul de adres p va fi inserat astfel% 6 GH 604/ D M; 6 GH ,0? D M GH ,0?; +7 $M GH ,0? ID 0% M GH ,0? GH 604/ D 6; M GH ,0? D 6; +7 $,.-+? DD M% ,.-+? D 6;

'(

2.'. -40g404a ,),+ )(3 E/ist urmtoarele cazuri de tergere a unui nod din list% a, tergerea primului nod6 acest lucru se poate face cu secvena de program% 6 D 60+?; 60+? D 60+? GH ,0?; <= 24 /()2+3401 .+2-1 )4F+31 =< 4.+@8)(3$6%; <= 4.+@40a04a )(3,.,+ =< +7 $60+? DD 0% ,.-+? D 0; <= .+2-a a 34F4)+- F+31 =< 4.24 60+? GH 604/ D 0; b, tergerea ultimului nod% 6 D ,.-+?; ,.-+? D ,.-+? GH 604/; <= 24 /()2+3401 /1 .+2-a ), 42-4 F+31 =< +7 $,.-+? DD 0% 60+? D 0; <= .+2-a a 34F4)+- F+31 =< 4.24 ,.-+? GH ,0? D 0; 4.+@8)(3$6%; <= P-40g404a )(3,.,+ =< c, tergerea unui nod precizat printr:o c"eie key. *resupunem c nodul de c"eie key e/ist i are adresa p ?rezult din cutarea sa,% +7 $$60+? DD 6% QQ $,.-+? D D6%% 9 <= .+2-a a04 ,) 2+)g,0 )(3 =< 60+? D 0;,.-+? D 0;<=.+2-a 34F+)4 F+31=< 4.+@8)(3$6%;<=P-40g404 )(3= A 4.24 +7$6 DD 60+?% 9 <= 24 P-40g4 60+?,. )(3 =< 60+? D 60+? GH ,0?; 60+? GH 604/ D0; 4.+@8)(3$6%; A 4.24 +7 $6 DD ,.-+?% 9 <= 24 P-40g4 ,.-+?,. )(3 =< ,.-+? D ,.-+? GH 604/; ,.-+? GH ,0? D 0; 4.+@8)(3$6% A 4.24 9 <= )(3,. 34 P-402 42-4 3+740+- 34 /a64-4 =<
'.

6 GH ,0? GH 604/ D 6 GH 604/; 6 GH 604/ GH ,0? D 6 GH ,0?; 4.+@8)(3$6%; A 2.5. -40g404a .+2-4+ <tergerea ntregii liste se realizeaz terg#nd nod cu nod astfel% TIP8NOD =6; J:+.4 $60+? ID 0% 9 6 D 60+?; 60+? D 60+? GH ,0?; 4.+@8)(3$6%; A ,.-+? D 0; 3. M402,. .,/010++

3.1. $ se defineasc i s se implementeze funciile pentru structura de date% 2-0,/- LISTA 9 +)- .,)g+?4; 2-0,/- TIP8NOD =C)/46,-B =/,04)-B =27>0P+-; A av#nd modelul din fig.3.1.

)ig.3.1. &odelul listei pentru problema 3.1.

'9

3.'. $ se scrie funciile pentru realizarea operaiilor de creare inserare tergere pentru o list dublu nlnuit circular av#nd modelele din fig.3.'.

)ig. 3.'. &odelele de liste pentru problema 3.'.

3.3. 8e la tastatur se citesc n cuvinte 6s se creeze o list dublu nlnuit care s conin n noduri cuvintele distincte i frecvena lor de apariie. Lista va fi ordonat alfabetic. $e vor afia cuvintele i frecvena lor de apariie a, n ordine alfabetic cresctoare i b, n ordine alfabetic descresctoare. 3.4. )olosind o list circular dublu nlnuit s se simuleze urmtorul 5oc% n copii ale cror nume se citesc de la tastatur stau n cerc. ncep#nd cu un anumit copil ?numele su se citete, se numr copiii n sensul acelor de ceasornic. )iecare al m:lea copil ?m se citete, iese din 5oc. !umrtoarea continu ncep#nd cu urmtorul copil din cerc. +#tig 5ocul ultimul copil rmas n cerc. 3.(. Aceeai problem ca la 3.4. dar numrtoarea se face n sens contrar cu cel al acelor de ceasornic.
';

Lucrarea de laborator nr. 4.

ARBORI
1. C()*+),-,. .,/010++ n lucrare sunt prezentate operaiile de baz asupra arborilor binari binari total ec"ilibrai i arborilor oarecare. 2. C()2+340a*++ -4(04-+/4 Arborele binar foarte des nt#lnit n aplicaii este arborele n care orice nod are cel mult doi descendeni% fiul st#ng i fiul drept. 2.1. C()2-0,+04aB -0aF402a04a P+ P-40g404a ,),+ a0@(04 @+)a0. +onstruirea unui arbore binar se face citind n preordine din fiierul de intrare informaiile din nodurile arborelui. $ubarborii vizi trebuie s fie notai cu un semn distinctiv. 8e e/emplu pentru arborele din figura '.1.1 not#nd identificatorul pentru arborele vid cu C introducerea identificatorilor nodurilor se va face astfel%

AI8CJCCC+ECC)CKCC
)ig. '.1.1. Arbore binar.

Gipul unui nod se declar astfel%


'=

-564347 2-0,/- -+68)(3 9 /:a0 /:; <= +34)-+7+/a-(0,. )(3,.,+ =< +)7(0?a*+4; 2-0,/- -+68)(3 =2-gB =30; A TIP8NOD; +onstruirea unui arbore binar se face conform funciei de construire av#nd urmtoarea structur% TIP8NOD =/()2-0,+04$ % 9 TIP8NOD =6; +)- ); /:a0 /; )D2+E4(7$TIP8NOD%; <= /+-+04 /a0a/-40 34 +34)-+7+/a04 )(3 =< 2/a)7$NR/OB /%; +7$/DDS=S% 04-,0) 0; 4.24 9 <= /()2-0,+04 )(3 34 a30421 6 =< 6D$TIP8NOD =%?a..(/$)%; <= +)-0(3,/404 34 +)7(0?a*+4 C) )(3 =< 6GH/:D/; 6GH2-gD/()2-0,+04$ %; 6GH30D/()2-0,+04$ %; A 04-,0) 6; A Apelul funciei se va face astfel% 0131/+)a D /()2-0,+04 $ % Graversarea unui arbore binar se poate face n cele 3 moduri cunoscute% preordine inordine postordine. n programul urmtor sunt implementate operaiile de construcie i traversare a unui arbore binar. !odul conine numai identificatorul su. Afiarea nodurilor vizitate se face cu indentare.

3>

DC *rogram de construire i afiare a arborilor binari CD T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T+)/.,34 Ua..(/.:H -564347 2-0,/- -+68)(39 +)- )0.; <=+)7(0?a*+4 =< 2-0,/- -+68)(3 =2-gB=30; A TIP8NOD; TIP8NOD =0a3; F(+3 604(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH)0%; 604(03+)4$6GH2-gB)+F4.V1%; 604(03+)4$6GH30B)+F4.V1%; A A F(+3 +)(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 +)(03+)4$6GH2-gB)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH)0%; +)(03+)4$6GH30B)+F4.V1%; A A F(+3 6(2-(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 6(2-(03+)4$6GH2-gB)+F4.V1%; 6(2-(03+)4$6GH30B)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH)0%; A A
31

TIP8NOD =/()2-0,/-+4$% 9 TIP8NOD =6; +)- +)7B); )D2+E4(7$TIP8NOD%; 60+)-7$WX)I)-0(3,/4-+ I)7.3+) )(3 +)7DW%; 2/a)7$WR3WBQ+)7%; +7$+)7DD0% 04-,0) 0; 4.24 9 6D$TIP8NOD =%?a..(/$)%; 6GH)0D+)7; 6GH2-gD/()2-0,/-+4$%; 6GH30D/()2-0,/-+4$%; A 04-,0) 6; A F(+3 ?a+)$F(+3% 9 0a3D/()2-0,/-+4$%; 60+)-7$WX) IZITAREA IN PREORDINEX)W%; 604(03+)4$0a3B0%; g4-/:$%; 60+)-7$WX) IZITAREA IN INORDINEX)W%; +)(03+)4$0a3B0%; g4-/:$%; 60+)-7$W IZITAREA IN POSTORDINEX)W%; 6(2-(03+)4$0a3B0%; g4-/:$%; A 2.& A0@(0+ @+)a0+ -(-a. 4/:+.+@0a*+ 7n arbore binar total ec"ilibrat este un arbore binar care ndeplinete urmtoarea condiie% numrul nodurilor unui oricare subarbore st#ng difer cu cel mult 1 n plus fa de numrul nodurilor subarborelui corespunztor drept. Lezult c frunzele sale se afl pe ultimele dou niveluri. Algoritmul de construire a unui arbore binar total ec"ilibrat cu n noduri este urmtorul% a, un nod este rdcin6
3'

se iau nstg = [n/2] noduri pentru arborele st#ng i se trece la construirea lui ?pasul a,6 c, se iau cele ndr=n-nstg-1 noduri rmase pentru subarborele drept i se trece la construirea lui ?pasul a,. *entru oricare nod e/ist relaia% ndr <= nstg <= ndr + 1 n programul urmtor este implementat acest algoritm pentru construirea unui arbore binar total ec"ilibrat citirea informaiei n noduri fc#ndu:se n preordine. T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T+)/.,34 Ua..(/.:H <= ARBORI BINARI TOTAL ECYILIBRATI =< -564347 2-0,/- -+68)(39 +)- )0;<=+)7(0?a*+4 =< 2-0,/- -+68)(3 =2-gB=30; A TIP8NOD; TIP8NOD =0a3; F(+3 604(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7$6ID0% 9 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH)0%; 604(03+)4$6GH2-gB)+F4.V1%; 604(03+)4$6GH30B)+F4.V1%; A A F(+3 +)(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 +)(03+)4$6GH2-gB)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH)0%; +)(03+)4$6GH30B)+F4.V1%; A
33

b,

A F(+3 6(2-(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 6(2-(03+)4$6GH2-gB)+F4.V1%; 6(2-(03+)4$6GH30B)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH)0%; A A TIP8NOD =/()2-0,/-+4$+)- )08)(3,0+% 9 TIP8NOD =6; +)- )82-gB)830; +)- +)7B); )D2+E4(7$TIP8NOD%; +7$)08)(3,0+DD0% 04-,0) 0; 4.24 9 )82-gD)08)(3,0+<2; <=)08)(3,0+ 3+) 2,@a0@(04.4 2-a)g =< )830D)08)(3,0+G)82-gG1; <=)0.)(3,0+ 3+) 2,@a0@(04.4 3046- =< 6D$TIP8NOD =%?a..(/$)%; 60+)-7$WX)I)-0(3,/4-+ +)7(0?a-+a 3+) )(3 +) 604(03+)4 W%; 2/a)7$WR3WBQ$6GH)0%%; 6GH2-gD/()2-0,/-+4$)82-g%; 6GH30D/()2-0,/-+4$)830%; A 04-,0) 6; A F(+3 ?a+)$F(+3% 9 +)- )08-(-a.8)(3,0+; 60+)-7$WX)N,?a0,. -(-a. 34 )(3,0+ DW%; 2/a)7$WR3WBQ)08-(-a.8)(3,0+%;X 0a3D/()2-0,/-+4$)08-(-a.8)(3,0+%;
34

60+)-7$WX) IZITAREA IN PREORDINEX)W%; 604(03+)4$0a3B0%; g4-/:$%; 60+)-7$WX) IZITAREA IN INORDINEX)W%; +)(03+)4$0a3B0%; g4-/:$%; 60+)-7$W IZITAREA IN POSTORDINEX)W%; 6(2-(03+)4$0a3B0%; g4-/:$%; A 2." A0@(0+ (a04/a04 Arborele oarecare este un arbore a crui noduri au mai mult de doi descendeni. 7n nod are urmtoarea structur% -564347 2-0,/- -+68)(3 9 +)7(0?a*+4; +)- )087++; <=),?10 34 7++ =< 2-0,/- -+68)(3 =a3087++ Z?aL7++[; <= a30424.4 )(3,0+.(0 7+, =< A TIP8NOD; +onstruirea arborelui se realizeaz astfel% pentru fiecare nod se citete informaia util i numrul de fii6 nodurile citite n postordine i adresele sunt pstrate ntr:o stiv p#n c#nd apare nodul al crui fii sunt. n acest moment adresele fiilor sunt scoase din stiv iar adresele lor sunt trecute n nodul tat dup care adresa nodului tat este pus n stiv. n final singura adres n stiv va fi cea a rdcinii arborele fiind construit. Graversarea arborelui pe orizontal ?nivel dup nivel, se va face astfel% se utilizeaz o coad pentru pstrarea adreselor nodurilor ce urmeaz s fie prelucrate6 iniial coada este vid6 se introduce n coada adresa rdcinii6

3(

se scoate pe r#nd din coad adresa a c#te unui nod se prelucreaz informaia din nod iar apoi se introduc adresele fiilor nodului respectiv. $e repet acest pas p#n c#nd coada devine vid. 3. M402,. .,/010++ 3.1 $e citete de la tastatur o e/presie matematic n form postfi/at sub forma unui ir de caractere. $ se construiasc arborele corespunztor acestei e/presii fiecare nod conin#nd un operator sau un operand. 3.' $ se tipreasc e/presia de la punctul 3.1. n form postfi/at i infi/at. 3.3 $ se evalueze e/presia matematic de la punctul 3.1. 3.4 $ se evalueze un arbore care conine n noduri constantele > i 1 i operatorii A!8 0L !0G. 3.( $ se scrie funcii de prett3:print ?tiprire frumoas, a arborilor. 3.. $ se scrie funcii nerecursive pentru traversarea arborilor. 3.9 Arborele genealogic al unei persoane se reprezint astfel% numele persoanei este c"eia nodului rdcin i pentru fiecare nod c"eia descendentului st#ng este numele tatlui iar a descendentului drept este numele mamei. $e citesc dou nume de la tastatur. +e relaie de rudenie e/ist ntre cele dou persoaneM $e presupune c o familie are doar un singur fiu. 3.; $ se scrie un program care transform un arbore binar ntr:o list dublu nlnuit. 3.= $ se scrie un program care s intersc"imbe subarborele drept cu cel st#ng pentru un nod dat. 3.1> $ se scrie o funcie care determin nlimea unui arbore binar. 3.11 $ se scrie o funcie care determin numrul de frunze ale unui arbore binar.

3.

3.1' $ se scrie o funcie care determin dac doi arbori binari sunt ec"ivaleni ?arborii binari sunt ec"ivaleni dac sunt structural ec"ivaleni i datele corespunztoare nodurilor sunt aceleai,. 3.13 $ se scrie un program de construire i traversare a unui arbore oarecare conform indicaiilor din lucrare ?paragraful '.3.,.

39

Lucrarea de laborator nr. (.

ARBORI BINARI DE CUTARE


1. C()*+),-,. .,/010++ n lucrare sunt prezentate principalele operaii asupra arborilor binari de cutare% inserare cutare tergere traversare. 8e asemenea sunt prezentai arborii binari de cutare optimali. 2. C()2+340a*++ -4(04-+/4 Arborii binari de cutare sunt des folosii pentru memorarea i regsirea rapid a unor informaii pe baza unei c"ei. )iecare nod al arborelui trebuie s conin o c"eie distinct. $tructura unui nod al unui arbore binar de cutare este urmtoarea% -564347 2-0,/- -+68)(3 9 -+6 /:4+4; +)7(0?a*++8,-+.4; 2-0,/- -+68)(3 =2-gB =30; A TIP8NOD; n cele ce urmeaz rdcina arborelui se consider ca o variabil global% TIP8NOD =0a3; $tructura arborelui de cutare depinde de ordinea de inserare a nodurilor. 2.1. I)240a04a C)-0G,) a0@(04 @+)a0 34 /1,-a04. +onstrucia unui arbore binar de cutare se face prin inserarea a c#te unui nod de c"eie K45. Algoritmul de inserare este urmtorul% a, 8ac arborele este vid se creeaz un nou nod care este rdcina c"eia av#nd valoarea K45B iar subarborii st#ng i drept fiind vizi.

3;

b, 8ac c"eia rdcinii este egal cu K45 atunci inserarea nu se poate face ntruc#t e/ist de5a un nod cu aceast c"eie. c, 8ac c"eia K45 este mai mic dec#t c"eia rdcinii se reia algoritmul pentru subarborele st#ng ?pasul a,. d, 8ac c"eia K45 este mai mare dec#t c"eia rdcinii se reia algoritmul pentru subarborele drept ?pasul a,. )uncia nerecursiv de inserare va avea urmtorul algoritm% F(+3 +)240a048)404/,02+F1 $+)- K45% 9 TIP8NOD =6B =M; +)- ); <= /()2-0,/*+4 )(3 6=< )D2+E4(7 $TIP8NOD%; 6D$TIP8NOD=%?a..(/$)%; 6GH/:4+4DK45; <= +)-0(3,/404 +)7(0?a*+4 ,-+.1 C) )(3,. 6 =< 6GH2-gD0; 6GH30D0; <= 42-4 )(3 7,)E1 =< +7 $0a3DD0% 9 <= a0@(04.4 42-4 F+3 =< 0a3D6; 04-,0); A <= a0@(04.4 )47++)3 F+3 24 /a,-1 )(3,. -a-1 64)-0, )(3,. 6 =< MD0a3; <= 0a3 42-4 0131/+)a a0@(04.,+ Fa0+a@+.1 g.(@a.1 =< 7(0 $ ; ; % 9 +7 $K45UMGH/:4+4% 9 <= /1,-a04a 24 7a/4 C) 2,@a0@(04.4 2->)g =< +7 $MGH2-gDD0% 9 <= +)240a04 =< MGH2-gD6; 04-,0); A 4.24 MDMGH2-g; A 4.24 +7 $K45HMGH/:4+4% 9 <= /1,-a04a 24 7a/4 C) 2,@a0@(04.4 3046- =< +7 $MGH30DD0% 9 <= +)240a04 =< MGH30D6;
3=

04-,0); A 4.24 MDMGH30; A 4.24 9 <= /:4+4 3,@.1 =< <= 2/0+404 ?42a\ =< 7044 $6%; 04-,0); A A A 2.2 C1,-a04a ,),+ )(3 34 /:4+4 3a-1 key C)-0G,) a0@(04 @+)a0 34 /1,-a04. +utarea ntr:un arbore binar de cutare a unui nod de c"eie dat se face dup un algoritm asemntor cu cel de inserare. !umrul de cutri optim ar fi dac arborele de cutare ar fi total ec"ilibrat ?numrul de comparaii ma/im ar fi log 2 n @ unde n este numrul total de noduri,. +azul cel mai defavorabil n ceea ce privete cutarea este atunci c#nd inserarea se face pentru nodurile av#nd c"eile ordonate cresctor sau descresctor. n acest caz arborele degenereaz ntr:o list. Algoritmul de cutare este redat prin funcia urmtoare% TIP8NOD =/a,-a04 $TIP8NOD =0a3B +)- K45% <= 7,)/*+a 04-,0)4aE1 a3042a )(3,.,+ C) /aE 34 g12+04 2a, 0 C) /aE /1 ), 4L+2-1 ,) )(3 34 /:4+a K45 =< 9 TIP8NOD =6; +7 $0a3DD0% 04-,0) 0; <= a0@(04.4 42-4 F+3 =< <= 3a/1 a0@(04.4 ), 42-4 F+3B /1,-a04a C)/464 3+) 0131/+)a 0a3 =< 6D0a3; J:+.4 $6ID0% 9 +7 $6GH/:4+4DDK45% 04-,0) 6; <= 2Ga g12+- =<
4>

4.24 +7 $K45U6GH/:4+4% 6D6GH2-g; <=/1,-a04a 24 7a/4 C) 2,@a0@.2->)g =< 4.24 6D6GH30; <= /1,-a04a 24 7a/4 C) 2,@a0@(04.4 3046- =< A 04-,0) 0; <= ), 4L+2-1 )(3 34 /:4+4 K45 =< A Apelul de cutare este% 6D/a,-a04 $0a3B K45%; rad fiind pointerul spre rdcina arborelui. 2.3 -40g404a ,),+ )(3 34 /:4+4 3a-1 C)-0G,) a0@(04 @+)a0 34 /1,-a04 n cazul tergerii unui nod arborele trebuie s:i pstreze structura de arbore de cutare. La tergerea unui nod de c"eie dat intervin urmtoarele cazuri% a, !odul de ters este un nod frunz. n acest caz n nodul tat adresa nodului fiu de ters ?st#ng sau drept, devine zero. b, !odul de ters este un nod cu un singur descendent. n acest caz n nodul tat adresa nodului fiu de ters se nlocuiete cu adresa descendentului nodului fiu de ters. c, !odul de ters este un nod cu doi descendeni. n acest caz nodul de ters se nlocuiete cu nodul cel mai din st#nga al subarborelui drept sau cu nodul cel mai din dreapta al subarborelui st#ng. Algoritmul de tergere a unui nod conine urmtoarele etape% cutarea nodului de c"eie K45 i a nodului tat corespunztor6 determinarea cazului n care se situeaz nodul de ters.

41

2.' -40g404a ,),+ a0@(04 @+)a0 34 /1,-a04 <tergerea unui arbore binar de cutare const n parcurgerea n postordine a arborelui i tergerea nod cu nod conform funciei urmtoare% F(+3 2-40g4048a0@(04$TIP8NOD =0a3% 9 +7 $0a3 ID0% 9 2-40g4048a0@(04 $0a3GH2-g%; 2-40g4048a0@(04 $0a3GH30%; 7044 $0a3%; A A 2.5 T0aF402a04a ,),+ a0@(04 @+)a0 34 /1,-a04 +a orice arbore binar un arbore binar de cutare poate fi traversat n cele trei moduri% n preordine n inordine i n postordine conform funciilor de mai 5os% F(+3 604(03+)4 $TIP8NOD =6% 9 +7 $6ID0% 9 4L-0ag404 +)7(0?a*+4 3+) )(3,. 6; 604(03+)4 $6GH2-g%; 604(03+)4 $6GH30%; A A F(+3 +)(03+)4 $TIP8NOD =6% 9 +7 $6ID0% 9 +)(03+)4 $6GH2-g%; 4L-0ag404 +)7(0?a*+4 3+) 6; +)(03+)4 $6GH30%; A A F(+3 6(2-(03+)4 $TIP8NOD =6% 9
4'

+7 $6ID0% 9 6(2-(03+)4 $6GH2-g%; 6(2-(03+)4 $6GH30%; 4L-0ag404 +)7(0?a*+4 3+) )(3,. 6; A A Apelul acestor funcii se va face astfel% preordine?rad,6 inordine?rad,6 postordine?rad,6 2.# A0@(0+ @+)a0+ 34 /1,-a04 (6-+?a.+ Lungimea drumului de cutare a unui nod cu c"eia x, ntr:un arbore binar de cutare este nivelul hi al nodului n care se afl c"eia cutat n caz de succes sau 1 plus nivelul ultimului nod nt#lnit pe drumul cutrii fr succes. )ie $ NO c1 c' ... cn P mulimea c"eilor ce conduc la cutarea cu succes ?c1 Q c' Q ... Q cn,. )ie pi probabilitatea cutrii c"eii ci ?iN1 ' ... n,. 8ac notm cu + mulimea c"eilor posibile atunci + $ reprezint mulimea c"eilor ce conduce la cutarea fr succes. Aceast mulime o partiionm n submulimile% 2> @ mulimea c"eilor mai mici ca c16 2n @ mulimea c"eilor mai mari ca cn6 2i ?iN1 ' ... n, @ mulimea c"eilor n intervalul ?ci ciB1,. )ie Fi probabilitatea cutrii unei c"ei din mulimea 2i. +utarea pentru orice c"eie din 2i se face pe acelai drum6 lungimea drumului de cutare va fi "Ri. !otm cu L costul arborelui care reprezint lungimea medie de cutare% L=
i =1 n

p h + q h
i i j => j

S i

cu condiia%

43

p + q
i =1 i j =>

=1

$e numete arbore optimal un arbore binar de cutare care pentru anumite valori pi Fi date realizeaz un cost minim. Arborii optimali de cutare nu sunt supui inserrilor i eliminrilor. 8in punct de vedere al minimizrii funciei L n loc de p i i Fi se pot folosi frecvenele apariiei cutrilor respective n cazul unor date de test. $e noteaz cu Ai5 arborele optimal construit cu nodurile ciB1 ciB' ... c5. Jreutatea arborelui Ai5 este%

q
q =q
ii

ij

k =i +1

p + q
k k =i

care se poate calcula astfel%


i

q =q
ij

i j 1

p +q
j

pentru i = 1 ' ... n6 pentru > i 5 n

Lezult c costul arborelui optimal Ai5 se va putea calcula astfel% pentru > i n cii = qii

c = q min ?c
ij ij i< k j

i k 1

+ c kj ,

)ie ri5 valoarea lui 2 pentru care se obine minimul din relaia lui c i5. !odul cu c"eia cTri5U va fi rdcina subarborelui optimal Ai5 iar subarborii si vor fi Ai 2:1 i A25. +alculul valorilor matricei + este de ordinul 0?n 3,. $:a demonstrat c se poate reduce ordinul timpului de calcul la 0?n',. +onstruirea se face cu a5utorul funciei urmtoare% TIP8NOD =/()2-08a0@(048(6-+?a.$+)- +B +)- \% 9 +)- ); TIP8NOD =6; +7$+DD\% 6D0; 4.24 9 )D2+E4(7 $TIP8NOD%; 6D$TIP8NOD=%?a..(/$)%; 6GH2-gD/()2-08a0@(048(6-+?a.$+B 0Z+[Z\[G1%; 6GH2-gD/()2-08a0@(048(6-+?a.Z0Z+[Z\[[;
44

6GH30D/()2-08a0@(048(6-+?a.$0Z+[Z\[B \%; A 04-,0) 6; A 2.& EL4?6.4 *rimul program prezint toate funciile descrise n lucrare asupra unui arbore de cutare. 7n nod conine drept informaie util numai c"eia care este un numr ntreg. Al doilea program conine funciile principale asupra unui arbore binar de cutare optimal. EL4?6.,. )0.1 $a0@(0+ 34 /1,-a04% T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T+)/.,34 Ua..(/.:H -564347 2-0,/- -+68)(39 +)- /:4+4;<=+)7(0?a-+4 =< 2-0,/- -+68)(3 =2-gB=30; A TIP8NOD; TIP8NOD =0a3; F(+3 604(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH/:4+4%; 604(03+)4$6GH2-gB)+F4.V1%; 604(03+)4$6GH30B)+F4.V1%; A A F(+3 +)(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 +)(03+)4$6GH2-gB)+F4.V1%;

4(

7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH/:4+4%; +)(03+)4$6GH30B)+F4.V1%; A A F(+3 6(2-(03+)4$TIP8NOD =6B +)- )+F4.% 9 +)- +; +7 $6ID0%9 6(2-(03+)4$6GH2-gB)+F4.V1%; 6(2-(03+)4$6GH30B)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR23X)WB6GH/:4+4%; A A F(+3 +)240a04$+)- K45% 9 TIP8NOD =6B=M; +)- ); )D2+E4(7$TIP8NOD%; 6D$TIP8NOD =%?a..(/$)%; 6GH/:4+4DK45; 6GH2-gD0;6GH30D0; +7$0a3DD0%9 0a3D6; 04-,0); A MD0a3; 7(0$;;% 9 +7 $K45 U MGH/:4+4%9 +7$MGH2-gDD0%9 MGH2-gD6; 04-,0); A 4.24 MDMGH2-g; A 4.24 +7 $K45 H MGH/:4+4% 9
4.

+7$MGH30 DD 0% 9 MGH30D6; 04-,0); A 4.24 MDMGH30; A 4.24 9 <= /:4+ 4ga.4 =< 60+)-7$WX) EL+2-a ,) )(3 34 /:4+4 D R3X)WBK45%; <= 4F4)-,a.a 604.,/0a04 a )(3,.,+ =< 7044$6%; 04-,0); A A A TIP8NOD =+)240a04804/$TIP8NOD =0a3B+)- K45% 9 TIP8NOD =6; +)- ); +7 $0a3DD0%9 )D2+E4(7$TIP8NOD%; 6D$TIP8NOD =%?a..(/$)%; 6GH/:4+4DK45;6GH2-gD0;6GH30D0; 04-,0) 6; A 4.24 9 +7$K45 U 0a3GH/:4+4% 0a3GH2-gD+)240a04804/$0a3GH2-gBK45%; 4.24 9 +7$K45 H 0a3GH/:4+4% 0a3GH30D+)240a04804/$0a3GH30BK45%; 4.24 9 <= /:4+4 3,@.a =< 60+)-7$WX) EL+2-a ,) )(3 34 /:4+4DR3X)WBK45%; A A A; 04-,0) 0a3; A TIP8NOD = /a,-a04$TIP8NOD =0a3B +)- K45% 9
49

TIP8NOD =6; +7$0a3DD0% 04-,0) 0;<=a0@(04.4 42-4 F+3 =< 6D0a3; J:+.4$6 ID 0% 9 +7$6GH/:4+4 DD K45% 04-,0) 6;<= 2Ga ga2+- )(3,. =< 4.24 +7$K45 U 6GH/:4+4% 6D6GH2-g; 4.24 6D6GH30; A 04-,0) 0; <= ), 4L+2-a )(3 34 /:4+4 K45 =< A TIP8NOD =2-40g4048)(3$TIP8NOD =0a3B+)- K45% 9 TIP8NOD =6B=-a-a86;<= 6 42-4 )(3,. 34 2-402B +a0 -a-a86 42-4 -a-a. .,+ =< TIP8NOD =)(38+).(/,+04B=-a-a8)(38+).(/,+04;<=)(3,. /a04 +. Fa +).(/,+ 64 6 2+ -a-a. 2a, =< +)- 3+04/-+4; <=2-gD1;30D2=< +7$0a3DD0% 04-,0) 0; <=a0@(04.4 42-4 F+3 =< 6D0a3; -a-a86D0; <= /a,-a04 )(3 /, /:4+a K45 =< J:+.4$$6ID0%QQ$6GH/:4+4IDK45%% 9 +7 $K45U6GH/:4+4%9 <=/a,-a04 +) 2-a)ga =< -a-a86D6; 6D6GH2-g; 3+04/-+4D1; A 4.24 9 <=/a,-a04 +) 304a6-a =< -a-a86D6; 6D6GH30; 3+04/-+4D2; A A +7$6DD0%9 60+)-7$WX) NU E]ISTA NOD CU CYEIADR3X)WBK45%; 04-,0) 0a3; A
4;

<= 2Ga ga2+- )(3,. 6 34 /:4+4 K45 =< +7$6GH2-gDD0% )(38+).(/,+04D6GH30; <= )(3,. 34 2-402 6 ), a04 7+, 2-+)g =< 4.24 +7$6GH30DD0% )(38+).(/,+04D6GH2-g; <=)(3,. 34 2-402 6 ), a04 7+, 3046-=< 4.24 9 <= )(3,. 34 2-402 6 a04 7+, 2-a)g 2+ 7+, 3046- =< -a-a8)(38+).(/,+04D6; )(38+).(/,+04D6GH30; <= 24 /a,-a +) 2,@a0@(04.4 3046-=< J:+.4$)(38+).(/,+04GH2-gID0% 9 -a-a8)(38+).(/,+04D)(38+).(/,+04; )(38+).(/,+04D)(38+).(/,+04GH2-g; A +7$-a-a8)(38+).(/,+04ID6% 9 -a-a8)(38+).(/,+04GH2-gD)(38+).(/,+04GH30; )(38+).(/,+04GH30D6GH30; A )(38+).(/,+04GH2-gD6GH2-g; A 7044$6%; 60+)-7$WX)N(3,. 34 /:4+4DR3 a 7(2- 2-402IX)WBK45%; +7$-a-a86DD0% 04-,0) )(38+).(/,+04; <=2Ga 2-402 /:+a0 0a3a/+)a +)+-+a.a =< 4.24 9 +7 $3+04/-+4DD1% -a-a86GH2-gD)(38+).(/,+04; 4.24 -a-a86GH30D)(38+).(/,+04; 04-,0) 0a3; A A F(+3 2-40g4048a0@(04$TIP8NOD =0a3% 9 +7$0a3ID0% 9 2-40g4048a0@(04$0a3GH2-g%; 2-40g4048a0@(04$0a3GH30%; 7044$0a3%; A A
4=

F(+3 ?a+)$F(+3% 9 TIP8NOD =6; +)- +B )BK45; /:a0 /:; 60+)-7$WALE!ETI I)240a04 04/,02+Fa 0<R 2a, )404/,02+Fa a./a0a/-40W%; 2/a)7$WR/WBQ/:%; 60+)-7$WX)N,?a0,. -(-a. 34 )(3,0+DW%; 2/a)7$WR3WBQ)%; 0a3D0; 7(0$+D1;+UD);+VV% 9 60+)-7$WX)C:4+a )(3,.,+DW%; 2/a)7$WR3WBQK45%; +7$$/:DD^R^%__$/:DD^0^%% 0a3D+)240a04804/$0a3BK45%; 4.24 +)240a04$K45%; A 60+)-7$WX) IZITAREA IN PREORDINEX)W%; 604(03+)4$0a3B0%; g4-/:$%; 60+)-7$WX) IZITAREA IN INORDINEX)W%; +)(03+)4$0a3B0%; g4-/:$%; 60+)-7$W IZITAREA IN POSTORDINEX)W%; 6(2-(03+)4$0a3B0%; g4-/:$%; 77.,2:$2-3+)%; 60+)-7$WX) D(0+-+ 2a /a,-a-+ ,) )(3 DADD<3 N,D a.- /a0a/-40 `W%; 2/a)7$WR/WBQ/:%; J:+.4$$/:DD^D^%__$/:DD^3^%% 9 60+)-7$WC:4+a )(3,.,+ /a,-a-DW%; 2/a)7$WR3WBQK45%; 6D/a,-a04$0a3BK45%; +7$6ID0% 60+)-7$WN(3,. 4L+2-a 2+ a04 a3042a 6X)W%; 4.24 60+)-7$WN, 4L+2-a ,) )(3 34 /:4+4 3a-aX)W%; 77.,2:$2-3+)%;
(>

60+)-7$WX) D(0+-+ 2a /a,-a-+ ,) )(3 DADD<3 N,D a./a0a/-40 ` W%; 2/a)7$WR/WBQ/:%; A 77.,2:$2-3+)%; 60+)-7$WX) D(0+-+ 2a 2-40g4- ,) )(3 DADD<3 N,D a.- /a0a/-40 `W%; 2/a)7$WR/WBQ/:%; J:+.4$$/:DD^D^%__$/:DD^3^%% 9 60+)-7$WC:4+a )(3,.,+ 34 2-402DW%; 2/a)7$WR3WBQK45%; 0a3D2-40g4048)(3$0a3BK45%; +)(03+)4$0a3B0%; 77.,2:$2-3+)%; 60+)-7$WX) D(0+-+ 2a 2-40g4-+ ,) )(3 DADD<3 N,D a./a0a/-40 ` W%; 2/a)7$WR/WBQ/:%; A 60+)-7$W2-40g4-+ a0@(04.4 /04a- a 3aD3<D ),Da.- /a0a/-40 W%; 77.,2:$2-3+)%; 2/a)7$WR/WBQ/:%; +7$$/:DD^D^%__$/:DD^3^%% 9 2-40g4048a0@(04$0a3%; 0a3D0; 60+)-7$WX)ARBORELE ESTE STERSIIX)W%; A g4-/:$%; A

EL4?6.,. )0.2 $a0@(0+ (6-+?a.+% T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T+)/.,34 Ua..(/.:H T347+)4 )?aL 25
(1

-564347 2-0,/- -+68)(3 9 /:a0 /:4+4; -+68)(3 =2-gB=30; A TIP8NOD; /:a0 /:4+Z)?aL[; <= /:4+.4 /1B/2B...B/) =< +)- 6Z)?aL[;<= 704/F4)-a 34 /a,-a04 a /:4+.(0 =< +)- MZ)?aL[; <= 704/F4)-a 34 /a,-a04 +)-04 /:4+ =< +)- 0Z)?aL[Z)?aL[; <= 0a3a/+)+.4 2,@a0@(0+.(0 (6-+?a.+ =< F(+3 /a./,.$+)- )0B7.(a- =308?43% 9 <= 34-40?+)a 2-0,/-,0a a0@(04.,+ =< +)- /Z)?aL[Z)?aL[;<= /(2-,. 2,@a0@(0+.(0 (6-+?a.+ =< +)- gZ)?aL[Z)?aL[; <= g04,-a-4a a0@(0+.(0 =< +)- +B\BKB?B.; +)- LB?+); <= /a./,.,. ?a-0+/4+ g04,-a-4 =< 7(0$+D0;+UD)0;+VV% 9 gZ+[Z+[DMZ+[; 7(0$\D+V1;\UD)0;\VV% gZ+[Z\[DgZ+[Z\G1[V6Z\[VMZ\[; A <= /a./,.,. ?a-0+/4+ / =< 7(0$+D0;+UD)0;+VV% /Z+[Z+[DgZ+[Z+[; 7(0$+D0;+UD)0G1;+VV% 9 \D+V1; /Z+[Z\[D/Z+[Z+[V/Z\[Z\[VgZ+[Z\[; 0Z+[Z\[D\; A <=/a./,. /Z+[Z.V+[ =< 7(0$.D2;.UD)0;.VV% 7(0$+D0;+UD)0G.;+VV% 9 ?+)D32000;
('

7(0$KD+V1;KUD.V+;KVV% 9 LD/Z+[ZKG1[V/ZK[Z.V+[; +7$LU?+)% 9 ?+)DL; ?DK; A A /Z+[Z.V+[D?+)VgZ+[Z.V+[; 0Z+[Z.V+[D?; A 60+)-7$WX)MATRICEA !X)W%; 7(0$+D0;+UD)0;+VV% 9 7(0$\D+;\UD)0;\VV% 60+)-7$WR3 WBgZ+[Z\[%; 60+)-7$WX)W%; A g4-/:$%; 60+)-7$WX)MATRICEA CX)W%; 7(0$+D0;+UD)0;+VV% 9 7(0$\D+;\UD)0;\VV% 60+)-7$WR3 WB/Z+[Z\[%; 60+)-7$WX)W%; A g4-/:$%; 60+)-7$WX)MATRICEA RX)W%; 7(0$+D0;+UD)0;+VV% 9 7(0$\D+;\UD)0;\VV% 60+)-7$WR3 WB0Z+[Z\[%; 60+)-7$WX)W%; A g4-/:$%; 60+)-7$W/Z0[Z)0.[DR.3 gZ0[Z)0.[DR.3X)WB/Z0[ Z)0.[BgZ0[Z)0.[%; g4-/:$%; =308?43D/Z0[Z)0.[<$7.(a-%gZ0[Z)0.[; A TIP8NOD= /()2-08a0@(04$+)- +B+)- \%
(3

<= /()2-0,+04a a0@(04.,+ (6-+?a. =< 9 +)- ); TIP8NOD =6; +7 $+DD\% 6D0; 4.24 9 )D2+E4(7$TIP8NOD%; 6D$TIP8NOD=%?a..(/$)%; 6GH2-gD/()2-08a0@(04$+B0Z+[Z\[G1%; 6GH/:4+4D/:4+Z0Z+[Z\[[; 6GH30D/()2-08a0@(04$0Z+[Z\[B\%; A 04-,0) 6; A F(+3 +)(03+)4$TIP8NOD =6B+)- )+F4.% 9 <= A7+2a04 +) +)(03+)4 a a0@(04.,+ =< +)- +; +7$6ID0%9 +)(03+)4$6GH2-gB)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$WR/X)WB6GH/:4+4%; +)(03+)4$6GH30B)+F4.V1%; A A F(+3 ?a+)$F(+3% 9 TIP8NOD =0a3a/+)a; +)- +; +)- ); <=) 42-4 ),?a0,. /:4+.(0 =< 7.(a- 30,?8?43+,; 60+)-7$WX)N,?a0,. /:4+.(0DW%; 2/a)7$WR3WBQ)%; <=C+-+04a /:4+.(0 2+ a 704/F4)-4.(0 34 /a,-a04 a .(0=< 7(0$+D1;+UD);+VV% 9 60+)-7$WC:4+aZR3[DWB+%;
(4

/:4+Z+[Dg4-/:4$%; 60+)-7$W 704/F4)-aDW%; 2/a)7$WR3WBQ6Z+[%; A <=C+-+04a 704/F4)-4.(0 34 /a,-a04 +)-04 /:4+ =< 7(0$+D0;+UD);+VV% 9 60+)-7$WMZR3[DWB+%; 2/a)7$WR3WBQMZ+[%; A /a./,.$)BQ30,?8?43+,%; 60+)-7$WD0,?,. ?43+,DR#7X)WB30,?8?43+,%; g4-/:$%; 0a3a/+)aD/()2-08a0@(04$0B)%; +)(03+)4$0a3a/+)aB0%; g4-/:$%; A '. M402,. .,/010++ 3.1 8e la tastatur se citesc cuvinte ? iruri de caractere ,. $ se scrie un program care creeaz un arbore de cutare care conine n noduri cuvintele i frecvena lor de apariie. $ se afieze apoi cuvintele n ordine le/icografic cresctoare i frecvena lor de apariie. 3.' $ se implementeze operaia de interclasare a doi arbori de cutare.

3.3 $ se verifice dac operaia de tergere a unui nod dintr:un arbore de cutare este comutativ ? tergerea nodurilor x i y se poate face n orice ordine,. 3.4 $e consider dou liste liniare simplu nlnuite cu c#mpurile de informaie util conin#nd numere ntregi. $ se construiasc o list care conine reuniunea celor dou liste i n care elementele sunt ordonate cresctor. $e va folosi o structur intermediar de tip arbore de cutare. Elementele comune vor apare a o singur dat.

((

3.( $e consider un arbore de cutare care conine elemente cu informaia util de tip ir de caractere. $ se scrie o funcie de cutare inserare i tergere a irului de caractere permi#ndu:se folosirea abloanelor spre e/emplu C pentru orice subir sau M pentru orice caracter. 3.. -nformaiile pentru medicamentele unei farmacii sunt% nume medicament pre cantitate data primirii data e/pirrii. Evidena medicamentelor se ine cu un program care are drept structur de date un arbore de cutare dup nume medicament. $ se scrie programul care e/ecut urmtoarele operaii% creeaz arborele de cutare6 caut un nod dup c#mpul nume medicament i actualizeaz c#mpurile de informaie6 tiprete medicamentele n ordine le/icografic6 elimin un nod identificat prin nume medicament6 creeaz un arbore de cutare cu medicamentele care au data de e/pirare mai vec"e dec#t o dat specificat de la terminal. 3.9 $e va crea un arbore binar de cutare optimal care va avea n noduri cuvintele c"eie folosite n limba5ul +. )recvenele pi i qi se vor da n funcie de folosirea cuvintelor c"eie n programele e/emplu din lucrare.

(.

Lucrarea de laborator nr. .

REPREZENTAREA I TRA ERSAREA !RAFURILOR


1. C()*+),-,. .,/010++ n lucrare sunt prezentate c#teva noiuni legate de grafuri modurile de reprezentare i traversare a lor. 2. C()2+340a*++ -4(04-+/4 2.1. N(*+,)+ 34 @aE1 Jraful orientat sau digraful J N?V E, este perec"ea format din mulimea V de v#rfuri i mulimea E V V de arce. 7n arc este o perec"e ordonat de v#rfuri ?v W, unde v este baza arcului iar W este v#rful arcului. -n ali termeni se spune c W este adiacent lui v. 0 cale este o succesiune de v#rfuri vT1U vT'U X vT2U astfel c e/ist arcele ?vT1U vT'U, ?vT'U vT3U, X ?vT2:1U vT2U, n mulimea arcelor E. Lungimea cii este numrul de arce din cale. *rin convenie calea de la un nod la el nsui are lungimea >. 0 cale este simpl dac toate v#rfurile cu e/cepia primului i ultimului sunt distincte ntre ele. 7n ciclu este o cale de la un v#rf la el nsui. 7n graf orientat etic"etat este un graf orientat n care fiecare arc i Dsau v#rf are o etic"et asociat care poate fi un nume un cost sau o valoare de un tip oarecare. 7n graf orientat este tare cone/ daca oricare ar fi v#rfurile v i W e/ist o cale de la v la W i una de la W la v. 7n graf JR N?VR ER, este subgraf al lui J daca VR V i ER E. $e spune c subgraful indus de VR V este JR N?VR E ?VRVR,,. 7n graf neorientat sau prescurtat graf J N?! L, este perec"ea format din mulimea ! de noduri i mulimea L de muc"ii. 0 muc"ie este o perec"e neordonat ?v W,N?W v, de noduri. 8efiniiile prezentate anterior rm#n valabile i n cazul grafurilor neorientate.

(9

2.2. M(3,0+ 34 04604E4)-a04 At#t grafurile orientate c#t i cele neorientate se reprezint frecvent sub dou forme% matricea de adiacene i listele de adiacene. Astfel pentru graful orientat J N?V E, unde V este mulimea v#rfurilor V NO1 ' X nP matricea de adiacene A va fi definit astfel % 1 dac ?i 5,E > dac ?i 5,E

ATiUT5UN

&atricea de adiacene etic"etat A ?sau matricea costurilor, va fi definit astfel % etic"eta arcului ?i 5, dac ?i 5, E un simbol dac ?i 5,E

ATiUT5UN

&atricea de adiacene este simetric pentru grafuri neorientate i nesimetric pentru cele orientate. &atricea de adiacene este util c#nd se testeaz frecvent prezena sau absena unui arc i este dezavanta5oas c#nd numrul de arce este mult mai mic dec#t n / n. Leprezentarea prin liste de adicene folosete mai bine memoria dar cutarea arcelor este mai greoaie. n aceast reprezentare pentru fiecare nod se pstreaz lista arcelor ctre nodurile adiacente. ntregul graf poate fi reprezentat printr:un tablou inde/at dup noduri fiecare intrare n tablou conin#nd adresa listei nodurilor adiacente. Lista nodurilor adiacente poate fi dinamic sau static. *entru graful din fig.'.'.1 sunt prezentate% - matricea de adiacene n fig.'.'.'.6 - lista de adiacene dinamic n fig.'.'.3.6 : lista de adiacene static n fig.'.'.4.

(;

L-$GA

)ig. '.'.3.Lista de adiacene dinamic.

)ig. '.'.4.Lista de adiacene static.

2.3.EL6.(0a04a C) .10g+?4 E/plorarea n lrgime const n urmtoarele aciuni% se trece ntr:o coad vid nodul de pornire6 se trece e/trage din coad c#te un nod care este prelucrat i se adaug toate nodurile adiacente lui neprelucrate. $e repet acest pas p#n c#nd coada devine vid.

(=

Algoritmul este urmtorul% F(+3 4L6.(0a048.a0g+?4$+)- 2% <= s este nodul de pornire =/ 9 +)- F+E+-a-4ZN0MaLN(3,0+[; /(a3a b; +)- +BN0N(3,0+BFBJ; 7(0$+D0;+UN0N(3,0+;+VV% F+E+-a-4Z+[D0; <=iniializare vector cu zero=< F+E+-a-4Z2[D1;<=se viziteaz nodul s =< 604.,/04aE1 +)7(0?a*+a 3+) 2; +)-0(3,/404 )(3 2 +) /(a3a b; J:+.4$/(a3a b ), 42-4 F+31% 9 4L-0ag4 ,0?1-(0,. )(3 F 3+) /(a3a b; 7(0$7+4/a04 )(3 J a3+a/4)- .,+ F% +7$)(3,. J ), a 7(2- F+E+-a-% 9 F+E+-a-4ZJ[D1; 604.,/04aE1 +)7(0?a*+a 3+) J; +)-0(3,/404 )(3 J C) /(a3a b; A A A 2.'.EL6.(0a04a +) a3>)/+?4 La e/plorarea n ad#ncime se marc"eaz vizitarea nodului iniial dup care se viziteaz n ad#ncime recursiv fiecare nod adiacent. 8up vizitarea tuturor nodurilor ce pot fi atinse din nodul de start parcurgerea se consider nc"eiat. 8ac rm#n noduri nevizitate se alege un nou nod i se repet procedeul de mai sus.

.>

Algoritmul este urmtorul% F(+3 4L6.(0a048a3a)/+?4$+)- 2% <= s este nodul de pornire= < 9 +)- F+E+-a-4ZN0MaLN(3,0+[; 2-+Fa ST; +)- N0N(3,0+B+BFBJ; 7(0$+D0;+UN0N(3,0+;+VV% F+E+-a-4Z+[D0; <=initializare vector cu zero=< F+E+-a-4Z2[D1; <=se incepe cu s =< 604.,/0a04 +)7(0?a-+a 3+) 2; +)-0(3,/404 2 +) 2-+Fa ST; J:+.4$2-+Fa ST ), 42-4 F+31% 9 FD/()*+),-,. )(3,.,+ 3+) F>07,. 2-+F4+; JD,0?1-(0,. )(3 a3+a/4)- .,+ F )4F+E+-a-; +7$4L+2-1 J% 9 F+E+-a-4ZJ[D1; 604.,/04aE1 +)7(0?a*+a 3+) J; 6,)4 64 2-+Fa ST )(3,. J; A 4.24 6(6$ST%; <= 24 P-40g4 )(3,. F 3+) F>07,. 2-+F4+ ST =< A A 3.M402,. .,/010++ 3.1. *entru un graf orientat J N?V E, i VR V s se gseasc subgraful indus JR N?VR ER,.Elementele din V i VR se citesc. 3.'. $ se scrie c#te o funcie de construire pentru un graf J N?V E, conform celor 3 reprezentri posibile. 3.3. *entru un graf reprezentat prin matricea de adiacene s se implementeze algoritmii de traversare prezentai n paragrafele '.3. i '.4.

.1

3.4. $ se scrie o funcie care s verifice dac e/ist o cale ntre dou noduri date ?v W, ale unui graf orientat J N?V E,. 3.(. *entru un graf neorientat dat J N?! L, s se scrie o funcie care s verifice dac graful este cone/ sau nu.

.'

Lucrarea de laborator nr.9

AL!ORITMI PENTRU PRELUCRAREA !RAFURILOR

1.C()*+),-,. .,/010++ -n lucrare sunt prezentai algoritmii lui 8i52stra i )lo3d pentru gsirea cilor de cost minim ntre dou noduri precizate respectiv ntre oricare dou noduri ale unui graf i algoritmii lui Yrus2al i *rim pentru gsirea arborelui de cost minim de acoperire a unui graf. 2.C()2+340a*++ -4(04-+/4 2.1.C1+.4 34 /(2- ?+)+? 3+)-0G,) F>07 $e consider un graf orientat J N?V E, etic"etat n care fiecare arc are ca etic"et un numr nenegativ numit cost. Jraful se reprezint n memorie prin matricea de adiacene etic"etat care se mai numete matricea costurilor. )iind date dou v#rfuri unul surs i unul destinaie se cere gsirea drumului de cost minim de la surs la destinaie. Algoritmul lui 8i52stra de rezolvare a acestei probleme const in urmtoarele% : se pstreaz o mulime $ de v#rfuri 5 V pentru care e/ist cel puin un drum de la surs la 5. -niial $ NOsursaP. : la fiecare pas se adaug la $ un v#rf a crui distan fa de un v#rf din $ este minim. *entru a nregistra cile minime de la surs la fiecare v#rf se utilizeaz un tablou GAGA n care GAGAT2U pstreaz v#rful anterior lui 2 pe calea cea mai scurt. -n descrierea algoritmului se fac urmtoarele notaii% : n numrul v#rfurilor mulimii V6 : mulimea $ se reprezint prin vectorul caracteristic ? elementele sale sunt $TiUN1 dac i$ i $TiUN> dac i$6 : vectorul 8-$GA!GE de n elemente al distanelor minime de la surs la fiecare v#rf6

.3

: matricea de costuri +0$G de n/n elemente% +0$GT i UT5UNcZ> dac ? i 5,E +0$GTiUT5UN> dac i N5 si +0$GTiUT5UNB dac ?i 5,E6 : vectorul GAGA. Algoritmul lui 8i52stra este urmtorul% T347+)4 NMA] c T347+)4 INFINIT c 7.(a- DISTANTEZNMA][; 7.(a- COSTZNMA][ZNMA][; +)- TATAZNMA][; +)- SZNMA][; F(+3 DIdeSTRA$+)- )B+)- 2,02a% 9 <= ) 42-4 ),?10,. 34 F>07,0+;2,02a 42-4 F>07,. 2,021 =< +)- + B\BKB6a2; <=+)+*+a.+E10+=< 7(0 $+D1;+UD);+VV% 9 SZ+[D0; DISTANTEZ+[DCOSTZ2,02a[Z+[; +7 $DISTANTEZ+[UINFINIT% TATAZ+[D2,02a; 4.24 TATAZ+[D0; A <=+)-0(3,/404 2,02a +) S=< SZ2,02a[D1; TATAZ2,02a[D0; DISTANTEZ2,02a[D0; <=/()2-0,+04 F4/-(0+ DISTANTE 2+ TATA =< 7(0 $6a2D1;6a2UD)G1;6a2VV% 9 g124P-4 F>07,. K )424.4/-a- /, DISTANTEZK[ ?+)+?; +7 $?+)+?,. a)-40+(0 g12+-DDINFINIT% 04-,0); SZK[D1; <= 24 a3a,g1 K .a ?,.*+?4a S =< 7(0 $\D1;\UD);\VV% +7 $$SZ\[D0% QQ $DISTANTEZK[VCOSTZK[ Z\[UDISTANTEZ\[%% 9

.4

DISTANTEZ\[DDISTANTEZK[VCOSTZK[ Z\[; TATAZ\[DK; A A A Vectorul GAGA conine v#rfurile accesibile din v#rfurile sursa. El permite reconstruirea drumurilor de la v#rful surs la oricare v#rf accesibil. *entru v#rfurile inaccesibile din v#rful sursa vom avea $TiUN> i 8-$GA!GETiUN-!)-!-G. 2.2.C1+.4 34 /(2- ?+)+? 3+) (0+/a04 F>07 Algoritmul prezentat la '.1. poate fi repetat din nodurile unui graf. Acest lucru permite calculul unui tablou al drumurilor minime ntre toate perec"ile de v#rfuri ale grafului. -n continuare se prezint un algoritm mai simplu algoritmul lui )lo3d. Algoritmul lui )lo3d const n gsirea costurilor minime ntre oricare dou v#rfuri i 5V. Aceste costuri minime se pstreaz n matricea A. &atricea A este iniial egal cu matricea costurilor. +alculul distanelor minime se face n n iteraii n fiind numrul v#rfurilor. La iteraia 2 ATiUT5U va avea ca valoare cea mai mic distan intre i si 5 pe ci care nu conin v#rfuri peste 2 ?e/cept#nd capetele i si 5,. $e utilizeaz formula urmtoare% Ai5?2,N min ?Ai5?2:1, Ai2?2:1,BA25?2:1,,. 8eoarece Ai2?2,NAi2?2:1, i A25?2,NA25?2:1, se poate utiliza o singur copie a matricii A. Algoritmul lui )lo3d este urmtorul% T347+)4 NMA] c 7.(a- CZNMA][ZNMA][; <=?a-0+/4a /(2-,0+.(0=< 7.(a- AZNMA][ZNMA][; F(+3 FLOfD$+)- )% 9 +)- +B\BK; 7(0 $+D1;+UD);+VV% 7(0 $\D1;\UD);\VV% AZ+[Z\[DCZ+[Z\[;<=+)+*+a.+Ea04 A=<
.(

7(0 $+D1;+UD);+VV% AZ+[Z+[D0; <=+-40a*++.4=< 7(0 $KD1;KUD);KVV% 7(0 $+D1;+UD);+VV% <<64)-0, -(a-4 .+)++.4 7(0 $\D1;\UD);\VV% <<64)-0, -(a-4 /(.(a)4.4 +7 $AZ+[ZK[VAZK[Z\[UAZ+[Z\[% AZ+[Z\[DAZ+[ZK[VAZK[Z\[; A *entru a pstra cile minime se utilizeaz un tablou adiional * unde *TiUT5U ine acel v#rf 2 ce a condus la distana minim ATiUT5U. 8ac *TiU T5UNN> atunci arcul ?i 5, este calea minim ntre i si 5. *entru a afia v#rfurile intermediare aflate pe calea cea mai scurt ntre i si 5 se poate proceda conform algoritmului urmtor% F(+3 CALE$+)- +B +)- \% 9 +)- K; +7 $KID0%9 CALE$+BK%; 2/0+4 )(3,. K; CALE$KB\%; A A 2.3.A0@(04.4 34 a/(640+04 34 /(2- ?+)+? )ie J N?! L, un graf neorientat cone/. )iecrei muc"ii ?i 5,L i se asociaz un cost cTiUT5UZ>. *roblema const n a determina un graf parial cone/ A N ?! G, astfel nc#t suma costurilor muc"iilor din G s fie minim. $e observ imediat c acest graf parial este c"iar arborele de acoperire. Algoritmul lui *rim const n urmtoarele% : se pornete cu o submulime [ format din nodul de plecare i mulimea G vid6 : la fiecare iteraie se selecteaz muc"ia ?W u, cu cel mai mic cost W [ i u!:[. $e adaug u la [ i ?W u, la G. -n final [ va conine toate nodurile din ! iar G va conine muc"iile arborelui de acoperire minimal.

..

F(+3 a.g(0+-?8PRIM$+)- )% 9 gD91A; <<24 6.4a/1 3+) )(3,. 1 TD9 A; <<?,.*+?4a F+31 J:+.4 $gIDN% 9 24.4/-4aE1 ?,/:+a $JB,% 34 /(2- ?+)+? /, J g P+ , NGg; a3a,g1 , .a g; a3a,g1 $,BJ% .a T; A A 7n alt algoritm aparine lui Yrus2al. -n acest caz muc"iile sunt ordonate cresctor dup cost. Arborele de acoperire va conine n:1 muc"ii. La fiecare pas se alege muc"ia de cost minim care nu formeaz ciclu cu muc"iile aflate de5a n G. Acest algoritm are urmtoarea descriere% F(+3 a.g(0+-?8e0,2Ka.$+)- )% 9 TD9A; J:+.4 $T ), 42-4 a0@(04 34 a/(640+04% 9 24.4/-4aE1 ?,/:+a $JB,% 34 /(2- ?+)+? 3+) R; P-40g4 $JB,% 3+) R; +7 $ $JB,% ), /044aE1 ,) /+/., +) T% a3a,g1 $JB,% .a T; A A *roblema mai dificil n algoritm const n verificarea dac o muc"ie creeaz ciclu in G. 3.M402,. .,/010++ 3.1.$ se implemeteze algoritmul lui 8i52stra de gsire a cilor de cost minim dintr:un v#rf al unui graf orientat. $e va construi i afia

.9

arborele av#nd ca rdcin v#rful surs. +are este performanta algoritmului n ceea ce privete timpul de calculM 3.'.$ se implementeze algoritmul lui )lo3d de gsire a cilor de cost minim din oricare v#rf al unui graf neorientat. $e vor afia cile de cost minim ntre dou v#rfuri date de la tastatur. +are este performana algoritmului n ceea ce privete timpul de calculM 3.3..$ se implementeze algoritmul lui *rim de gsire a arborelui de acoperire a unui graf neorientat. 3.4.$ se implementeze algoritmul lui Yrus2al de gsire a arborelui de acoperire a unui graf neorientat. $ se fac o comparaie n ceea ce privete timpul de calcul ntre algoritmul lui Yrus2al i cel al lui *rim.

.;

Lucrarea de laborator nr. ; TABELE DE DISPERSIE 1. C()*+),-,. .,/010++ n lucrare sunt prezentate principalele operaii asupra unei tabele de dispersie% construirea tabelei de dispersie inserarea unei nregistrri cutarea unei nregistrri afiarea nregistrrilor. 8e asemenea se fac c#teva consideraii asupra alegerii funciei de dispersie. 2. C()2+340a*++ -4(04-+/4 2.1.T+6,0+ 34 -a@4.4 Gabelul este o colecie de elemente de acelai tip identificabile prin c"ei. Elementele sale se mai numesc nregistrri. Gabelele pot fi % : 7+L4 cu un numr de nregistrri cunoscut dinainte i ordonate6 : 3+)a?+/4 Ta@4.4.4 3+)a?+/4 pot fi organizate sub form de% : list dinamic simplu sau dublu nlnuit6 : arbore de cutare6 : tabele de dispersie. 8in categoria -a@4.4.(0 7+L4 face parte tabelul de cuvinte rezervate dintr:un limba5 de programare. Acesta este organizat ca un tablou de pointeri spre cuvintele rezervate introduse n ordine alfabetic. +utarea utilizat este cea binar. Gabelele dinamice organizate sub form de liste au dezavanta5ul cutrii liniare. Arborele de cutare reduce timpul de cutare. n cazul n care c"eile sunt alfanumerice comparaiile sunt mari consumatoare de timp. *entru astfel de situaii cele mai potrivite sunt tabelele de dispersie. 2.2.F,)/*+a 34 3+26402+4 $ :a2:+)g % )uncia de dispersie este funcia care transform o c"eie ntr:un numr natural numit cod de dispersie%
.=

7` e GH Y unde Y este mulimea c"eilor iar K este o mulime de numere naturale. )uncia 7 nu este in5ectiv .8ou c"ei pentru care 7$K1%D7$K2) se spune c intr n coliziune iar nregistrrile respective se numesc sinonime. Asupra lui 7 se pun dou condiii% : valoarea ei pentru un 2 Y s rezulte c#t mai simplu i rapid6 : s minimizeze numrul de coliziuni. 7n e/emplu de funcie de dispersie este urmtoarea% 7$K%D $K% ?(3 M unde (k) este o funcie care transform c"eia ntr:un numr natural iar & este un numr natural recomandat a fi prim. )uncia $K) se alege n funcie de natura c"eilor. 8ac ele sunt numerice atunci $K%DK. n cazul c"eilor alfanumerice cea mai simpl funcie $K) este suma codurilor A$+-- ale caracterelor din componena lor6 ca urmare funcia 7 de calcul a dispersiei este urmtoarea% T347+)4 Mc +)- 7$/:a0 =K45% 9 +)- +B2,?a; 2,?aD0; 7(0$+D0;+U.4)g-:$K45%;+VV% 2,?aD2,?aV=$K45V+%; 04-,0) 2,?aRM; A

9>

2.3.Ta@4.a 34 3+26402+4 Lezolvarea coliziunilor se face astfel% toate nregistrrile pentru care c"eile intr n coliziune sunt inserate ntr:o list simplu nlnuit. Vor e/ista astfel mai multe liste fiecare conin#nd nregistrri cu acelai cod de dispersie. *ointerii spre primul element din fiecare list se pstreaz ntr:un tablou la inde/ul egal cu codul de dispersie .+a urmare modelul unei tabele de dispersie este urmtorul%

7n nod al listei are structura urmtoare% -564347 2-0,/- -+68)(3 9 /:a0 =/:4+4; +)7(0?a*+4 2-0,/- -+68)(3 =,0?; ATIP8NOD; Gabloul KG este declarat astfel% TIP8NOD =YTZM[;

91

-niial el conine pointerii nuli% 7(0$+D0;+UM;+VV% YTZ+[D0; +utarea ntr:o tabel de dispersie a unei nregistrri av#nd pointerul K45 la c"eia sa se face astfel% : se calculeaz codul de dispersie% :D7$K45%; : se caut nregistrarea av#nd pointerul K45 la c"eia sa din lista av#nd pointerul spre primul nod KGT"U. +utarea este liniar% 6DYT$:%; J:+.4$6ID0% 9 +7$2-0/?6$K45B6GH/:4+4%DD0% 04-,0) 6; 6D6GH,0?; A 04-,0) 0; -nserarea unei nregistrri ntr:o tabel de dispersie se face astfel% : se construiete nodul de pointer 6B care va conine informaia util i pointerul la c"eia nregistrrii% 6D$TIP8NOD=%?a..(/$2+E4(7$TIP8NOD%%; /+-+048)(3$6%; : se determin codul de dispersie al nregistrrii% :D7$6GH/:4+4%; : dac este prima nregistrare cu codul respectiv adresa sa este depus n tabelul KG% +7$YTZ:[DD0%9 YTZ:[D6; 6GH,0?D0; A

9'

n caz contrar se verific dac nu cumva mai e/ist o nregistrare cu c"eia respectiv. n caz afirmativ se face o prelucrare a nregistrrii e/istente ? tergere actualizare, sau este o eroare ?c"eie dubl ,. 8ac nu e/ist o nregistrare de c"eia respectiv se insereaz n list ca prim element nodul de adres 6` MD/a,-a04$6GH/:4+4%; +7$MDD(%9 <= ), 4L+2-a ( C)04g+2-0a04 34 /:4+a 04264/-+Fa =< 6GH,0?DYTZ:[; YTZ:[D6; A 4.24 604.,/0a04$6BM%;<= /:4+4 3,@.a =< +onstruirea tabelei de dispersie se face prin inserarea repetat a nodurilor. 2.'.L+2-a04a -,-,0(0 C)04g+2-010+.(0 Listarea tuturor nregistrrilor pe coduri se face simplu conform algoritmului urmtor% 7(0$+D0;+UM;+VV% 9 +7$YTZ+[ID0% 9 60+)-7$NX)I)04g+2-010+ aFa)3 /(3,. 34 3+26402+4DR3X)OB+%; 6DYTZ+[; J:+.4$6ID0%9 a7+2a04$6%; 6D6GH,0?; A A 3.M402,. .,/010++ 3.1. $e va crea o tabel fi/ cu cuvintele rezervate din limba5ul +. $e va scrie apoi o funcie de cutare binar a unui cuv#nt n tabel.

93

3.'. $ se implementeze algoritmii prezentai afereni unei tabele de dispersie. nregistrarea va conine datele aferente unui student. +"eia va fi numele i prenumele studentului. $criei n plus fa de cele prezentate o funcie de tergere a unei nregistrri de c"eie dat. 3.3. $criei un program care s tipreasc identificatorii dintr:o tabel de dispersie n ordine alfabetic. 3.4. $ se afieze frecvena de apariie a literelor dintr:un te/t utiliz#nd o tabel de dispersie.

94

Lucrarea de laborator nr. =

METODE !ENERALE DE ELABORARE A AL!ORITMILOR $I%


1.C()*+),-,. .,/010++ n lucrare sunt prezentate principiile metodelor Jreed3 i bac2trac2ing variantele lor de aplicare i e/emple. ' 2.C()2+340a*++ -4(04-+/4 2.1.M4-(3a !04435. &etoda Jreed3 se aplic urmtoarelor tipuri de probleme% 8intr:o mulime A de n elemente se cere determinarea unei submulimi I care s ndeplineasc anumite condiii pentru a fi acceptat. !umele metodei vine de la urmtorul fapt% se alege pe r#nd c#te un element din mulimea A i eventual se introduce n soluie. $e menioneaz faptul c o dat ce un element a fost ales el rm#ne n soluia final iar dac un element a fost e/clus el nu va mai putea fi reconsiderat pentru includere n soluie. &etoda determin o singur soluie. E/ist dou variante de rezolvare a unei probleme cu a5utorul metodei Jreed3% a, Varianta -

$e pleac de la mulimea I vid. $e alege din mulimea A un element neales n paii precedeni. $e cerceteaz dac adugarea la soluia parial I conduce la o soluie posibil. n caz afirmativ se adaug elementul respectiv la I.

9(

8escrierea variantei este urmtoarea% T347+)4 ?aL ... !REEDf1$+)- AZ?aL[B +)- )B +)- BZ?aL[B +)- =K% <= A 42-4 ?,.*+?4a 34 ) 4.4?4)-4 3a-4; B 42-4 ?,.*+?4a 4L-0a21 34 K 4.4?4)-4 =< 9 +)- LB FB +; =K D 0; <= M,.*+?4a B 42-4 F+31 =< 7(0$+ D 0; +U); +VV% 9 ALE!E $AB )B +B L%; <= 24 a.4g4 4.4?4)-,. L 3+)-04 4.4?4)-4.4 AZ+[B AZ+V1[B ... AZ)G1[ P+ 24 a3,/4 64 6(E+*+a + 60+) +)-402/:+?@a04 =< POSIBIL $BB LB F%; <= FD1 3a/1 L 60+) a31,ga04 .a B /()3,/4 .a 2(.,*+4 6(2+@+.1 P+ FD0 C) /aE /()-0a0 =< +7$FDD1% ADAU!A$BB LB =K%; <= 24 a3a,g1 L .a BB K +)3+/>)3 ),?10,. 34 4.4?4)-4 3+) B =< A A n varianta - a metodei funcia ALEJE stabilete criteriul care duce la soluia final. b, Varianta -$e stabilete de la nceput ordinea n care trebuie considerate elementele mulimii A. Apoi se ia pe r#nd c#te un element n ordinea stabilit i se verific dac prin adugare la soluia parial I anterior construit se a5unge la o soluie posibil. n caz afirmativ se face adugarea.

9.

8escrierea variantei este urmtoarea% T347+)4 ?aL ... !REEDf2$+)- AZ?aL[B +)- )B +)- BZ?aL[B +)- =K% <= A 42-4 ?,.*+?4a 34 ) 4.4?4)-4 3a-4; B 42-4 ?,.*+?4a 4L-0a21 34 K 4.4?4)-4 =< 9 +)- LB FB +; =K D 0; <= 2(.,*+a F+31 =< PRELUCRARE$AB )%; <= 04a0a)\a04 F4/-(0 A =< 7(0$+ D 0; +U); +VV% 9 LDAZ+[; POSIBIL $BB LB F%; <= FD1 3a/1 60+) a31,ga04a .,+ L .a B 24 a\,)g4 .a ( 2(.,*+4 6(2+@+.1 P+ FD0 C) /aE /()-0a0 =< +7$FDD1% -:4) ADAU!A$BB LB =K%; <= 24 a3a,g1 L .a ?,.*+?4a B =< A A 8ificultatea elaborrii funciei *LEL7+LALE este identic cu cea a funciei ALEJE din varianta precedent. EL4?6.,% 8eterminarea arborelui de acoperire de cost minim prin algoritmul lui *rim. *roblema a fost enunat n cadrul lucrrii nr.9 paragraful '.3. Algoritmul const n urmtoarele% a, -niial se ia arborele ce conine un singur v#rf. $:a demonstrat c nu are importan cu care v#rf se ncepe6 ca urmare se ia v#rful 1. &ulimea arcelor este vid. b, $e alege arcul de cost minim care are un v#rf n arborele de5a construit iar cellalt v#rf nu aparine arborelui. $e repet n total acest pas de n:1 ori.

99

*entru evitarea parcurgerii tuturor arcelor grafului la fiecare pas se ia vectorul v av#nd n componente definit astfel% > dac v#rful i aparine arborelui de5a construit 7TiU = 2 dac v#rful i nu aparine arborelui de5a construit6 2 este v#rful arborelui de5a construit a. . muc"ia ?i 2, este de cost minim. -niial vT1UN> i vT'UNvT3UN...NvTnUN1 adic iniial arborele este A N?O1P \,. <=A.g(0+-?,. .,+ P0+? =< T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T347+)4 )?aL 10 T347+)4 MA] 0L&777 F(+3 60+?$+)- )B+)- /Z)?aL[Z)?aL[B +)- ?,/:++Z)?aL[Z2[B+)- =/(2-% <= ) G),?10,. )(3,0+.(0; / G ?a-0+/4a /(2-,0+.(0; ?,/:++G?,/:++.4 a0@(04.,+ 34 a/(640+04 34 /(2- ?+)+?; /(2-G/(2-,. a0@(04.,+ 34 a/(640+04 34 /(2- ?+)+? =< 9 +)- FZ)?aL[; <= FZ+[D0 3a/1 + a6a0*+)4 a0@(04.,+; FZ+[D\ 3a/1 + ), a6a0*+)4 a0@(04.,+. \ 42-4 )(3,. 3+) a0@(04 a.+. ?,/:+a $+B\% 42-4 34 /(2- ?+)+? =< +)- +B\BKB?+)+?; =/(2-D0; FZ1[D0; 7(0$+D2;+UD);+VV% FZ+[D1; <=a0@(04.4 42-4 $91AB9A% =< <= 34-40?+)a04a /4.(0 )G1 ?,/:++ =< 7(0$+D1;+UD)G1;+VV% 9 <=34-40?+)a04a ?,/:+4+ /a04 24 a3a,g1 a0@(04.,+ =< ?+)+?D0L&777; 7(0$KD1;KUD);KVV% +7$FZK[ID0% +7$/ZK[ZFZK[[ U ?+)+?% 9 \DK;
9;

?+)+?D/ZK[ZFZK[[; A ?,/:++Z+[Z0[DFZ\[; ?,/:++Z+[Z1[D\; =/(2-D=/(2-V/Z\[ZFZ\[[; <=04a/-,a.+Ea04 F4/-(0 F =< FZ\[D0; 7(0$KD1;KUD);KVV% +7$FZK[ID0% +7$/ZK[ZFZK[[H/ZK[Z\[% FZK[D\; A A F(+3 ?a+)$% 9 +)- );<=)0. )(3,0+.(0 =< +)- /Z)?aL[Z)?aL[; <=?a-0+/4a /(2-,0+.(0 =< +)- ?,/:++Z)?aL[Z2[;<=?,/:++.4 a0@(04.,+=< +)- +B\BKB/(2-; 60+)-7$WX)N0. )(3,0+.(0DW%; 2/a)7$WR3WBQ)%; 7(0$+D1;+UD);+VV% 7(0$\D1;\UD);\VV% /Z+[Z\[DMA]; <=/+-+04a /(2-,0+.(0$),?404 C)-04g+% =< 7(0$+D1;+U);+VV% 9 3( 9 60+)-7$WX)I)-0(3,/4*+ 0 64)-0, -40?+)a04 2a, )(3,. a3+a/4)-X)W%; 60+)-7$W /, R23 H /a 4. DWB+%; 2/a)7$WR3WBQ\%; +7$\H0% 9 60+)-7$WX)C(2-,. /ZR3[ZR3[DWB+B\%; 2/a)7$WR3WBQ/Z+[Z\[%; /Z\[Z+[D/Z+[Z\[; <=?a-0+/4a 42-4 2+?4-0+/a =< A A
9=

J:+.4$\H0%; A; 60+?$)B/B?,/:++BQ/(2-%; 60+)-7$WX)COSTUL ARBORELUI D R3WB/(2-%; 60+)-7$WX)MUCYIILE ARBORELUI COSTUL MUCYIEIX)W%; 7(0$+D1;+UD)G1;+VV% 60+)-7$W R23 G R23 R103X)WB?,/:++Z+[Z0[B?,/:++Z+[Z1[B /Z?,/:++Z+[Z0[[Z?,/:++Z+[Z1[[%; g4-/:$%; A 2." M4-(3a @a/K-0a/K+)g &etoda bac2trac2ing se aplic algoritmilor pentru rezolvarea urmtoarelor tipuri de probleme% )iind date n mulimi $1 $' ... $n fiecare av#nd un numr nrsi de elemente se cere gsirea elementelor vectorului ] N?/1 /' ... /n, ^ $N$1/$'/X$n astfel nc#t s fie ndeplinit o anumit relaie _?/ 1 /' X /n, ntre elementele sale. Lelaia _?/1 /' X /n, se numete relaie intern mulimea $N$1/$'/X$n se numete spaiul soluiilor posibile iar vectorul ] se numete soluia rezultat. &etoda bac2trac2ing determin toate soluiile rezultat ale problemei. 8intre acestea se poate alege una care ndeplinete n plus o alt condiie. &etoda bac2trac2ing elimin generarea tuturor celor

nr s
i= 1

posibiliti din spaiul soluiilor posibile. n acest scop la generarea vectorului ] se respect urmtoarele condiii% a, /2 primete valori numai dac /1 /' ... /2:1 au primit de5a valori6 b, dup ce se atribuie o valoare lui /2 se verific relaia numit de continuare _`?/1 /' X /2, care stabilete situaia n care are sens s se treac la calculul lui /2B1. !endeplinirea condiiei _` e/prim faptul c oricum am alege /2B1 /2B' ... /n nu se a5unge la soluia rezultat. n caz de nendeplinire a condiiei _`?/1 /' X /2, se alege o nou valoare pentru /2 ^ $2 i se reia verificarea condiiei _`. 8ac mulimea de valori /2 s:a epuizat se revine la alegerea altei valori pentru / 2:1 .a.m.d. Aceast micorare a lui 2 d numele metodei ilustr#nd faptul c atunci c#nd nu se
;>

poate avansa se urmrete napoi secvena curent din soluia posibil. ntre condiia intern i cea de continuare e/ist o str#ns legtur. $tabilirea optim a condiiilor de continuare reduce mult numrul de calcule. Algoritmul bac2trac2ing este redat sub form nerecursiv astfel% T347+)4 )?aL ... @a/K-0a/K+)g8)404/,02+F$+)- )% <= 24 /()2+3401 g.(@a.4 ?,.*+?+.4 S+ P+ ),?10,. .(0 34 4.4?4)-4 )02+ =< 9 +)- LZ)?aL[; +)- KB F; KD1; J:+.4$KH0% 9 FD0; J:+.4 $$?a+ 4L+2-1 ( Fa.(a04 h i SK )4-42-a-1% Q $FDD0%% 9 LZK[Dh; +7 $_$LZ1[B LZ2[B ...B LZK[% 42-4 C)346.+)+-1% FD1; A +7 $FDD0% KDKG1; 4.24 +7 $KDD)% a7+Pa04 $LB )%; <= a7+Pa04a 2a, 4F4)-,a. 604.,/0a04a 2(.,*+4+ =< 4.24 KDKV1; A A $ub form recursiv algoritmul bac2trac2ing poate fi redat astfel% T347+)4 )?aL ... +)- LZ)?aL[; <= 24 /()2+3401 g.(@a.4 )B ?,.*+?+.4 S + P+ ),?10,. .(0 34 4.4?4)-4 )02+ =< @a/K-0a/K+)g804/,02+F$+)- K% 9 +)- \; 7(0 $\D1;\UD)02K;\VV% 9
;1

LZK[DSKZ\[; <= a. \G.4a 4.4?4)- 3+) ?,..*+?4a SK =< +7 $_$LZ1[B LZ2[B ...B LZK[% 42-4 C)346.+)+-1% +7 $KU)% @a/K-0a/K+)g804/,02+F$KV1%; 4.24 a7+Pa04 $LB )%; <= a7+Pa04a 2a, 4F4)-,a. 604.,/0a04a 2(.,*+4+ =< A A Apelul se face% @a/K-0a/K+)g804/,02+F$1%; EL4?6.,` *roblema damelor de a". $e cere gsirea tuturor soluiilor de aezare pe tabla de a" de n linii i n coloane a n dame astfel nc#t ele s nu se atace. $e consider c ele se atac dac sunt pe aceeai linie coloan sau diagonal. ntruc#t pe o linie se gsete o singur dam soluia se prezint sub form de vector / N?/1 /' ... /n, unde /i reprezint coloana pe care se afl dama n linia i. +ondiiile de continuare sunt% a, dou dame nu se pot afla pe aceeai coloan adic% ][ i ] < > ][ 5] pentru i < > 5 6 b, dou dame nu se pot afla pe aceeai diagonal adic% 2 : i < > ][ 2 ] ][ i ] pentru i = 1 ' ... 2 : 1. Varianta nerecursiv este urmtoarea% T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T+)/.,34 U2-3.+@.:H T347+)4 )?aL 10 F(+3 3a?48)404/,02+F$+)- )% <= 7,)/*+a g124P-4 -(a-4 aP4E10+.4 6(2+@+.4 64 ( -a@.1 34 Pa: 34 )=) 61-0a-4 64)-0, /a ) 3a?4 21 ), 24 a-a/4 =< 9 +)- LZ)?aL[; +)- F; +)- +B\BKB)082(.,-+4;

;'

)082(.,-+4D0; KD1;LZK[D0; J:+.4$KH0% 9 <=g12+04a ,)4+ aP4E10+ /(04/-4 C) .+)+a K =< FD0; J:+.4$$FDD0%Q$LZK[UD)G1%% 9 LZK[VV; FD1;+D1; J:+.4$$+UDKG1%Q$FDD1%% +7$$LZK[DDLZ+[%_$a@2$KG+%DDa@2$LZK[GLZ+[%%% FD0; 4.24 +VV; A +7$FDD0% KDKG1; 4.24 9 +7$KDD)%9 <=a7+Pa04a -a@.4+ =< )082(.,-+4VV; 60+)-7$WX)SOLUTIA )0. R3X)WB)082(.,-+4%; 7(0$+D1;+UD);+VV% 9 7(0$\D1;\UD);\VV% +7 $LZ+[DD\% 60+)-7$W1W%; 4.24 60+)-7$W0W%; 60+)-7$WX)W%; A; g4-/:$%; A 4.24 9 KVV; LZK[D0; A; A A A F(+3 ?a+)$F(+3% 9 +)- );
;3

60+)-7$WX)O03+),. -a@.4+ 34 2a:DW%; 2/a)7$WR3WBQ)%; 3a?48)404/,02+F$)%; 60+)-7$WX)SFARSITW%; A Varianta recursiv este urmtoarea% T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T+)/.,34 U2-3.+@.:H T347+)4 )?aL 10 <= a0+a)-a 04/,02+F1 a 60(@.4?4+ 3a?4.(0 =< +)- ); <=3+?4)2+,)4a $(03+),.% -a@.4+ 34 Pa: =< +)- )082(.,-+4; +)- LZ)?aL[; +)- FI$+)- K% 9 <=-42-4aE1 /()3+*++.4 34 /()-+),a04 =< +)- 6; 7(0$6D1;6UDKG1;6VV% +7$$LZK[DDLZ6[% _ $a@2$KG6% DD a@2$LZK[GLZ6[%%% 04-,0) 0; 04-,0) 1; A F(+3 @a/K804/,02+F$+)- K% 9 +)- +B\B6; 7(0$\D1;\UD);\VV% 9 LZK[D\; +7$FI$K%DD1% +7$KU)% @a/K804/,02+F$KV1%; 4.24 9 <=-+610+04a 2(.,*+4+ =< )082(.,-+4VV; 60+)-7$WX)SOLUTIA )0.R3X)WB)082(.,-+4%; 7(0$+D1;+UD);+VV% 9 7(0$6D1;6UD);6VV%

;4

+7$LZ+[DD6% 60+)-7$W1W%; 4.24 60+)-7$W0W%; 60+)-7$WX)W%; A; g4-/:$%; A A A F(+3 ?a+)$F(+3% 9 60+)-7$WX)O03+),. -a@.4+ 34 2a: )DW%; 2/a)7$WR3WBQ)%; )082(.,-+4D0; @a/K804/,02+F$1%; 60+)-7$WX)SFARSITX)W%; A 3. M402,. .,/010++ 7tiliz#nd metoda Jreed3 s se rezolve urmtoarele probleme% 3.1 $e dau m vectori V1 V' ... Vm care conin n1 n' ... nm elemente ordonate cresctor dup o c"eie. $e interclaseaz vectorii dai obin#ndu:se un vector de lungime n1Bn'B...Bnm elemente ordonate cresctor. $e tie c interclasarea a doi vectori care conin n1 respectiv n' elemente necesit un timp proporional cu suma lungimilor lor. $ se determine ordinea optim n care trebuie efectuat interclasarea tuturor vectorilor dai. 3.' *roblema rucsacului. Jreutatea ma/im care poate fi transportat cu un rucsac este J. 8#ndu:se n materiale fiecare av#nd greutatea m i costul + pe unitatea de greutate s se gseasc ce cantitate din fiecare material s fie introdus n rucsac pentru ca s se obin c#tigul ma/im. $e vor deosebi dou cazuri% a, un material poate fi luat numai n ntregime6 b, se poate lua o fraciune din material. 3.3 *roblema activitilor. E/ist o mulime $N1 ' 3 ... n de n activiti care doresc s foloseasc o aceeai resurs ?de e/emplu o sal de clas,. Aceast resurs poate fi folosit de o singur activitate la un anumit moment de timp. )iecare activitate i are un timp de pornire tpi i un timp de

;(

terminare tfi ?tpi Q tfi,. 8ac este selectat activitatea i ea se desfoar pe durata Ttpi tfi,. $punem c activitile i i 5 sunt compatibile dac duratele lor nu se intersecteaz1. $ se selecteze o mulime ma/imal de activiti mutual compatibile. 7tiliz#nd metoda bac2trac2ing s se rezolve urmtoarele probleme% 3.4.+olorarea grafurilor. )iind dat un graf neorientat J N?] a, unde ] este mulimea format din n noduri iar a este mulimea muc"iilor i un numr de m culori se cere s se determine toate colorrile posibile ale nodurilor grafului folosind cele m culori astfel nc#t oricare dou noduri adiacente s fie colorate n mod diferit. 3.(.*roblema ciclului "amiltonian. $e d un graf cone/ neorientat J N?] a, prin matricea costurilor pozitive. $e cere s se determine ciclul "amiltonian de cost minim ?ciclul "amiltonian este un ciclu care trece prin toate nodurile,. 3... )iind dat o matrice A de n n elemente numere naturale s se determine cea mai mic sum de n elemente luate din linii diferite i coloane diferite. 3.9.)iind date o tabl de a" de dimensiune n n ptrate i un cal plasat n ptratul din st#nga sus al tablei s se afieze toate posibilitile de mutare a calului astfel nc#t s treac o singur dat prin fiecare ptrat al tablei. 3.;.7n labirint este codificat printr:o matrice de n m elemente ale crui culoare sunt reprezentate prin elemente egale cu 1 situate n poziii consecutive pe o aceeai linie sau coloan celelalte elemente fiind >. 0 persoan se gsete n poziia ?i 5, din interiorul labirintului. $e cere afiarea tuturor traseelor de ieire din labirint care nu trec de mai multe ori prin acelai loc. 3.=.$e consider o mulime format din n elemente numere ntregi. $ se genereze toate submulimile acestei mulimi av#nd proprietatea c suma elementelor lor este egal cu $.

;.

3.1>.$e dau dou mulimi de numere ntregi A i I. $ se genereze toate funciile f % A B . Lucrarea de laborator nr. 1>.

METODE !ENERALE DE ELABORARE A AL!ORITMILOR $II% 1. C()*+),-,. .,/010++


n lucrare se prezint esena metodelor 1Iranc" and Iound4 ?ramific i mrginete, i a metodei 18ivide et -mpera4. 2 2. C()2+340a*++ -4(04-+/4 2.1. M4-(3a NB0a)/: a)3 B(,)3O &etoda 1Iranc" and Iound4 este nrudit cu metoda bac2trac2ing diferind ordinea de parcurgere a spaiului strilor i a modului de eliminare a subarborilor ce nu pot conduce la rezultat. &etoda 1Iranc" and Iound4 se aplic urmtoarelor tipuri de probleme% $e cunoate starea iniial s> i starea final sf ?starea rezultat,. 8in starea s> se a5unge n starea sf printr:o serie de decizii. !e intereseaz ca numrul strilor intermediare s fie minim. *resupunem c strile reprezint nodurile unui graf iar arcele indic faptul c o decizie a transformat starea s i n starea siB1. $e introduc restricii ca s nu e/iste mai multe noduri n graf cu aceeai stare deci graful s nu fie infinit. Astfel graful se reduce la un arbore. Arborele se genereaz p#n la prima apariie a nodului final. E/ist posibilitatea parcurgerii grafului n ad#ncime sau n lime ns timpul de a5ungere la rezultat este mare. 0 strategie superioar din punct de vedere al timpului de calcul se obine aleg#nd dintre descendenii v#rfului curent pe cel mai aproape de starea final. *entru a putea aprecia deprtarea fa de starea final se va folosi o funcie de cost c definit pe mulimea v#rfurilor din arbore. Av#nd valorile acestei funcii vom alege dintre v#rfurile descendente ale v#rfului curent pe cel cu cost minim. 0 astfel de parcurgere a grafului se numete 1Least +ost4 sau prescurtat 1L+4.

;9

)uncia / ideal pentru a msura distana de la v#rf la v#rful final este%


niv x 1 c ? x , = + 3 este v#rf terminal min c?3, subarborelui de rdcin /}

rezultat6

dac / este v#rf terminal v#rful rezultat dac / nu este v#rf rezultat )uncia / definit mai sus nu este aplicabil ntruc#t calculul ei presupune parcurgerea tuturor v#rfurilor arborelui de fapt urmrindu:se tocmai evitarea acestui lucru. $e observ c dac totui funcia / este calculat atunci cobor#rea n arbore la v#rful rezultat se face pe un drum de5a format din v#rfurile / ce au ataat o valoare /$L% egal cu /$0131/+)1,. !eput#nd lucra cu funcia / atunci se definete o apro/imare a sa cu una din urmtoarele dou variante% b? x , = nivelul v#rfului / B distana dintre starea curent i a, c starea final6 b? x , = costul strii printe B distana dintre starea curent i b, c starea final. !ivelul este numrul deciziilor prin care s:a a5uns la configuraia curent. $tabilirea funciei 1distan4 este specific fiecrei probleme. 8e e/emplu n cazul 5ocului *EL$*-+0 ?problema 3.1. din lucrare, distana este numrul de plcue care nu sunt la locul potrivit. )uncia care descrie metoda 1Iranc" and Iound4 este dat mai 5os. Lista L conine v#rfurile care memoreaz configuraia strilor. *entru v#rful i luat n considerare se memoreaz tatl su n vectorul GAGA permi#nd ca odat a5uni n v#rful rezultat s se poat reface drumul de la rdcin la v#rful rezultat. LA8 este pointerul la v#rful ce conine starea iniial.
;;

TIP8NOD =RAD; RADD$TIP8NOD =%?a..(/$2+E4(7$TIP8NOD%%; <= 24 346,)4 /()7+g,0a*+a +)+*+a.1 .a a3042a RAD =< F(+3 B0a)/:8a)38B(,)3$% 9 TIP8NOD =+B =\; LISTA L; +)- +42+04; +DRAD; LISTA8 IDA$L%; 7(0$;;% 9 J:+.4$?a+ 4L+2-1 F4/+)+ \ a+ .,+ + )4604.,/0a*+% +7$\DDF>07804E,.-a-% 9 a7+2a04830,?,.8348.a RAD .a \; 04-,0); A 4.24 9 ADAU!$\BL%; TATAZ\[D+; A; +7$ESTE8 IDA$L%% 9 60+)-7$WN, 4L+2-a 2(.,-+4X)W%; 04-,0); A 4.24 +DELEMENT$L%; A A )unciile apelate au urmtoarea semnificaie% LISTA ID$L% @ iniializeaz lista L ca fiind vid6 ESTE ID$L% @@ returneaz 1 dac lista L este vid sau > n caz contrar6 ELEMENT$L% @@ este funcia ce returneaz un element al b pentru a ne afla n cazul pacurgerii L+ a listei care are cel mai mic cost c arborelui strilor6 ADAU!$\B L% @@@ adaug nodul 5 la lista L. 8in descrierea funciei se observ c atunci c#nd un v#rf i din lista L devine v#rf curent

;=

sunt generai toi descendenii si acetia fiind pui n lista L. 7nul din b v#rf curent aceti descendeni va deveni la r#ndul su pe baza costului c p#n c#nd se a5unge la v#rful rezultat ?cel ce conine starea final,. 2.9 M4-(3a ND+F+34 4- I?640aO &etoda 18ivide et -mpera4 const n mprirea repetat a unei probleme n dou sau mai multe probleme de acelai tip i apoi combinarea subproblemelor rezolvate n final obin#ndu:se soluia problemei iniiale. Astfel fie vectorul A N?a1 a' ... an, a crui elemente se prelucreaz. &etoda 18ivide et -mpera4 este aplicabil dac pentru orice p F naturali astfel nc#t 1 p < q n e/ist un m T p +1 q 1U nc#t prelucrarea secvenei
p

a } se {a a ... a } i {a a
p p +1

{a a

...

poate face prelucr#nd secvenele

p +1

m +1

m+ '

...

a } i apoi prin combinarea


q

rezultatelor se obine prelucrarea dorit. &etoda 18ivide et -mpera4 poate fi descris astfel% F(+3 DI IDE8IMPERA$+)- 6B+)- MB04E,.-a-`a.7a% <= 6B M 04604E+)-a +)3+/++ 24/F4)*4+ /a04 24 604.,/04aE1; a.7a 04604E+)-1 04E,.-a-,. =< 9 +)- 462B ?; 04E,.-a- @4-aBga?a; +7$a@2$MG6%UD462% PRELUCRARE$6BMBa.7a%; 4.24 9 DI IDE$6BMB?%; DI IDE8IMPERA$6B?B@4-a%; DI IDE8IMPERA$?V1BMBga?a%; COMBINA$@4-aBga?aBa.7a%; A A Apelul funciei 18ivide et -mpera4 se face astfel% DI IDE8IMPERA$1B )B a.7a%;

=>

Variabilele i funciile din funcia 8-V-8EE-&*ELA au urmtoarele semnificaii% eps @ este lungimea ma/im a unei secvene ap apB1 ... aF pentru care prelucrarea se poate face direct6 m @ este indicele intermediar n care secvena a p apB1 ... aF este mprit n dou subsecvene de funcia 8-V-8E6 beta i gama @ reprezint rezultatele intermediare obinute n urma prelucrrii subsecvenelor ?ap apB1 ... am, i respectiv ?amB1 amB' ... aF,6 alfa @ reprezint rezultatul combinrii rezultatelor intermediare beta i gama6 DI IDE @ mparte secvena ?ap apB1 ... aF, n dou subsecvene ?ap apB1 ... am, i ?amB1 amB' ... aF,6 COMBIN @ combin rezultatele beta i gama ale prelucrrii subsecvenelor returnate de procedura 8-V-8E obin#nd rezultatul alfa a prelucrrii secvenei iniiale. E/emplu. $ortarea prin interclasare a unui vector de n elemente% <=P0(g0a? 34 2(0-a04 60+) ?4-(3a 3+F+34 4- +?640a =< T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T347+)4 )?aL 100 +)- aZ)?aL[; <= F4/-(0,. 34 2(0-a- =< F(+3 a7+2a04$+)- )% <= a7+2a04a F4/-(0,.,+ =< 9 +)- +; 60+)-7$WX)W%; 7(0$+D0;+U);+VV% 9 60+)-7$WR53WBaZ+[%; +7$$$+V1% R 10%DD0%60+)-7$WX)W%; A 60+)-7$WX)W%; A F(+3 /(?@$+)- +)7B+)- ?43B+)- 2,6% 9

=1

+)- +B\BKB.; +)- @Z)?aL[; +D+)7;\D?43V1;KD+)7; J:+.4$$+UD?43%Q$\UD2,6%% 9 +7$aZ+[UDaZ\[% 9 @ZK[DaZ+[; +VV; A 4.249 @ZK[DaZ\[; \VV; A KVV; A 7(0$.D+;.UD?43;.VV% 9 <= a, 0a?a2 4.4?4)-4 +) 2-a)ga =< @ZK[DaZ.[; KVV; A 7(0$.D\;.UD2,6;.VV% 9 <= a, 0a?a2 4.4?4)-4 +) 304a6-a =< @ZK[DaZ.[; KVV; A <= 24/F4)-a +)-04 +)7 2+ 2,6 42-4 2(0-a-a =< 7(0$.D+)7;.UD2,6;.VV% aZ.[D@Z.[; A F(+3 3+F+348+?640a$+)- +)7B+)- 2,6% 9 +)- ?43; +7$+)7U2,6% 9 ?43D$+)7V2,6% < 2; 3+F+348+?640a$+)7B?43%; 3+F+348+?640a$?43V1B2,6%; /(?@$+)7B?43B2,6%; A
='

A F(+3 ?a+)$F(+3% 9 +)- +B); 60+)-7$WX)I)-0(3,/4-+ )0.4.4?4)-4.(0 )DW%; 2/a)7$WR3WBQ)%; 60+)-7$WX)I)-0(3,/4-+ 4.4?4)-4.4 F4/-(0,.,+X)W%; 7(0$+D0;+U);+VV% 9 60+)-7$WaZR3[DWB+%; 2/a)7$WR3WBQaZ+[%; A 60+)-7$WX) ECTORUL NESORTATX)W%; a7+2a04$)%; 3+F+348+?640a$0B)G1%; 60+)-7$WX) ECTORUL SORTATX)W%; 0 a7+2a04$)%; g4-/:$%; A 3. M402,. .,/010++ $e vor rezolva urmtoarele probleme prin metoda 1Iranc" and Iound4% 3.1 cocul *EL$*-+0. 1( plcue ptrate sunt ncadrate ntr:un cadru de dimensiune 4/4 o poziie fiind liber. 0rice plcu vecin cu aceast poziie liber poate fi mutat n locul ei. +ele 1( plcue sunt numerotate de la 1 la 1(. $e ncepe dintr:o stare iniial care corespunde unei distribuii oarecare a celor 1( plcue i a locului liber n cele 1. poziii posibile. *roblema const n a trece folosind mutri posibile din starea iniial n starea final ?fig. 3.1.1,. 1 ( = 1 3 ' . 1 4 3 9 1 > 1 ( 4 ; 11 1' 1 ( = 1 3 ' . 1 > 1 4 3 9 1 1 1 ( 4 ; 1'

=3

Exemplu de configuraie iniial Figura 3.1.1

Configuraie final

3.' E/ist urmtorul 5oc% pe o linie de cale ferat se afl n vagoane unul l#ng altul numerotate cu valori distincte din mulimea 1...n. 0 macara poate lua 2 vagoane de pe linie i le poate aeza n partea dreapt la sf#ritul irului de vagoane care apoi prin mpingere a5ung din nou unul l#ng altul n noua ordine creat dup operaia respectiv. 8#ndu:se ordinea iniial a vagoanelor se cere s se determine ?dac este posibil, numrul minim de operaii pe care trebuie s le efectueze macaraua pentru ca n final vagoanele s se afle n ordine cresctoare 1 ' ... n . 3.3 *e malul unui r#u se afl 'n btinai din care n sunt canibali. Acetia doresc s traverseze r#ul utiliz#nd o barc care poate transporta cel mult 2 persoane. 8ac pe un mal sau n barc sunt mai muli canibali dec#t ceilali atunci canibalii i vor m#nca. +um vor reui s treac toi pe malul opus fr s se mn#nce i fr a apela la alte persoane. 3.4 *e un pod se afl n capre care vin dintr:un sens cu n capre care vin din sens opus. Acestea nu se pot ocoli ns fiecare capr poate sri peste o singur capr din grupul opus i desigur poate avansa dac n faa sa este un spaiu liber. +um reuesc aceste capre s traverseze podul doar prin cele dou micri posibile ?avans i sritur,. $e vor rezolva urmtoarele probleme -mpera4% prin metoda 18ivide et

3.( )iind dat un vector ce conine elemente de tip ntreg ordonate cresctor s se scrie o funcie de cutare a unui element dat n vector return#ndu:se poziia sa.

=4

3.. *roblema turnurilor din Kanoi. $e dau trei ti5e. *e una dintre ele sunt aezate n discuri de mrimi diferite discurile de diametre mai mici fiind aezate peste discurile cu diametre mai mari. $e cere s se mute aceste discuri pe o alt ti5 utiliz#nd ti5a a treia ca intermediar cu condiia mutrii a c#te unui singur disc i fr a pune un disc de diametru mai mare peste unul cu diametru mai mic. Lucrarea de laborator nr. 11.

METODE !ENERALE DE ELABORARE A AL!ORITMILOR $III%


1. C()*+),-,. .,/010++

n lucrare sunt prezentate metoda programrii dinamice i metodele euristice. 2 2. C()2+340a*++ -4(04-+/4

2.1. M4-(3a 60(g0a?10++ 3+)a?+/4 &etoda programrii dinamice se aplic pentru rezolvarea problemelor de optim pentru care soluia este rezultatul unui ir de decizii secveniale dependente de cele luate anterior i care ndeplinesc principiul optimalitii. *rincipiul optimalitii const n urmtoarele% )ie strile s> s1 ... sn n care s> este starea iniial i sn este starea final obinute prin deciziile d1 d' ... dn ?fig. '.1.1,.

Fig. 2.1.2 Stri

8ac di diB1 ... d5 ?1 i Q 5 n, este un ir optim de decizii care transform starea si:1 n starea s5 trec#nd prin strile intermediare si siB1 ...
=(

s5:1 i dac pentru oricare 2 Ti 5:1U rezult c di diB1 ... d2 i d2B1 d2B' ... d5 sunt ambele iruri optime de decizii de trecere din starea si:1 n starea s2 respectiv din starea s2 n starea si:1 atunci este satisfcut principiul optimalitii. Aplicarea metodei programrii dinamice se face astfel% se verific principiul optimalitii6 se scriu relaiile de recuren obinute din regulile de trecere dintr:o stare n alta i se rezolv. 8rept e/emplu se ia nmulirea optim a unui ir de matrici. LNA1CA'C...CAn n care Ai ?iN1 n, este de dimensiunile diCdiB1. &atricea rezultat L va fi de dimensiunile diCdnB1. $e tie c la nmulirea matricelor Ai i AiB1 se efectueaz diCdiB1CdiB' operaii de nmulire. 8ac matricele au dimensiuni diferite numrul operaiilor de nmulire necesare obinerii matricei rezultat L depinde de ordinea efecturii produselor a c#te dou matrice. $e cere gsirea ordinii de asociere pentru care numrul nmulirilor s fie minim. Lezolvarea acestei probleme se va face astfel% )ie +i5 numrul minim de nmuliri de elemente pentru calculul produsului AiCAiB1C...CA5 pentru 1 i Q 5 n. $e observ c% a, +iiN> b, +i iB1N diCdiB1CdiB' c, +1n este valoarea minim cutat. d, este verificat principiul optimalitii. +i5 N min O+i 2B+2B1 5BdiCd2B1Cd5B11 2 5 P asocierile fiind de forma ?AiC AiB1CXC A2, C ?A2B1C A2B'CXC A5,. $e calculeaz valorile +i iBd pentru fiecare nivel d p#n se a5unge la +1 n. *entru a construi arborele binar care va descrie ordinea efecturii operaiilor se va reine la fiecare pas indicele 2 care realizeaz minimul adic modul de asociere a matricelor. V#rfurile arborelui vor conine limitele subirului de matrice care se asociaz6 rdcina va conine ?1 n, iar un subarbore care conine n rdcin ?i 5, va avea descendeni pe ?i 2, i ?2B1 5, unde 2 este valoarea pentru care se realizeaz optimul cerut. n continuare este prezentat programul comentat de rezolvare a acestei probleme. T+)/.,34 U2-3+(.:H
=.

T+)/.,34 U/()+(.:H T+)/.,34 Ua..(/.:H T347+)4 )?aL 10 -564347 2-0,/- -+68)(39 .()g +)31B+)32; 2-0,/- -+68)(3 =2-gB=30; A TIP8NOD; <=I)?,.-+04a (6-+?a a ,),+ 2+0 34 ?a-0+/+ A1=A2=...=A) =< <= 34 3+?4)2+,)+ 31=32B32=33B...B3)=3$)V1% =< F(+3 60(38?a-0$+)- )B.()g /Z)?aL[Z)?aL[B+)- 3Z)?aLV1[% 9 +)- +B\BKB.B6(E; .()g ?+)BFa.; 7(0$+D1;+UD);+VV% /Z+[Z+[D0; 7(0$.D1;.UD)G1;.VV% 7(0$+D1;+UD)G.;+VV% 9 \D+V.; ?+)D0L&7777777; 7(0$KD+;KUD\G1;KVV% 9 Fa.D/Z+[ZK[V/ZKV1[Z\[V $.()g%3Z+[=3ZKV1[=3Z\V1[; +7$Fa.U?+)% 9 ?+)DFa.;6(EDK; A; A; /Z+[Z\[D?+); /Z\[Z+[D6(E; A A TIP8NOD =/()2-08a0@(04$TIP8NOD =6B+)- +B+)- \B.()g /Z)?aL[ Z)?aL[% 9 6D$TIP8NOD =%?a..(/$2+E4(7$TIP8NOD%%; 6GH+)31D+;6GH+)32D\; +7$+U\% 9 6GH2-gD/()2-08a0@(04$6GH2-gB+B/Z\[Z+[B/%;
=9

6GH30D/()2-08a0@(04$6GH30B/Z\[Z+[V1B\B/%; A 4.24 9 6GH2-gD0; 6GH30D0; A; 04-,0) 6; A F(+3 6(2-(03+)4$TIP8NOD =6B+)- )+F4.% 9 +)- +; +7$6ID0% 9 6(2-(03+)4$6GH2-gB)+F4.V1%; 6(2-(03+)4$6GH30B)+F4.V1%; 7(0$+D0;+UD)+F4.;+VV% 60+)-7$W W%; 60+)-7$W$R.3BR.3%X)WB6GH+)31B6GH+)32%; A A F(+3 ?a+)$F(+3% 9 +)- +B\B); .()g /Z)?aL[Z)?aL[; +)- 3Z)?aLV1[; <= 3+?4)2+,)+.4 ?a-0+/4.(0 =< TIP8NOD =0a3; 60+)-7$WX)I)-0(3,/4-+ )0.?a-0+/4.(0 )DW%; 2/a)7$WR3WBQ)%; 60+)-7$WX)I)-0(3,/4-+ 3+?4)2+,)+.4 ?a-0+/4.(0X)W%; 7(0$+D1;+UD)V1;+VV% 9 60+)-7$WX)D+?4)2+,)4a 3ZR3[DWB+%; 2/a)7$WR3WBQ3Z+[%; A; 60(38?a-0$)B/B3%; <= Ma-0+/4a / 04E,.-a-a +) ,0?a /a./,.4.(0 =< 60+)-7$WX)MATRICEA CX)W%; 7(0$+D1;+UD);+VV% 9 7(0$\D1;\UD);\VV% 60+)-7$WR#.3WB/Z+[Z\[%;
=;

60+)-7$WX)W%; A 60+)-7$WX)NR.MINIM DE INMULTIRI D R.3WB/Z1[ Z)[%; g4-/:$%; 0a3D0; 0a3D/()2-08a0@(04$0a3B1B)B/%; 60+)-7$WX)ARBORELE IN POSTORDINEX)W%; 6(2-(03+)4$0a3B0%; g4-/:$%; A 2.2. M4-(34 4,0+2-+/4

*rin algoritm euristic se va nelege un algoritm care furnizeaz o soluie apro/imativ nu neaprat optimal dar care poate fi implementat uor i d rezultate n timp util de ordin polinomial. &etodele euristice se aplic pentru rezolvarea unor probleme la care nu se tie dac admit optim i care accept drept rezultate nu tocmai optimul. 7na din idei este descompunerea procesului de determinare a soluiei n mai multe procese succesive crora li se caut soluia optimal. -dea nu conduce la obinerea n final n mod sigur a unei soluii optime ntruc#t optimizarea local nu implic n general optimizarea global. n problemele practice se pot cuta mai multe soluii apro/imative din care s se aleag cea mai bun. 8rept e/emplu se prezint problema comis @ voia5orului% $e d un graf neorientat J N?] , n care toate nodurile sunt unite ntre ele printr:o muc"ie creia i se asociaz un cost strict pozitiv. $e cere determinarea unui ciclu care s nceap dintr:un nod i s treac e/act o dat prin toate nodurile i s se ntoarc n nodul iniial. $e cere ca ciclul gsit s aib un cost minim. $oluia optimal a problemei se gsete ntr:un timp de ordin e/ponenial prin metoda bac2trac2ing. Algoritmul euristic prezentat mai 5os bazat pe metoda Jreed3 necesit un timp polinomial. Lezolvarea const n urmtoarele% 8ac ?v1 v' ... v2, este calea de5a construit atunci%

==

dac ?v1 v' ... v2, N N ] se adaug muc"ia ?v2 v1, i ciclul este nc"eiat6 dac ?v1 v' ... v2, ] se adaug muc"ia care leag v2 de un v#rf aparin#nd lui / dar neinclus n cale. *entru c ciclul este o cale nc"is putem considera ca punct de plecare oricare nod. 8e aceea se pot alege nite noduri de start se determin pentru fiecare ciclul corespunztor dup strategia descris i se reine ciclul de cost minim dintre ele. n continuare este prezentat programul corespunztor. T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T347+)4 )?aL 10 <=P0(@.4?a /(?+28F(+a\(0,.,+ =< F(+3 /(?+28F(+a\(0$+)- )B+)- /Z)?aL[Z)?aL[B +)- +B+)- /+/.,Z)?aLV1[B+)- =/(2-% <= ) 42-4 )0.)(3,0+.(0;/ 42-4 ?a-0+/4a /(2-,0+.(0; + 42-4 )(3,. 34 2-a0-;/+/., /()-+)4 )(3,0+.4 3+) /+/.,; /(2- 42-4 /(2-,. /+/.,.,+ =< 9 +)- 6Z)?aL[; +)- KBFB\BF?+); +)- /(2-?+); 7(0$KD1;KUD);KVV% 6ZK[D0; =/(2-D0; 6Z+[D1;/+/.,Z1[D+; FD+; <=)(3,. /,04)- =< 7(0$KD1;KU);KVV% <= 24 a3a,ga 64 0a)3 )G1 ?,/:++ =< 9 /(2-?+)D0L&777; <=ga2+04a ?,/:+4+ 34 /(2- ?+)+? /a04 a04 )(3,. 34 (0+g+)4 F=< 7(0$\D1;\UD);\VV% +7$$6Z\[DD0%QQ$/ZF[Z\[U/(2-?+)%% 9 /(2-?+)D/ZF[Z\[; F?+)D\; A

1>>

=/(2-D=/(2-V/(2-?+); /+/.,ZKV1[DF?+); 6ZF?+)[D1; FDF?+); A /+/.,Z)V1[D+; =/(2-D=/(2-V/ZF[Z+[; A F(+3 ?a+)$F(+3% 9 +)- +B\B); +)- /(2-8/+/.,; +)- /+/.,Z)?aLV1[; +)- /Z)?aL[Z)?aL[; 60+)-7$WX)N0.)(3,0+.(0 g0a7,.,+ D W%; 2/a)7$WR3WBQ)%; 7(0$+D1;+UD);+VV% 7(0$\D1;\UD);\VV% /Z+[Z\[D0L&777; 60+)-7$WX)I)-0(3,/4-+ /(2-,0+.4 ?,/:++.(0 /a04 a, /a (0+g+)4W%; 60+)-7$WX) )(3,. + 2+ /4.a.a.- )(3 ?a+ ?a04 /a +;3a/a ), ?a+ 2,)-W%; 60+)-7$WX) a2-74. 34 )(3,0+ 24 +)-0(3,/4 0 X)W%; 7(0$+D1;+UD)G1;+VV% 9 J:+.4$1% 9 60+)-7$WN(3,. a3+a/4)- .,+ R3 DWB+%; 2/a)7$WR3WBQ\%; +7$\ID0%9 60+)-7$WC(2-,. ?,/:+4+ $R3B R3%DWB+B\%; 2/a)7$WR3WBQ/Z+[Z\[%; /Z\[Z+[D/Z+[Z\[; A 4.24 @04aK; A A +D1;
1>1

/(?+28F(+a\(0$)B/B+B/+/.,BQ/(2-8/+/.,%; 60+)-7$WX)COSTUL CICLULUI DR3X)WB/(2-8/+/.,%; 60+)-7$WX)CICLULDW%; 7(0$+D1;+UD)V1;+VV% 60+)-7$WR33WB/+/.,Z+[%; g4-/:$%; A '. M402,. .,/010++ $e vor rezolva prin metoda programrii dinamice urmtoarele probleme% 3.1 8eterminarea cilor de cost minim ntre oricare dou v#rfuri ale unui graf orientat prin algoritmul lui )lo3d. ?problema 3.' din lucrarea 9,. 3.' La un concurs de tir inta este alctuit din cercuri concentrice numerotate din e/terior spre interior. )iecrui sector determinat de dou cercuri succesive i este ataat o valoare strict pozitiv reprezent#nd puncta5ul primit de concurent n cazul lovirii acestui sector. $ se determine numrul minim de lovituri pe care trebuie s le e/ecute un concurent pentru a obine e/act 2 puncte. 3.3 $e dau dou numere naturale A i I i un vector v care conine n numere naturale. $ se determine dac se poate trece din A n I tiind c singurele operaii permise sunt% a, Adunarea la A a oric#te numere din vectorul v6 b, $cderea din A a oric#te numere din vectorul v6 )iecare numr poate fi adunat respectiv sczut de mai multe ori. 8ac rspunsul la ntrebare este afirmativ se cere numrul minim de operaii prin care se poate trece din A n I. 3.4 $e dau n segmente aflate pe o dreapt. $ se determine cardinalul ma/im al unei submulimi de segmente care are proprietile% a, oricare dou numere din submulime nu se intersecteaz6 b, submulimea conine primul element. 3.( *e o creang de mr se afl n mere fiecare caracterizat prin distana "i n cm de la pm#nt p#n la poziia n care se afl i prin

1>'

greutatea sa gi n grame. 7n culegtor dorete s culeag o cantitate e/primat n grame c#t mai mare de mere. 8up ce este cules un mr ntreaga creang devine mai uoar i se ridic n sus cu / cm. +ulegtorul a5unge doar la merele aflate la o nlime mai mic sau egal cu d cm. $ se determine greutatea ma/im de mere care poate fi culeas i ordinea n care sunt culese merele. $e citesc% n / d i ?gi "i, iN1...n. $ se rezolve prin metode euristice urmtoarele probleme% 3.. $ se gseasc ma/imul unei funcii f?/, n intervalul Ta bU.

3.9 $e d un graf neorientat cu n noduri. $e cere s se determine numrul minim de culori necesare pentru a colora nodurile grafului dat astfel nc#t dou v#rfuri legate printr:o muc"ie s fie colorate cu culori diferite. 3.; $e d un graf neorientat cu n noduri. $e cere s se determine o submulime ma/im de noduri cu proprietatea c oricare dou noduri din ea nu sunt legate printr:o muc"ie.

1>3

Lucrarea de laborator nr. 1'.

AL!ORITMI FUNDAMENTALI DE SORTARE


1. C()*+),-,. .,/010++ n lucrare sunt prezentai algoritmii de sortare prin numrare prin inserare ?direct i s"ellsort, prin intersc"imbare ?metoda bulelor i Fuic2sort, prin selecie i interclasare. 2. C()2+340a*++ -4(04-+/4 $ortarea const n ordonarea cresctoare sau descresctoare a elementelor unui vector A N?a> a1 ... an:1,. n practic problema se nt#lnete sub forma sortrii unor articole dup c"eie c"eia fiind un c#mp din articol. 2.1. S(0-a04a 60+) ),?10a04

&etoda sortrii prin numrare const n gsirea pentru fiecare element aTiU a numrului de elemente din vector mai mici ca el. !umerele obinute sunt memorate ntr:un vector c6 elementele vectorului de sortat a sunt iniial atribuite vectorului b. *e baza vectorului c elementele lui b vor fi aran5ate n vectorul a. 8ezavanta5ul metodei const n utilizarea a doi vectori de lucru. Gimpul de prelucrare este de ordinul 0?n',. n programul prezentat la paragraful '... funcia sortEnumrare red algoritmul de mai sus. 2.2. S(0-a04a 60+) +)240a04

$ortarea prin inserare const n urmtoarele% )ie secvena a> Q a1 Q a' ... Q a5:1. -nserarea elementului a5 n aceast secven const n compararea lui a5 cu a5:1 a5:' ... p#n c#nd se a5unge la ai Q a56 se insereaz a5 dup ai cu meniunea c n prealabil elementele a 5:1 a5:' ... aiB1 au fost deplasate spre dreapta cu o poziie. &etoda care procedeaz ntocmai se numete inserare direct.

1>4

&etoda inserrii binare const n cutarea binar a locului unde trebuie inserat elementul a5 av#nd n vedere c secvena a > a1 ... a5:1 este ordonat cresctor. Got din categoria inserrii face parte i metoda s"ell. *entru a e/plica metoda se introduce noiunea de ":sortare. !umim ":sortare sortarea prin inserare direct a urmtoarelor secvene% a> a" a'" .... a1 a1B" a1B'" .... . . . a" a'" a3" .... " este numit increment. &etoda s"ell const n alegerea unui numr de 2 incremeni "1 Z "' Z "3 Z ... Z "2 N 1 i de a face o "1 @ sortare urmat de o "' @ sortare . a. m. d. n final o 1 @ sortare. *erformaele metodei sunt str#ns legate de alegerea incremenilor. n e/emplul din paragraful '... funcia sortEinserareEdirect red algoritmul de inserare direct iar funcia s"ellEsort red algoritmul metodei s"ell. Gimpul de prelucrare n cadrul metodei de inserare direct este de ordinul 0?n', iar al metodei s"ell de ordinul 0? ) =ln),. 8e asemenea timpul de prelucrare n cadrul metodei de inserare prin cutare binar este de ordinul 0?) =ln),. 2.3. S(0-a04a 60+) +)-402/:+?@a04

$ortarea prin intersc"imbare const n modificri succesive de forma ai a5 p#n c#nd elementele vectorului apar n ordine cresctoare. 8in aceast categorie fac parte metoda bulelor i metoda Fuic2sort. &etoda bulelor const n compararea ai cu aiB16 dac ordinea e bun se compar aiB1 cu aiB'6 dac ordinea nu e bun se intersc"imb a i cu aiB1 i apoi se compar aiB1 cu aiB'. 8up prima parcurgere a vectorului pe ultima poziie a5unge elementul av#nd valoarea cea mai mare dup a doua parcurgere a5unge urmtorul element . a. m. d. Gimpul de prelucrare este de ordinul 0?n',. $ortarea rapid Fuic2sort a fost creat de Koare i folosete metoda H8ivide Et -mpera4.
1>(

*rincipiul metodei este urmtorul% se selecteaz un element din tablou numit pivot i se rearan5eaz vectorul n doi subvectori astfel nc#t cel din st#nga are toate elementele mai mici dec#t pivotul iar cel din dreapta mai mare ca pivotul. *rocedeul se reia n subtabloul din st#nga i apoi n cel din dreapta . a. m. d. *rocedeul se termin c#nd se a5unge cu pivotul n e/tremitatea st#ng i respectiv dreapt a tabloului iniial. Gimpul de prelucrare a metodei Fuic2sort este de ordinul 0?)= l)),. n e/emplul de la paragraful '... funcia sortEmetodaEbulelor red algoritmul de sortri prin metoda bulelor iar funciile Fuic2sort i Fuic2 redau algoritmul sortrii prin metoda Fuic2sort. 2.'. S(0-a04a 60+) 24.4/*+4

$ortarea prin selecie direct const n urmtoarele% se afl minimul a 5 dintre a> a1 ... an:1 i se aduce pe poziia zero n vector prin intersc"imbarea a> cu a56 apoi procedeul se repet pentru a1 a' ... an:1 . a. m. d. Gimpul de prelucrare este de ordinul 0?n',. -n e/emplul de la paragraful '... funcia sortEselecie red algoritmul de sortare prin metoda seleciei directe.

1>.

2.5.

S(0-a04a 60+) +)-40/.a2a04

&etoda sortrii prin interclasare a fost prezentat n cadrul lucrrii nr. 1> drept e/emplificare a metodei de elaborare a algoritmilor H8ivide et -mpera4 2.#. EL4?6.,

n programul de mai 5os sunt implementai algoritmii de sortare prezentai n paragrafele '.1. @'.(. T+)/.,34 U2-3+(.:H T+)/.,34 U/()+(.:H T347+)4 )?aL 100 <= AL!ORITMI DE SORTARE =< F(+3 /+-+048F4/-(0$+)- )B7.(a- aZ)?aL[B7.(a- @Z)?aL[% <= CITIRE ELEMENTE ECTOR =< 9 +)- +; 60+)-7$WX)I)-0(3,/4-+ 4.4?4)-4.4 F4/-(0,.,+ 34 2(0-a-X)W%; 7(0$+D0;+U);+VV% 9 60+)-7$WaZR3[DWB+%; 2/a)7$WR7WBQaZ+[%; @Z+[DaZ+[; A A F(+3 04/()2-+-,+04$+)- )B7.(a- aZ)?aL[B7.(a- @Z)?aL[% <= RECONSTITUIREA INITIALA A ECTORULUI a =< 9 +)- +; 7(0$+D0;+U);+VV% aZ+[D@Z+[; A

1>9

F(+3 a7+2a04$+)- )B7.(a- aZ)?aL[% <= AFISARE ECTOR =< 9 +)- +; 7(0$+D0;+U);+VV% 9 60+)-7$WR".27WBaZ+[%; +7$$$+V1% R 10%DD0% 60+)-7$WX)W%; A A F(+3 2(0-8),?a0a04$+)- )B7.(a- aZ)?aL[% <= SORTAREA PRIN NUMARARE =< 9 +)- +B\; 7.(a- @Z)?aL[; +)- /Z)?aL[; 7(0$+D0;+U);+VV% 9 /Z+[D0; <= +)+-+a.+Ea04 F4/-(0 34 ),?a0a04 =< @Z+[DaZ+[; <= /(6+404 F4/-(0 a +) @ =< A <= ),?a0a04 =< 7(0$\D1;\U);\VV% 7(0$+D0;+UD\G1;+VV% +7$aZ+[UaZ\[% /Z\[VV; 4.24 /Z+[VV; <= 04a0a)\a04 F4/-(0 a =< 7(0$+D0;+U);+VV% aZ/Z+[[D@Z+[; A F(+3 2(0-8+)240a0483+04/-a$+)- )B7.(a- aZ)?aL[% <= SORTARE PRIN INSERARE DIRECTA =< 9 +)- +B\; 7.(a- L; 7(0$\D1;\U);\VV% 9
1>;

LDaZ\[; +D\G1; J:+.4$$+HD0% QQ $LUaZ+[%% 9 aZ+V1[DaZ+[; +D+G1; A aZ+V1[DL; A A F(+3 2:4..82(0-$+)- )B7.(a- aZ)?aL[% <= SORTAREA PRIN METODA SYELL =< 9 +)- +B\B+)/0; 7.(a- L; +)/0D1; J:+.4$+)/0U)% +)/0D+)/0=3 V 1; J:+.4$+)/0HD1% 9 +)/0D+)/0 < 3; 7(0$+D+)/0;+U);+VV% 9 LDaZ+[;\D+; J:+.4$aZ\G+)/0[HL% 9 aZ\[DaZ\G+)/0[; \D\G+)/0; +7$\U+)/0% @04aK; A; aZ\[DL; A A A F(+3 2(0-8?4-(3a8@,.4.(0$+)- )B7.(a- aZ)?aL[% <= SORTAREA PRIN INTERSCYIMBAREGMETODA BULELOR =< 9
1>=

+)- +B\Bga-a; 7.(a- L; \D0; 3(9 ga-aD1; \D\V1; 7(0$+D0;+U)G\;+VV% +7$aZ+[HaZ+V1[%9 ga-aD0; LDaZ+[;aZ+[DaZ+V1[;aZ+V1[DL; A; AJ:+.4$ga-aDD0%; A F(+3 M,+/K$+)- 60+?B+)- ,.-+?B7.(a- aZ)?aL[% 9 +)- +B\; 7.(a- 6+F(-BL; +D60+?;\D,.-+?; 6+F(-DaZ$60+? V ,.-+?% < 2[; 3(9 J:+.4$aZ+[U6+F(-% +VV; J:+.4$aZ\[H6+F(-% \GG; +7$+UD\% 9 LDaZ+[;aZ+[DaZ\[;aZ\[DL; +VV;\GG; A; AJ:+.4$+UD\%; +7$60+?U\% M,+/K$60+?B\Ba%; +7$+U,.-+?% M,+/K$+B,.-+?Ba%; A F(+3 M,+/K2(0-$+)- )B7.(a- aZ)?aL[% <= SORTAREA RAPIDA bUICeSORT =< 9 M,+/K$0B)G1Ba%; A F(+3 2(0-824.4/-+4$+)- )B7.(a- aZ)?aL[%
11>

<= SORTAREA PRIN SELECTIE =< 9 +)- +B\B6(E; 7.(a- L; 7(0$+D0;+U)G1;+VV% 9 LDaZ+[;6(ED+; 7(0$\D+V1;\U);\VV% +7$aZ\[UL% 9 LDaZ\[; 6(ED\; A aZ6(E[DaZ+[;aZ+[DL; A A F(+3 ?a+)$F(+3% 9 +)- +B); 7.(a- aZ)?aL[B@Z)?aL[; /.02/0$%; 60+)-7$WX)I)-0(3,/4-+ )0.4.4?4)-4.(0 )DW%; 2/a)7$WR3WBQ)%; /+-+048F4/-(0$)BaB@%; 60+)-7$WX) ECTORUL NESORTATX)W%; a7+2a04$)Ba%; 60+)-7$WX) ECTORUL SORTAT PRIN METODA NUMARARIIX)W%; 2(0-8),?a0a04$)Ba%; a7+2a04$)Ba%; g4-/:$%; 60+)-7$WX) ECTORUL SORTAT PRIN METODA INSERARII DIRECTEX)W%; 04/()2-+-,+04$)BaB@%; <= a 34F+)4 F4/-(0,. )42(0-a+)+-+a. =< 2(0-8+)240a0483+04/-a$)Ba%; a7+2a04$)Ba%; g4-/:$%;

111

60+)-7$WX) ECTORUL SORTAT PRIN METODA SYELLX)W%; 04/()2-+-,+04$)BaB@%; <= a 34F+)4 F4/-(0,. )42(0-a+)+-+a. =< 2:4..82(0-$)Ba%; a7+2a04$)Ba%; g4-/:$%; 60+)-7$WX) ECTORUL SORTAT PRIN METODA BULELORX)W%; 04/()2-+-,+04$)BaB@%; <= a 34F+)4 F4/-(0,. )42(0-a+)+-+a. =< 2(0-8?4-(3a8@,.4.(0$)Ba%; a7+2a04$)Ba%; g4-/:$%; 60+)-7$WX) ECTORUL bUICeSORTX)W%; 04/()2-+-,+04$)BaB@%; <= +)+-+a. =< M,+/K2(0-$)Ba%; a7+2a04$)Ba%; g4-/:$%; 60+)-7$WX) ECTORUL SELECTIEI DIRECTEX)W%; 04/()2-+-,+04$)BaB@%; <= +)+-+a. =< 2(0-824.4/-+4$)Ba%; a7+2a04$)Ba%; g4-/:$%; A 3. M402,. .,/010++ 3.1. )ie tabloul de ntregi% (=1943'> 0rdonai fr program acest ir n ordinea cresctoare a elementelor folosind cele trei metode delementareR de sortare% inseria metoda bulelor i selecia art#nd la fiecare pas al metodei care este noua configuraie a tabloului. +#te comparaii i c#te mutri de elemente au avut

SORTAT PRIN METODA a 34F+)4 F4/-(0,. )42(0-a-

SORTAT PRIN METODA a 34F+)4 F4/-(0,. )42(0-a-

11'

loc pentru fiecare metodM +are metod este cea mai potrivit pentru acest tablou de ntregiM +are aran5are a tabloului ar fi fost cea mai defavorabilM 3.'. 8escriei algoritmul de sortare prin inserare la care modificai cutarea liniar cu o cutare binar ?n cadrul subtabloului din st#nga elementului curent,. +alculai i pentru acest nou algoritm ?numit sortare prin inserie cu cutare binar, numrul de pai numrul de comparaii i mutri ale elementelor din list pentru e/emplul de la problema 3.1. 8evine acest algoritm mai performantM 3.3. *entru tabloul de elemente reale% :3.1 >.1 1.' @(.9 :>.3 . aplicai metodele de ordonare s"ell:sort i Fuic2:sort pentru fiecare pas reprezent#nd noua configuraie a tabloului. !umrai comparaiile i mutrile de elemente pe care le:ai efectuat. +are algoritm este mai eficient pentru acest tablouM 3.4. Analizai algoritmul de sortare Fuic2:sort i nlocuii varianta prezentat ce folosete recursivitatea cu o variant nerecursiv. +e variabile trebuiesc iniializate cu ce valori i unde are loc saltul n program pentru a se elimina apelul recursivM 3.(. +are algoritm dintre cei prezentai are nevoie de spaiu de memorie cel mai mareM 3... $criei un algoritm care combin algoritmii de sortare Fuic2: sort pentru obinerea de partiii nesortate de lungime m apoi utilizai inseria direct pentru terminarea sortrii. 3.9. Adaptai algoritmul Fuic2:sort pentru a determina ntr:un ir de lungime n cu elemente ntregi al m:lea mai mic element . 3.;. $ se sorteze un numr de n elemente numerotate de la 1 la n caracterizate prin anumite relaii de preceden notate ?5 2, av#nd semnificaia c elementul 5 precede ca ordine elementul 2. $ortarea trebuie s aib ca rezultat o list n care oricare element 2 este devansat de predecesorul su ?sortarea topologic,.

113

3.=. $ se descrie algoritmul care realizeaz urmtoarele aciuni specifice unui e/amen de admitere% efectuarea calculului mediilor candidailor la e/amenul de admitere repartizarea celor admii dup opiuni ?se consider c e/ist m opiuni fiecare cu un numr dat de candidai admii, i afiarea listei. afiarea n ordinea descresctoare a mediilor a tuturor candidailor neadmii. $e consider c e/amenul const din dou probe la medii egale ?calculate cu dou zecimale prin trunc"iere, departa5area se face dup nota la prima prob ?dac egalitatea se menine se ia n considerare a doua, admi#ndu:se depirea numrului de locuri n caz de egalitate i dup acest criteriu.

114

B+@.+(g0a7+4`

11(

S-ar putea să vă placă și