Sunteți pe pagina 1din 15

Structuri de date

CURS 1
1. Algoritmii i caracteristicile lor
Noiunea de algoritm este folosit pentru a descrie succesiunea de pai ce alctuiesc o operaie, un procedeu de rezolvare a unei probleme. DEFINIIE. Algoritmul este o mulime finit de instruciuni care, dac sunt urmate, ndeplinesc o anumit funcie, rezolv o anumit problem. Fiecare algoritm trebuie s satisfac urmtoarele cerine legate de : i. Intrare (Input): e ist card(INPUT) "! ii. Ieire (#utput): e ist cel puin o valoare furnizat ca ieire, deci card(OUTPUT) > "! iii. i neambigu! iv. v. Finit !ine: oricare ar fi valorile de intrare, algoritmul trebuie s se termine $ntr%un numr finit de pai! Efecti"itatea: fiecare instruciune trebuie s fie suficient de e plicit astfel $nc&t s poat fi efectuat manual (de ctre o persoan cu creionul)! vi. Corectit !inea: pentru orice set de date de intrare, algoritmul trebuie s produc $ntotdeauna la ieire rezultatul corect! vii. probleme. 'n algoritm poate fi specificat (descris) $n moduri diferite, dou dintre acestea fiind metoda sc(emei logice i cea a utilizrii limba)ului pseudocod (limba) apropriat ca sinta de *ascal). +om da $n continuare c&teva e emple de algoritmi i $i vom analiza. E$E%P&U& 1. %inim l a trei n mere #eneralitatea: algoritmul trebuie s rezolve mai multe instane ale aceleiai Specificarea: fiecare instruciune trebuie s fie precis, clar, bine specificat zero sau mai multe valori care sunt primite din i are proprietatea e terior, ca date de intrare! aceast mulime se numete INPUT,

Structuri de date -e citesc de la tastatur trei numere a, ', c i se cere determinarea i afiarea minimului lor min(a('(c). .lgoritmul care rezolv aceast problem se bazeaz pe relaia matematic min(a( '( c) ) min(a( min ('( c)) iar implementarea $n limba) pseudocod arat astfel:
1 2 3 4 5 6 7 8 9 10

IMPORTANT nu orice program este i algoritm! de obicei, un program nu respect neaprat proprietatea de finitudine.

min:=b; min:=c;

