Sunteți pe pagina 1din 40

Curs 3.

Analiza eficientei algoritmilor.

Octombrie, 2013

Continut

Analiza eficientei algoritmilor

Analiza functiilor recursive


Functii recursive
Metoda substitutiei
Arborele de recursie
Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

2 / 40

Clase de eficienta

Clasa
logaritmic
liniar
patratic
cubic
exponential

Notatie
O(lgn)
O(n)
O(n2 )
O(n3 )
O(2n )

factorial

O(n!)

Structuri de date ()

Exemplu
Cautare binara
Cautare secventiala
Sortare prin insertie
Inmultirea a doua matrici nxn
Prelucrarea submultimilor unei multimi
cu n elemente
Prelucrarea permutarilor de ordin n

Curs 3

Octombrie, 2013

3 / 40

Analiza empirica a eficientei algoritmilor

Utilizata atunci cand analiza teoretica a eficientei este dificila

Scop:

formularea unei ipoteze initiale privind eficienta algoritmului


compararea algoritmilor
analiza eficientei unei implementari
verificarea unei afirmatii privind eficienta

Structuri de date ()

Curs 3

Octombrie, 2013

4 / 40

Analiza empirica a eficientei algoritmilor

Se stabileste scopul analizei

Se alege o masura a eficientei (exemplu: numarul de executii ale unor


operatii, timpul, etc.)

Se stabilesc caracteristicile setului de date de intrare

Se implementeaza algoritmul

Se genereaza datele de intrare

Se executa programul pentru toate datele de intrare; se inregistreaza


rezultatele

Se analizeaza rezultatele

Structuri de date ()

Curs 3

Octombrie, 2013

5 / 40

Continut

Analiza eficientei algoritmilor

Analiza functiilor recursive


Functii recursive
Metoda substitutiei
Arborele de recursie
Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

6 / 40

Continut

Analiza eficientei algoritmilor

Analiza functiilor recursive


Functii recursive
Metoda substitutiei
Arborele de recursie
Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

7 / 40

Functii recursive

Functia f() apeleaza direct functia g() daca in definitia lui f() exista
un apel la g()

Functia f() apeleaza indirect functia g() daca f() apeleaza direct o
functie h(), iar h() apeleaza direct sau indirect functia g()

Functia f() este definita recursiv daca ea se auto-apeleaza direct sau


indirect

Structuri de date ()

Curs 3

Octombrie, 2013

8 / 40

Functii recursive

Definitia unei functii recursive cuprinde:

Testarea cazului de baza conditia de oprire a apelului recursiv

Apelul recursiv (cazul general): o variabila (intreaga) este transmisa


ca parametru functiei insasi, in asa fel ca dupa un numar de pasi sa se
atinga cazul de baza

Exista si functii recursive fara parametri

Structuri de date ()

Curs 3

Octombrie, 2013

9 / 40

Functii recursive

Exemplul 1. Definitia functiei factorial:

Cazul de baza: 0! = 1
Cazul general: n! = n ((n 1)!), n > 0

Function factorial(n)
begin
if n <= 1 then
return 1
else
return (n factorial(n 1))
end

Structuri de date ()

Curs 3

Octombrie, 2013

10 / 40

factorial(n) - apel recursiv

algoritmii recursivi: usor de implementat

costuri suplimentare: la fiecare apel recursiv se plaseaza o serie de


informatii intr-o zona de memorie specifica (stiva programului)
Structuri de date ()

Curs 3

Octombrie, 2013

11 / 40

factorial(n) - varianta iterativa

Function factorial(n)
begin
produs 1
while n > 1 do
produs produs n
n n1
return produs
end

Valoarea returnata de factorial(n) este corecta doar pentru valorile lui


n pentru care n! INT MAX

Structuri de date ()

Curs 3

Octombrie, 2013

12 / 40

Exemplul 2. Recursie vs. iteratie: Fibonacci recursiv

Sirul lui Fibonacci

f (0) = 0, f (1) = 1,
f (n) = f (n 1) + f (n 2), n > 1

Function fib(n)
begin
if n <= 1 then
return n
else
return (fib(n 1) + fib(n 2))
end

Structuri de date ()

Curs 3

Octombrie, 2013

13 / 40

Fibonacci recursiv: arbore apeluri

