Sunteți pe pagina 1din 46

Proiectarea algoritmilor

Analiza complexitii algoritmilor

Scopul analizei
Aprecierea calitii unui algoritm, prin
determinarea resurselor necesare pentru
execuia algoritmului pe o main de calcul.
Prin resurse necesare se nelege:

Spaiul maxim de memorie necesar pentru


execuia algoritmului. Trebuie luat n considerare
situaia alocrii dinamice a memoriei, cnd
aceasta poate avea valori diferite n puncte diferite
ale algoritmului.
Timpul necesar pentru execuia tuturor operaiilor
cuprinse n algoritm.
2

Volumul de resurse
n majoritatea situaiilor, volumul de resurse necesar
pentru execuia unui algoritm depinde de dimensiunea
problemei de rezolvat.
Aceasta este determinat, n principal, de volumul
datelor de intrare.
n cazul cel mai general acest lucru este dat numrul
de bii necesari pentru memorarea datelor.
Dac se prelucreaz o valoare numeric, n (de ex.
dac se verific c numrul n este prim) atunci ca
dimensiune a problemei se consider numrul de bii
necesari pentru reprezentarea lui n, adic [log2n]+1.

Dimensiunea problemei
Uneori dimensiunea problemei depinde de
tipul prelucrrii.
De exemplu la prelucrarea unui text, dac
prelucrrile se fac la nivel de cuvnt, dimensiunea problemei este dat de numrul de
cuvinte.
Dac prelucrrile se fac la nivel de caracter
atunci dimensiunea problemei este dat de
numrul de caractere.

Spaiul de memorie

Spaiul de memorie necesar pentru memorarea


datelor este influenat de modul de reprezentarea
datelor.
De exemplu o matrice 100 x 100 care are numai 50
de elemente nenule (matrice rar) poate fi memorat
n mai multe feluri:
Tablou 100 x 100, cu 10000 locaii de memorie.
Tablou 50 x 3, cu trei coloane, indicnd linia,
coloana i valoarea.
Rezult 150 de locaii de memorie.

Timpi de execuie

Notm cu T(n) timpul de execuie al unui algoritm


pentru rezolvarea unei probleme de dimensiune n.
Pentru a stabili timpul de execuie trebuie propus un
model de calcul i o unitate de msur.
Vom considera un model de calcul (numit i main de
calcul cu acces aleator) caracterizat prin:
prelucrrile se efectueaz n mod secvenial;
operaiile elementare se execut n acelai timp
indiferent de valoarea operanzilor;
timpul de acces la o informaie nu depinde de poziia
acesteia (de exemplu, ntr-un ir de caractere timpul
de acces este acelai pentru orice element din ir);

Unitate de msur
Se stabilesc operaiile elementare i se
consider ca unitate de msur timpul de
execuie a acestora.
Timpul total de execuie va fi dat de numrul
operaiilor elementare.
Operaiile elementare sunt cele aritmetice
(adunare, scdere, nmulire, mprire),
comparaiile ntre dou valori, operaiile logice
(AND , OR , NOT).

Scopul calculului timpului de execuie


este acela de a compara calitatea
algoritmilor;

Timpul de execuie al ntregului


algoritm se obine nsumnd timpii de
execuie a prelucrrilor componente.

Este

suficient uneori s se contorizeze


doar anumite tipuri de operaii elementare,
numite operaii de baz;
De exemplu n operaii de sortare se pot
considera doar operaiile de comparare i
mutare a elementelor) i/sau s se
considere c timpul de execuie a acestora
este unitar (este acelai pentru toate
operaiile;
Se tie c operaiile de nmulire i
mprire sunt mai costisitoare ca cele de
adunare sau scdere).

Exemplu:Calculului i, i=1,..n

Dimensiunea acestei probleme este n.


Algoritmul de rezolvare este:

Suma(n)
1: S 0
2: i 1
3: WHILE i n DO
4:
SS+i
5:
i i+ 1
RETURN S
10

n algoritmul de mai sus operaiile care sunt contorizate sunt


numerotate.
Timpul de execuie al algoritmului poate fi determinat folosind
tabelul de costuri:

Operaie

Cost

Nr. repetri

c1

c2

c3

n+1

c4

c5

nsumnd timpii de execuie se obine:


T(n) = c1+ c2+n( c3+ c4+ c5)+ c3 =
=n( c3+ c4+ c5)+c1+c2+c3=k1n+k2
Adic, timpul de execuie este proporional cu dimensiunea problemei.
Se observ c valoarea costurilor
operaiilor elementare influeneaz doar
constantele care intervin n T(n).