-e observ c algoritmul descris mai sus are cele cinci proprieti enumerate la definiia algoritmului. *utem descrie algoritmul prezentat mai sus i folosind o sc(em. *e baza acestor descrieri putem face c&teva observaii: sc(ema logic este una liniar, fr bucle (cicluri) deci nu e ist structuri repetitive! este folosit o variabil suplimentar min care stoc(eaz valoarea minim! dac secvena de calcul al minimului a trei numere ar fi returnat valoarea corect numai (de e emplu) c&nd unul din ele era zero, atunci nu era un algoritm deoarece nu era respectat condiia vi) din definiie! funciile de operaii i de locaii ale algoritmului propus se pot calcula elementar i au valorile: , T/ emplul0,(a,b,c) 1 (funcia de operaii) &/ emplul0,(a,b,c) 2 , (funcia de locaii) deoarece sunt folosite 3 variabile de memorie i anume a, b, c i min.

Structuri de date IMPORTANT


. sc-em+ logic+ $ncepe cu START i se termin cu ST.P; dac nu are cicluri se spune c este liniar.
/T01T

CIT'2T' a3b3c min%:=%a

min%#%b

min :2 b

T F

min%#%c

min :2 c

T /C1I' min

/TOP

Figura ,. -c(ema logic pentru calculul minimului a trei numere

E$E%P&U& *. C%%DC a !o + n mere -e citesc de la tastatur dou numere naturale a i ' i se cere calculul i afiarea valorii C%%DC(a, '). .lgoritmul cel mai cunoscut pentru determinarea C%%DC a dou numere este cel dat $nc din antic(itate de ctre matematicianul grec E cli! i folosete proprietatea c dac a5b atunci 67786(a,b)267786(b,a)267786(a%b, b). 9n termenii limba)ului pseudocod, el poate fi descris astfel:
1 2 3 4 5 6 7 8 9 10 11 Program CMMDC_a_b; !"in Read(a); Read(b); While(a#$b)%Do If(a#b)%Then% %%%%%%%%%%b:=%b%&%a '()! %%%%%%%%%%a:=a%&%b *+i,!(a); 'n-.

IMPORTANT &a algoritm l l i E cli! se presupune c numerele citite a i b au proprietatea c a%%0%i b%%0

-c(ema logic pentru acest algoritm este prezentat $n Figura 4. *utem s observm c aceast sc(em conine cicluri (bucla ,-ile) iar decrementarea lui a (respectiv a lui ') se face $ntr%un numr finit de pai (p&n c&nd a devine egal cu '). 9n fiecare ciclu se decrementeaz sau a sau b cu condiia ca ele s rm&n pozitive i diferite $ntre ele. :

Structuri de date
/T01T CIT'2T' a3%b

a#$b

F
/C1I' a

T F
a%:=%a%&%b a%#%b

T
b%:=%b%&%a

/TOP

Figura 4. -c(ema logic pentru calculul C%%DC(a, ')

/ ist un alt algoritm mai eficient de calcul a C%%DC(a, b). .cest algoritm a fost descoperit de ;. -tein $n. .lgoritmul folosete urmtoarele proprieti: 8ac a i b sunt ambele pare, atunci 67786(a, b)24 67786(a<4, b<4)! 8ac a este par i b este impar atunci 67786(a, b) 2 67786(a<4, b)! .ltfel, a i b sunt impare i atunci 67786(a, b)2 67786(=a %b=<4, b).

E$E%P&U& /. A tomat l !e C.CA C.&A (dup >oro?itz @ -a(ni). 'n e emplu care reflect diferena dintre un program i un algoritm este sc(ema de funcionare a automatului de 6#6. 6#A. (Figura :). +om face observaia c aceasta nu descrie un algoritm deoarece nu satisface proprietatea de finitudine

Structuri de date
/T01T

'4i),5% ),ic(!%6n% a7,8ma,9 T

Ca7,5%:8+,m8n!7(%-!% m8n!-5 F Cin!;a% F c7n8)c7,%c7% bani% :8,+i;i<i%9 T =m:+7m7,5%bani% :8,+i;i<i

'4i),5%bani% :8,+i;i<i9 T In,+8-7%m8n!-a

0:a)5%b7,8n% +!),i,7i+! m8n!-5

M8n!-a acc!:,a,5%9

T 0:a)5%b7,8n%%>i% a>,!a:,5%),ic(a

0%a:5+7, %),ic(a9 T !a%COC0%CO?0

1!n7n<5

/TOP

Figura :. -c(ema de funcionare a automatului de 6#6. 6#A.

*. Clase !e algoritmi0 algoritmi iterati"i i rec rsi"i


.lgoritmii pot fi clasificai dup multe criterii legate de tipul sc(emei logice, de disponibilitatea datelor sau dac au sau nu apeluri e plicite sau ascunse ale aceluiai fragment de cod c(iar $n interiorul su. +om enumera c&teva dintre tipurile de algoritmi. Algoritm !eterminist este un algoritm al crui comportament poate fi complet precizat $n funcie de datele de intrare. .ceasta $nseamn c de fiecare dat c&nd un set de date e folosit ca intrare, algoritmul va furniza aceleai rezultate la ieire. *entru algoritmii ce folosesc stri sau menin informaii persistente $ntre rulri consecutive, se va considera intrare (BinputC) orice dat introdus $nc de la pornirea algoritmului $n starea iniial. 7a)oritatea algoritmilor uzuali sunt algoritmi determiniti. 'n e emplu de algoritm nedeterminist este cel care folosete $n interiorul su valoarea momentului actual (datDorDminutDsecund) $n

Structuri de date criteriile de alegere a unor valori. .stfel de algoritmi nedeterminiti sunt de regul folosii $n generarea unor secvene de numere aleatoare. Algoritm on1line este un algoritm care trebuie s proceseze fiecare dat de intrare imediat ce aceasta este introdus, fr a avea detalii suplimentare despre ce date vor mai fi introduse. 'n astfel de algoritm este cel care citete de la tastatur o secven de caractere ce se termin cu tasta /nter i returneaz irul citit. .lgoritmul nu tie e act c&nd se va termina (c&nd se va apsa tasta /nter) iar dup fiecare apsare a unui caracter acesta este automat inclus $n bufferul de ieire. 8ac algoritmul necesit citirea $n avans a tuturor datelor de intrare i numai dup aceea le proceseaz atunci el este de tipul off1line. 8e e emplu, algoritmul care sorteaz intern cresctor n numere, prima dat citete cele n numere i numai dup ce le are stocate $n memorie poate $ncepe sortarea lor. # clas special de algoritmi sunt algoritmii aleatori care $n interiorul lor, la un anumit pas, fac unele alegeri aleatoare. .ceste alegeri se fac de obicei pentru a evita situaia $n care cazurile cele mai defavorabile apar frecvent $n seturile de date de intrare. 8e e emplu, e ist variante ale algoritmului de sortare rapid EuicF-ort care fac alegerea elementului pivot pe baze total aleatoare. 8ac un algoritm nu conine apeluri recursive directe sau indirecte atunci el se numete iterati". .lgoritmii iterativi conin numai instruciuni de atribuire, adunare<scdere, $nmulire<$mprire, comparaii (eventual structurate $n cicluri) i apeluri nerecursive la alte subrutine. 8ac sc(ema logic a algoritmului nu conine cicluri atunci algoritmul se numete liniar. 8ac $n sc(imb algoritmul conine apeluri recursive directe sau indirecte (adic se apeleaz pe el $nsui sau apeleaz o alt subrutin care la r&ndul ei apeleaz algoritmul $n cauz) atunci el se numete rec rsi". .lgoritmii recursivi au c&teva caracteristici i anume: ,. / presiile funciilor de locaii i de operaii sunt de obicei scrise sub forma unor recurene foarte asemntoare cu funcia recursiv implementat de algoritm ceea ce duce la e presii de multe ori e poneniale ale timpilor de e ecuie comparativ cu situaiile c&nd acelai algoritm poate fi scris nerecursiv $ns timpul de e ecuie nu este e ponenial! 4. .u avanta)ul c pot fi foarte uor $nelei, e presia lor semn&nd cu cea a funciei ce o implementeaz! :. .u dezavanta)ul c fiecare apel recursiv $nseamn punerea pe stiv a argumentelor (parametrii actuali, dac e ist), i a adresei de revenire $n programul apelant ($ntotdeauna), deci se $ncarc stiva $n mod e cesiv (c&tigm $n lizibilitate dar pierdem $n vitez de e ecuie i memorie folosit).

/. Principiile program+rii str ct rate2 Teorema 34-m15acopini


9n ,GH3, doi cercettori italieni IJ(m i ;acopini au demonstrat urmtoarea H

Structuri de date TE.RE%62 Orice program, orict de complicat, poate fi transformat ntr-un program echivalent, compus numai din combinaii imbricate ale celor trei structuri de baz: Secvena de atribuiri, apeluri de subprograme, operaii elementare !nstruciunea de test if .. then .. else "iclul cu test iniial #hile .. do.

.ceast teorem are o importan deosebit i $nseamn c este suficient de analizat numai programele structurate create cu cele trei tipuri de instruciuni de baz. 8e aici rezult i importana programrii structurate. Ideea de demonstraie a teoremei este constructiv i arat cum se poate transforma un program nestructurat $ntr%unul structurat. .plicarea mecanic a acestui algoritm poate duce uneori la un program mult mai greu de urmrit dec&t originalul de la care s%a pornit. +om arta paii necesari pornind de la un e emplu i anume o secven de cod ce viziteaz un arbore binar $ntr%o manier nerecursiv, folosind stiva:
1: if (b=n7(()%then goto%2 P7)@(/3%b) b=b(!A, goto%1 if%'m:,B(/)%then goto%3 P8:(/3%b) Ci)i,(b) b=b+i"@, goto%1

2:

3:

Pas l 1: *ornim de la o diagram a programului (sc(em logic) i o partiionm astfel $nc&t fiecare partiie are un singur punct de intrare i o singur ieire sau se termin cu un test cu dou puncte de ieire. *entru codul anterior, sc(ema logic arat ca $n Figura 3. Pas l *: Numerotm partiiile secvenial $ncep&nd de la , astfel $nc&t partiia , este prima e ecutat. Pas l /: /tic(etm ieirile fiecrei partiii cu numrul urmtoarei partiii ce se e ecut la ieirea corespunztoare (" pentru ieirea din program). 8up acest pas, partiiile arat ca $n Figura 1.

Structuri de date
/T01T

b=n7((

'm:,B(/)

F P7)@(/3%b)

F P8:(/3%b)

-M#*

b=b(!A,

Ci)i,(b)

b=b+i"@,

Figura 3 -c(ema logic a programului care viziteaz recursiv un arbore binar

Pas l 7: -e introduce o variabil nou, 6*, numit L contor programC. Fiecare partiie poate fi acum scris $n cod sub forma unei structuri de forma
CP:=n7m5+7(%7+m5,8a+!i%:a+,i<ii

sau
if%#c8n-i<i!$%then %%%CP:=n7m5+7(%:a+,i<i!i%:!n,+7%caD%aAi+ma,i; !()! %%%CP:=n7m5+7(%:a+,i<i!i%:!n,+7%caD%n!"a,i;;

*artiiile din e emplul ales vor fi codificate astfel: *artiia ,


if(b=n7(()%then %%%CP:=3 !()!% %%%CP:=2; P7)@(/3%b); b=b(!A, CP:=1; if('m:,B(/))%then %%%CP:=0 !()!%% %%%CP:=4; P8:(/3%b); Ci)i,(b); b=b+i"@,; CP:=1

*artiia 4

*artiia :

*artiia 3

Structuri de date
P7)@(/3%b) b=n7(( T b=b(!A, 'm:,B(/) P8:(/3%b) T Ci)i,(b)

3
F

0
F

b=b+i"@,

*artiia 1

*artiia *

*artiia /

*artiia 7

Figura 1 *artiiile etic(etate la ieire, conform pailor 4 i :

Pas l 8: 8up toate acestea, $ntregul program poate fi reprezentat astfel:


CP:=1; while(CP#$0)%do if(CP=1)%then #c8-7(%:!n,+7%:a+,i<ia%1$ else if(CP=2)%,@!n #c8-7(%:!n,+7%:a+,i<ia%2$ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE !()! % #c8-7(%:!n,+7%:a+,i<ia%n$

*entru programul nostru, codul structurat conform pailor ,%1 este urmtorul:
CP:=1; while(CP#$0)do if(CP=1)%then% if(b=n7(()then% CP:=3 !()! CP:=2 !()!%% iA%(CP=2)%,@!n% P7)@(/3%b); b:=b&$(!A,; CP:=1 else% if(CP=3)%then% if('m:,B(/))%then% CP:=0 !()!% CP:=4 !()!% P8:(/3%b); Ci)i,(b); b:=b&$+i"@,; CP:=1

Structuri de date

7. Datele 9n algoritmi
/ ist c&iva termeni cu care se opereaz frecvent $n proiectarea unui algoritm, termeni pe care $i vom defini $n r&ndurile urmtoare. *rintre acetia, amintim: structura de dat! obiectul de dat! tipul de dat! reprezentarea datei.
DE DAT6

TIPU&

/ste un termen ce se refer la Ofelurile de dateO pe care o variabil le poate avea

$ntr%un program i este str&ns legat de implementarea $ntr%un limba) de programare a unei structuri de dat. 8e e emplu, $n limba)ul *ascal, e ist c&teva tipuri elementare de dat ( real( integer( c-ar( file) dar i tipuri de date compuse. 9n limba)ul &ISP, structura fundamental este lista. # alt posibilitate este aceea de a pune $mpreun tipuri de date diverse i a le $mpac(eta pentru a obine un tip nou, compus, numit str ct r+ $n C i 5a"a (recor! $n *ascal). .3IECTU&
DE DAT6

*rin acest termen se refer o instaniere a unei variabile cu o valoare, deci

obiectul de dat este caracterizat prin coninutul unei variabile i poate avea valori dintr%o mulime oarecare D. 8e obicei, obiectul de dat ne duce cu g&ndul la coninutul memoriei calculatorului. E$E%P&U #biectul de dat numere $ntregi 8 2 P", ,, 4, ...Q! #biectul de dat ir de caractere 8 2 POO, O.O,OIO,..,O.IO,...Q! STRUCTURA DE DAT6 /ste un cvadruplet SD 2 PD, !, F, AQ $n care D 2 o mulime de domenii ! D este un domeniu (impropriu notat la fel ca i structura de date) F 2 o mulime de funcii A 2 o mulime de a iome E$E%P&U -tructura de date N, mulimea numerelor naturale SDNatno2PD, !, F, AQ cu: d 2 N.MN# 82PN.MN#, I##A/.NQ F conine urmtoarele funcii:

R/S#() N.MN# I-R/S#(N.MN#) I##A/.N -'66(N.MN#) N.MN# ,"

Structuri de date .88(N.MN#, N.MN#) N.MN# /E(N.MN#, N.MN#) I##A/.N . conine urmtoarele a iome:

() , T N.MN# I-R/S#(R/S#()) : = MS'/ I-R/S#(-'66( )) : = F.A-/ .88(R/S#(), ) : = .88(-'66( ), T) : = -'66(.88( , T)) /E(R/S#(), ) : = If I-R/S#( ) M(en MS'/ /lse F.A-/ /E(R/S#(), -'66( )) : = F.A-/ /E(-'66( ), -'66(T)): = /E( , T) I%P&E%ENTAREA UNEI STRUCTURI DE DAT6 . .cest termen se refer la o funcie : SD1 SD* unde SD1 i SD* sunt structuri de dat. 8e e emplu, implementarea structurii de dat numr $ntreg pe 4 octei $n limba)ul *ascal este sub forma tipului de dat :or!, $n care (R/S#()) 2 ", (-'66(R/S#())) 2 ,, etc.

8. C m scriem n algoritm
8e regul, un programator mediu scrie $ntre ," i 1" linii de cod pe zi. 'n programator bun $ns, scrie mult mai mult i are nite reguli $n activitatea sa. / ist c&teva modele ale procesului de proiectare soft?are bazate pe principii solide i care cuprind $n mare toate activitile ce au loc de%a lungul unui astfel de proces. +om alege un model simplu, didactic ce cuprinde cinci faze ale proiectrii unui algoritm, astfel: stabilirea cerinelor! proiectarea algoritmului! analiza! codificarea! testarea.

+om lua pe r&nd fiecare din aceste etape specific&nd c&teva trsturi: ,. Sta'ilirea cerin;elor0 trebuie s stabilim riguros cerinele algoritmului i care sunt datele de intrare i de ieire. 4. Proiectarea algoritm l i0 este fcut independent de limba)ul de programare! $n aceast faz trebuie identificate conceptele cu care se opereaz, proprietile (atributele) i serviciile pe care acestea trebuie s le ofere i apoi toate acestea vor fi materializate $n algoritm sub form de ,,

Structuri de date obiecte (e . un polinom, o matrice, un labirint)! pentru fiecare obiect trebuie identificate operaiile efectuate asupra lui i scrise procedurile (funciile) necesare. *entru algoritmii distribuii trebuie luat $n calcul localizarea obiectelor, sincronizarea, mecanismele de acces i protecie la date. :. Anali<a0 de obicei pornete de la $ntrebarea O/ ist i ali algoritmiUO! dac rspunsul la $ntrebare este afirmativ (i de cele mai multe ori este), atunci se vor compara algoritmii $ntre ei $n ceea ce privete funciile de operaii, de locaii, uurina $n $nelegere, etc! e ist un set de metrici bine stabilite care msoar diferii indicatori ai unui algoritm, metrici numite metrici soft:are. 3. Co!ificarea! presupune scrierea algoritmului $ntr%un limba) de programare, folosind facilitile acelui limba). 1.

=erificarea0 de obicei, aceast etap are la r&ndul ei trei subfaze i anume: demonstrarea corectitudinii (de cele mai multe ori se face matematic)! testarea (rularea programului cu date de intrare diferite)! depanarea (identificarea erorilor de proiectare i $ndeprtarea lor).

E$E%P&U& 7. Sortarea a n n mere - se scrie o subrutin care sorteaz cresctor un vector de n numere. # soluie ar fi aceea care, din $ntregii rmai nesortai, la fiecare pas, gsete cel mai mic i $l pune $n urmtoarea poziie a listei sortate conform urmtoarei sc(eme:
INPUT:%n3%(0FiG)%i=1..n OUTPUT:%(0FiG)%i=1..n For%i%1%To%n%Do egin !4amin!aD5%;!c,8+7(%0FiG%..%0FnG% >i%"5)!>,!%c!(%mai%mic3%0FHG in,!+)c@imba%0FHG%c7%0FiG !nd

9n limba) pseudocod putem scrie ideea algoritmului sc(iat anterior pentru aceast problem dup cum urmeaz:
1 2 3 4 5 6 7 8 9 10 11 Proced"re%/8+,(03n) egin For%i%1%To%n%Do egin H%%i For%I%%HJ1%To%n%Do If%(0FIG%#%0FHG)%Then H%%I !nd ,%%0FiG%% 0FiG%%0FHG%

,4

Structuri de date
12 13 14 0FHG%, !nd

!nd%

.v&nd $n fa acest fragment $n pseudocod, este simplu s $l transpunem $n limba) C (vom presupune e istena unui tip predefinit T al elementelor de intrare):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 t#$edef%T%C!c,8+FM0K_'?'MG;% %oid%/8+,(C!c,8+ 03%int%n) L int%nIn-!413%nIn-!423%nMinP8); T%,074; for(nIn-!41=0;%nIn-!41#n;%nIn-!41JJ) L nMinP8)%=%nIn-!41; for(nIn-!42=%nMinP8);%nIn-!42#n;%nIn-!42JJ) if(0FnIn-!42G%#%0FnIn-!41G)% nMinP8)%=%nIn-!42; ,074%=%0FnIn-!41G; 0FnIn-!41G%=%0FnMinP8)G; 0FnMinP8)G%=%,074; M M

9ntrebrile la care vom $ncerca s rspundem $n legtur cu acest algoritm sunt: /ste corect U 6are este eficiena algoritmului U

A> C.RECTITUDINE *entru a demonstra corectitudinea algoritmului de sortare, vom demonstra urmtoarea PR.P.?IIE $rocedura SO%&'(, n) sorteaz corect o mulime de n * numere, rezultatul rmnnd n (+*..n, astfel nct (+*, (+-, ... (+n,. DE%.NSTRAIE 8ac n 2 , este evident c nu se e ecut nici o instruciune din bucla for, deci vectorul rm&ne sortat. 9n final, s observm c $n liniile G % ,4 se calculeaz indicele elementului ma im din irul .ViW, .ViD,W,...,.VnW, deci, dup liniile de intersc(imbare ,: % ,1 are loc relaia:
0FiG%=%minL0FIGN%I%= i,..., n M

ceea ce demonstreaz corectitudinea algoritmului de sortare. *entru a demonstra corectitudinea unui algoritm iterativ trebuie realizate urmtoarele: -e determin o specificaie pentru ieirea algoritmului ca funcie de mulimea de intrare (de e emplu )7m(43B)=%4JB; -e determin i se separ ciclurile algoritmului $ncep&nd cu cele interioare ($n cazul ciclurilor imbricate)!

,:

Structuri de date *entru fiecare ciclu se determin un invariant al ciclului (relaie matematic permanent adevrat ce are loc $ntre variabilele ciclului) care rm&ne adevrat la fiecare iteraie i se identific BprogresulC variabilelor $n ciclu! -e demonstreaz faptul c proprietatea invariant este verificat! de obicei aceasta se face prin inducie dup numrul de iteraii! -e folosete proprietatea invariant pentru a demonstra c algoritmul se termin dup un numr finit de pai! -e folosete proprietatea invariant i condiia de terminare a ciclului pentru a demonstra c algoritmul calculeaz corect rezultatul conform specificaiei de la $nceput. 3> EFICIEN6 9ntotdeauna, eficiena se refer la relaia cu ali algoritmi (dac e ist). +a trebui s stabilim care este mai bun din punct de vedere al numrului de operaii, motiv pentru care orice analiz de eficien are la baz calculul numrului total de operaii efectuate $n cursul desfurrii algoritmului. +om $mpri operaiile $n patru categorii, $n funcie de comple itatea lor, $n : atribuiri! adunri < scderi! $nmuliri < $mpriri! comparaii.

*entru a analiza numrul de operaii va trebui s reprezentm algoritmul sub form de sc(em logic ca $n Figura H. .cum avem toate elementele necesare pentru construirea tabelului cu frecvena operaiilor elementare.
Atri' iri n%J%1%(:,+%i) n%(:,+%H) n%O%i%(:,+%I) %(:,+%H)%c7% %%n&i&1 3%(:,+%i) A! n+ri n%(:,+%i) n%&%i%(:,+%I) Compara;ii n%J%1%(:,+%i) n%&%i%(:,+%I) n%&%i%&%1%(:,+%aFIG)

iar prin adunarea acestora obinem e presia funciei de operaii T


T/8+,(n)4n + 2 + 2

/8+,

(n)

dat de:
2

i= 1 n

(n i 1)+3

i= 1 n

(n i)+

5n 3=
i= 1 n

+5n +4 2

i
T/8+,(n)4n + 2 +

i= 1

(n i 1)+ 3

i= 1

(n i)+

i= 1

3=

4n2 +6n +8 2

,3

Structuri de date Funcia de locaii (cantitatea de memorie folosit pentru variabilele locale algoritmului) va fi ?/8+,(n)= 4 % adic este constant, deoarece avem doar 3 variabile suplimentare (i( @( A( t).
P1OC'DU1'%/O1T(0F1:nG)

i%:=%1

i%#=%n i%:=%iJ1 T H%:=%i 0FHG:=%, I%:=%HJ1 0FiG:=0FHG ,%:=%0FiG F I%#=%n

F 1'TU1N

I%:=%HJ1

T F 0FIG#=0FHG T H%:=%I

Figura H. -c(ema logic pentru procedura -#SM

*entru a caracteriza algoritmii, trebuie s caracterizm funcia de operaii T specific fiecrui algoritm. 8e obicei, dac mulimea de intrare are dimensiunea n, atunci funcia de operaii se noteaz cu TBn>, iar dac ali parametrii variabili intr $n calcul, i acetia se pun $ntre paranteze l&ng n.

,1

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