Structuri de date ()

Curs 3

Octombrie, 2013

14 / 40

Numar de apeluri

n
2
24
42
43

Structuri de date ()

fib(n)
1
46368
267914296
433494437

Curs 3

apeluri
3
150049
866988873
1402817465

Octombrie, 2013

15 / 40

Recursie vs. iteratie: Fibonacci iterativ

Function ifib(n)
begin
f00
f11
if n <= 1 then
return n
else
for k 2 to n do
temp f 1
f1f1+f0
f 0 temp
return f 1
end

Structuri de date ()

Curs 3

Octombrie, 2013

16 / 40

Comparatie Fibonacci recursiv/iterativ

timp de executie (secunde)

60
Ruby
Scheme
Python
C
Java
C-gcc
(Python) Fibonacci iterativ

40

20

0
20

Structuri de date ()

40

60

80

100 120 140 160 180 200


n

Curs 3

Octombrie, 2013

17 / 40

Exemplul 3. Cel mai mare divizor comun

Function cmmdc(m, n)
begin
if m == n then
return m
else
if m > n then
return cmmdc(m n, n)
else
return cmmdc(m, n m)
end

Structuri de date ()

Curs 3

Octombrie, 2013

18 / 40

Eficienta algoritmilor recursivi

Pentru estimarea timpului de executie:

se stabileste relatia de recurenta care exprima legatura dintre timpul de


executie corespunzator problemei initiale si timpul de executie
corespunzator problemei reduse
rezolvarea relatiei de recurenta

Exemplu: pentru calculul factorialului, relatia de recurenta pentru


timpul de
 executie este:
0,
n=0
T (n) =
T (n 1) + 1, n > 1

Structuri de date ()

Curs 3

Octombrie, 2013

19 / 40

Rezolvarea recurentelor

1. Metoda substitutiei: se ghiceste o limita si apoi se utilizeaza


inductia matematica pentru a demonstra corectitudinea
2. Arborele de recursie: converteste recurenta intr-un arbore (nodurile
reprezinta costuri)
3. Metoda master: furnizeaza limite pentru recurente de forma
T (n) = aT (n/b) + f (n)

Structuri de date ()

Curs 3

Octombrie, 2013

20 / 40

Continut

Analiza eficientei algoritmilor

Analiza functiilor recursive


Functii recursive
Metoda substitutiei
Arborele de recursie
Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

21 / 40

1. Metoda substitutiei

se ghiceste solutia

se utilizeaza inductia matematica pentru a determina constantele si


pentru a demonstra ca solutia functioneaza

Structuri de date ()

Curs 3

Octombrie, 2013

22 / 40

Metoda substitutiei - exemplu


Determinarea unei limite superioare pentru relatia T (n) = 2T (n/2) + n

Ghicim solutia: T (n) = O(nlgn)


Demonstram prin inductie ca T (n) cnlgn, pentru c > 0.
Presupunem ca limita are loc pentru toate valorile pozitive m < n, in
particular pentru m = n/2: T (n/2) cn/2lg (n/2).
T (n) 2(cn/2lg (n/2)) + n
cnlg (n/2) + n
= cnlgn cnlg 2 + n
= cnlgn cn + n
cnlgn, pentru c 1
Trebuie sa aratam ca solutia este valida si pentru conditiile limita.
T (1) = 1 c1lg 1 = 0
Cazuri de baza: T(2) si T(3) ( n0 = 2 )
T (2) = 4 si T (3) = 5, T (2) c2lg 2 si T (3) c3lg 3 c 2.
Structuri de date ()

Curs 3

Octombrie, 2013

23 / 40

Metoda substitutiei - subtilitati

scaderea unui termen de ordin inferior (pentru a consolida ipoteza


inductiva)
Exemplu: T (n) = T (n/2) + T (n/2) + 1

Ghicim solutia: T (n) = O(n).


Demonstram prin inductie ca T (n) cn, pentru c > 0.
T (n) cn/2 + cn/2 + 1
= cn + 1

Demonstram prin inductie ca T (n) cn d, d >= 0 const.


T (n) (cn/2 d) + (cn/2 d) + 1
= cn 2d + 1
cn d, pentru d 1
Trebuie sa alegem constanta c suficient de mare pentru a satisface
conditiile limita.