12

Prelucrarea repetitiv de mai sus poate fi nlocuit cu


1. s 0
2. FOR i n,1 DO
3.
s s+i;
RETURN s;
.
n acest caz, T(n) = c1+ c2 +c3 (n+1)+nc5.
De remarcat c instruciunea FOR se repet de
n+1 ori, datorit controlului limitelor pentru contor.
Dac incrementarea lui i i controlul depirii valorii
n au acelai cost (= 1), atunci ciclul FOR cost
2(n+1), pentru o bucl care se repet de n ori.

Exemplul 2
C[m,p]=A[m,n] * B[n,p]
n acest caz dimensiunea problemei este
dat de trei valori (m,n,p).
Produs (a,b,m,n,p)
1. For i=1,m Do
2. For j=1,p Do
3. c[i,j] 0
4. For k=1,n Do
5. c[i,j] c[i,j]+ a[i,k]*b[k,j];
Return c;

Costul

prelucrrilor de pe
liniile 1,2 i 4 reprezint
costul gestiunii contorului i
va fi tratat global.
Presupunnd c toate
operaiile aritmetice i de
comparare au acelai cost
unitar, tabelul costurilor
este:
Rezult timpul de execuie:
T(m,n,p)=4mnp+5mp+4m+2

Operaie

Cost

Nr. repetri

2(m+1)

2(p+1)

mp

2(n+1)

mp

mpn

15

n practic nu este necesar o analiz att


de detaliat, ci este suficient s se
identifice operaia de baz i s se
estimeze numrul de repetri ale acestuia.
Prin operaia de baz se nelege operaia
care contribuie cel mai mult la timpul de
execuie al algoritmului i este operaia ce
apare n ciclul cel mai interior.
n exemplul de mai sus se poate considera
ca operaie de baz operaia de nmulire.
n acest caz costul execuiei algoritmului ar
fi: T(n,m,p)=mnp.

16

Timpul mediu de execuie

Reprezint valoarea medie a timpul de execuie al unui


algoritm atunci cnd datele de intrare sunt repartizate
probabilistic pe domeniul lor de existen.
Dac reprezint numrul variantelor posibile pentru

(n)

datele de intrare, Pk reprezint probabilitatea de apariie a


variantei k, iar Tk(n) reprezint timpul de execuie
corespunztor variantei k, atunci timpul mediu de execuie
este dat de relaia:

Tm (n)

(
n)

Tk (n)Pk
k 1

Dac toate cazurile sunt echiprobabile, atunci:

Pk

, 1,2,.., (n)

k
(n)
(n)

(n)
T
k

Tm (k )

k 1

(n)

Exemplu
Problema cutrii unei valori ntr-un ir x1, x2,
..,xn, de elemente distincte.
Vom calcula timpul mediu n ipoteza c
valoarea v se poate afla n oricare din poziiile
din ir cu aceeai probabilitate.
Pentru c avem n cazuri pentru poziionarea
n ir i nc un caz n care valoarea nu se afl
n ir, atunci

(n) n 1

Rezult:

Timpul corespunztor cazului n care valoarea v


se afl pe poziia k este: Tk(n)= 5(k+1),
iar timpul pentru cazul n care valoarea v nu se
afl n ir este:
Tn(n+1)= 5(n+1).

21

Problema principal n asemenea situaii o


constituie stabilirea distribuiei datelor de intrare.
De exemplu, pentru problema de mai sus s-ar putea
considera i ipoteza:
- p=0.5 valoarea v se afl n tablou, iar probabilitatea
de a se afla pe oricare din poziiile din ir este aceeai
1/n
- p=0.5 valoarea v nu se afl n tablou
n acest caz, timpul mediu de execuie este:

22

Se constat c timpul mediu de execuie


depinde de ipotezele acceptate pentru datele
de intrare i nu este o medie aritmetic ntre
timpul corespunztor cazului cel mai
nefavorabil i cel corespunztor cazului cel
mai favorabil.

Ordin de crestere
Pentru

a aprecia eficiena unui algoritm nu


este necesar cunoaterea exact a expresiei timpului de execuie.
Intereseaz mai mult modul n care variaz timpul de execuie o dat cu creterea
dimensiunii problemei.
O msur util n acest sens este ordinul
de cretere.

Acesta este determinat de termenul