Structuri de date ()

Curs 3

Octombrie, 2013

24 / 40

Metoda substitutiei - subtilitati

evitarea capcanelor
Exemplu: T (n) = 2T (n/2) + n
Demonstram fals ca T (n) = O(n) ghicind T (n) cn si
argumentand:
T (n) 2(cn/2) + n
cn + n
= O(n), fals!!
Eroarea: nu am demonstrat forma exacta a ipotezei inductive.

Structuri de date ()

Curs 3

Octombrie, 2013

25 / 40

Metoda substitutiei - subtilitati

schimbare de variabile
Exemplu: T (n) = 2T (sqrt(n)) + lgn
Simplificam recurenta printr-o schimbare de variabile m = lgn.
T (2m ) = 2T (2m/2 ) + m
Redenumim S(m) = T (2m ), si avem S(m) = 2S(m/2) + m.
S(m) = O(mlgm),
T (n) = T (2m ) = S(m) = O(mlgm) = O(lgnlglgn).

Structuri de date ()

Curs 3

Octombrie, 2013

26 / 40

Continut

Analiza eficientei algoritmilor

Analiza functiilor recursive


Functii recursive
Metoda substitutiei
Arborele de recursie
Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

27 / 40

2. Arborele de recursie

Metoda substitutiei: probleme cu ghicirea solutiei

Arborele de recursie:

permite vizualizarea ieterarii unei recurente


fiecare nod reprezinta costul unei subprobleme
se calculeaza suma costurilor pe nivele si apoi se insumeaza aceste
costuri pentru a determina costul total al recursiei

Arborele de recursie poate fi utilizat pentru a genera o valoare buna


pentru metoda substitutiei

Structuri de date ()

Curs 3

Octombrie, 2013

28 / 40

Iterarea unei recurente

Iterarea relatiei de recurenta:


directa

se porneste de la cazul particular si se construiesc termeni succesivi


folosind relatia de recurenta
se identifica forma termenului general T (n)
se verifica prin calcul direct sau inductie matematica

inversa

se porneste de la cazul T (n) si se inlocuieste T (h(n)) cu valoarea


corespunzatoare, apoi se inlocuieste T (h(h(n))) si asa mai departe,
pana se ajunge la cazul particular
se efectueaza calculele si se obtine T (n)

Structuri de date ()

Curs 3

Octombrie, 2013

29 / 40

Iterarea unei recurente - exemplu n!

T (n) =

0,
n=0
T (n 1) + 1, n > 1

Iterare directa
T(1)=0
T(2)=1
T(3)=2
...
T(n)=n-1

Structuri de date ()

Iterare inversa
T(n)=T(n-1)+1
T(n-1)=T(n-2)+1
...
T(2)=T(1)+1
T(1)=0
- (+)
T(n)=n-1

Curs 3

Octombrie, 2013

30 / 40

Iterarea unei recurente - exemplu


T (n) = 3T (n/4) + n
n
n
T (n) = n + 3( ) + 3T ( )
4
16
n
n
n
= n + 3 + 9( + 3T ( ))
4
16
64
n
n
n
= n + 3 + 9 + 27T ( )
4
16
64
...

X
3
( )i + (nlog4 3 xT (1))
n
4
i=0

= 4n + (nlog4 3 xT (1))
= O(n)
Obs: serii geometrice
n+1
1 + x + x 2 + ... + x n = 1x
1x , pentru x 6= 1
1
, pentru |x| < 1
1 + x + x 2 + ... = 1x
Structuri de date ()

Curs 3

Octombrie, 2013

31 / 40

Arborele de recursie

Exemplu: T (n) = 3T (n/4) + (n2 )

cream arborele de recursie pentru relatia T (n) = 3T (n/4) + cn2 , c > 0

Structuri de date ()

Curs 3

Octombrie, 2013

32 / 40

Arborele de recursie - exemplu

Structuri de date ()

Curs 3

Octombrie, 2013

33 / 40

Arborele de recursie - exemplu

dimensiunea unei subprobleme corespunzatoare unui nod de adancime


i: n/4i dimensiunea subproblemei ajunge la n = 1 cand
n/4i = 1 i = log4 n arborele are log4 n + 1 nivele

numarul de noduri de la nivelul i: 3i


fiecare nod de la nivelul i are costul: c(n/4i )2
costul total al nodurilor de la nivelul i: 3i c(n/4i )2 = (3/16)i cn2
( ultimul nivel log4 n: nlog4 3 T (1) )

Structuri de date ()

Curs 3

Octombrie, 2013

34 / 40

Arborele de recursie - exemplu

3 2
3
3
cn + ( )2 cn2 + ... + ( )log4 n1 cn2 + (nlog4 3 )
16
16
16

T (n) = cn2 +
=

logX
4 n1

i=0

3 i 2
) cn + (nlog4 3 )
16

X
3
( )i cn2 + (nlog4 3 )
<
16
i=0

1
cn2 + (nlog4 3 )
1 (3/16)
16
= cn2 + (nlog4 3 )
13
= O(n2 )
=

Structuri de date ()

Curs 3

Octombrie, 2013

35 / 40

Arborele de recursie - exemplu

Utilizam metoda substitutiei pentru a verifica ca T (n) = O(n2 ) este o


limita superioara pentru relatia T (n) = 3T (n/4) + (n2 ).

aratam ca T (n) dn2 , pentru d > 0


T (n) 3T (n/4) + cn2
3dn/42 + cn2
3d(n/4)2 + c(n2 )
3 2
dn + cn2
=
16
dn2 , pentru d (16/13)c

Structuri de date ()

Curs 3

Octombrie, 2013

36 / 40

Continut

Analiza eficientei algoritmilor

Analiza functiilor recursive


Functii recursive
Metoda substitutiei
Arborele de recursie
Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

37 / 40

3. Teorema Master

Furnizeaza o metoda de rezolvare a recurentelor de forma


T (n) = aT (n/b) + f (n) unde a 1 si b > 1 sunt constante, iar f (n)
este o functie asimptotic pozitiva.

Teorema Master:
Fie a 1 si b > 1 constante, f (n) o functie si T (n) definita pe
numere intregi nenegative prin relatia de recurenta:
T (n) = aT (n/b) + f (n). Avem:
1. Daca f (n) = O(nlogb a ) pentru > 0 constant, atunci
T (n) = (nlogb a ).
2. Daca f (n) = (nlogb a ), atunci T (n) = (nlogb a lgn).
3. Daca f (n) = (nlogb a+ ) pentru > 0 constant, si daca
af (n/b) cf (n) pentru c < 1 si n suficient de mare, atunci
T (n) = (f (n)).
Structuri de date ()

Curs 3

Octombrie, 2013

38 / 40

Teorema Master - exemple

T (n) = 9T (n/3) + n
a = 9, b = 3, f (n) = n si nlogb a = nlog3 9 = (n2 )
Cum f (n) = O(nlog3 9 ), cu = 1, putem aplica cazul 1 al teoremei
master T (n) = (n2 )

T (n) = T (2n/3) + 1
a = 1, b = 3/2, f (n) = 1 si nlogb a = nlog3/2 1 = n0 = 1
Cum f (n) = (nlogb a ) = (1), putem aplica cazul 2 al teoremei
master T (n) = (lgn)

Structuri de date ()

Curs 3

Octombrie, 2013

39 / 40

Teorema Master - exemple

T (n) = 3T (n/4) + nlgn


a = 3, b = 4, f (n) = nlgn si nlogb a = nlog4 3 = O(n0.793 )
Cum f (n) = (nlog4 3+ ), cu 0.2, putem aplica cazul 3 al teoremei
master daca are loc conditia:
af (n/b) = 3(n/4)lg (n/4) (3/4)nlgn = cf (n) pentru c = 3/4 si n
suficient de mare. Rezulta T (n) = (nlgn)

Metoda master nu se poate aplica pentru T (n) = 2T (n/2) + nlgn


a = 2, b = 2, f (n) = nlgn si nlogb a = n
Cum f (n) = nlgn este asimptotic mai mare decat nlogb a = n, putem
aplica cazul 3 (fals!!).
f (n) nu este polinomial mai mare.
f (n)/nlogb a = (nlgn)/n = lgn este asimptotic mai mic decat n ,
pentru orice constanta pozitiva .
Structuri de date ()

Curs 3

Octombrie, 2013

40 / 40