dominant din expresia T(n) n funcie
de dimensiunea n a problemei.
Este justificat de faptul c pentru n
mare, termenii diferii de cel dominant
sunt neglijabili.

Exemplul 1
Dac T(n) = an + b, (a > 0) atunci la
creterea lui n de k ori, termenul dominant
crete i el de k ori,
T(kn) = akn + b.
n acest caz avem o dependen liniar a
ordinului de cretere.

Exemplul 2
Dac T(n) = an2 + bn+c, (a > 0) atunci la
creterea lui n de k ori, termenul dominant
crete de k2 ori,
2
2
T(kn) = ak n + bkn+c.
n acest caz avem o dependen ptratic a
ordinului de cretere.

Exemplul 3
Dac T(n) = alg n, atunci
T(kn) = alg n +alg k, adic n acest
caz termenul dominant nu se
modific, timpul de execuie crescnd
cu o constant.
S precizm c prin lg n nelegem
log2 n.

Exemplul 4

Dac T(n) = a2n atunci


T(kn) = a2k2n= a(2n)k, adic
termenul dominant crete
exponenial.

29

ntruct problema eficienei este important


la valori mari ale lui n (teoretic n ),
analiza complexitii intereseaz doar n
asemenea situaii.
Considerarea numai a termenului
dominant.
Acest tip de analiz = analiz asimptotic.
n cadrul analizei asimptotice se consider
c un algoritm este mai eficient dect altul
dac ordinul de cretere al timpului de
execuie al primului este mai mic dect
ordinul de cretere al celui de-al doilea.

30

Relaia

ntre ordinele de cretere are


semnificaie doar pentru dimensiuni mari
ale problemei.
Dac considerm timpii:
T1(n)
= 10n + 10 i
T2(n)
= n2, atunci se observ cu uurin ca
T1(n)

> T2(n) pentru n 10, dei ordinul de


cretere al lui T1 este mai mic dect al lui
T2.

Notaii asimptotice- gruparea alg. n clase n


functie de timpii de execuie
1.

Notaia
Pentru o funcie g: NR+

Despre timpul de execuie al unui algoritm, T(n),


spunem c este (g(n)) dac T(n) (g(n))

n practic se mai folosete notaia


abuziv
T(n)= (g(n)).

Practic, prin notaia f(n)


g(n) nseamn c f(n) i g(n)
sunt asimptotic echivalente.

Matematic, acest lucru se traduce prin:

Exemplu: S considerm funcia


2
2
f(n)=n +5nlgn+10 i g(n)=n .
Cu constantele c1=1 i c2=4 vom verifica grafic
pentru ce valori ale lui n, are loc inegalitatea

34

n fig. sunt reprezentate cele 3 funcii pentru


n 10 - Fig.1

Cele 3 funcii pentru n 50. Fig.2

36

Observaii
Din fig.1 se poate vedea c este suficient s
considerm n > n0= 4 pentru ca relaia
0 c1g(n) f(n) c2g(n)
s fie respectat.
Pentru valori mari, aa cum rezult din fig.2,
condiia este respectat.

37

Notaia O

Pentru o funcie g: NR+, O(g(n)) reprezint


mulimea de funcii:

Aceasta permite descrierea comportrii unui


algoritm n cazul cel mai defavorabil, fr a se
face referire la celelalte situaii.

ntruct intereseaz comportarea


algoritmului pentru date arbitrare, este
suficient s specificm o margine
superioar pentru timpul de execuie.
Dac f(n) O(g(n)) nseamn c f(n)
crete asimptotic la fel de repede ca g(n).

Adic:

k>0

Din definiiile lui i O rezult c


O(g(n)) incluziunea fiind strict.

(g(n))
Prin urmare dac T(n)= (g(n)) atunci

T(n)= O(g(n))

Notaia

Pentru o funcie g: NR+, (g(n)) reprezint


mulimea de funcii:

Aceast funcie este o msur a ordinului de


cretere a timpului de execuie n cazul cel mai
favorabil;
Dac
nseamn c f(n) crete
asimptotic cel puin la fel ca g(n) adic:

infinit.

, k>0, iar limita putnd fi i

43

Clase de complexitate

n ierarhizarea algoritmilor dup ordinul de


complexitate se ine cont de urmtoarele
proprieti ale funciilor ce intervin cel mai
frecvent n analiz:

44

45

Observaie

Algoritmii din clasele exponenial i


factorial pot fi utilizai doar pentru probleme
de dimensiune mic.

46