Sunteți pe pagina 1din 40

Curs 3. Analiza ecientei algoritmilor.

Octombrie, 2013

Cont inut

Analiza ecientei algoritmilor

Analiza functiilor recursive Functii recursive Metoda substitutiei Arborele de recursie Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

2 / 40

Clase de ecienta

Clasa logaritmic liniar patratic cubic exponential factorial

Notatie O (lgn) O (n ) O (n 2 ) O (n 3 ) O (2n ) O (n!)

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

Structuri de date ()

Curs 3

Octombrie, 2013

3 / 40

Analiza empirica a ecientei algoritmilor

Utilizata atunci cand analiza teoretica a ecientei este dicila Scop:


formularea unei ipoteze initiale privind ecienta algoritmului compararea algoritmilor analiza ecientei unei implementari vericarea unei armatii privind ecienta

Structuri de date ()

Curs 3

Octombrie, 2013

4 / 40

Analiza empirica a ecientei algoritmilor

Se stabileste scopul analizei Se alege o masura a ecientei (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

Cont inut

Analiza ecientei algoritmilor

Analiza functiilor recursive Functii recursive Metoda substitutiei Arborele de recursie Teorema Master

Structuri de date ()

Curs 3

Octombrie, 2013

6 / 40

Cont inut

Analiza ecientei 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 denitia 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 denita recursiv daca ea se auto-apeleaza direct sau indirect

Structuri de date ()

Curs 3

Octombrie, 2013

8 / 40

Functii recursive

Denitia 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. Denitia 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 ecare apel recursiv se plaseaza o serie de informatii intr-o zon a de memorie specica (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 b(n) begin if n <= 1 then return n else return (b (n 1) + b (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

b(n) 1 46368 267914296 433494437

apeluri 3 150049 866988873 1402817465

Structuri de date ()

Curs 3

Octombrie, 2013

15 / 40

Recursie vs. iteratie: Fibonacci iterativ

Function ib(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


60 timp de executie (secunde) Ruby Scheme Python C Java C-gcc (Python) Fibonacci iterativ

40

20

0 20

40

60

80

100 120 140 160 180 200 n

Structuri de date ()

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

Ecienta 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

Cont inut

Analiza ecientei 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) c n/2lg (n/2). T (n) 2(c n/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 c 1lg 1 = 0 Cazuri de baza: T(2) si T(3) ( n0 = 2 ) T (2) = 4 si T (3) = 5, T (2) c 2lg 2 si T (3) c 3lg 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) c n/2 + c n/2 + 1 = cn + 1

Demonstram prin inductie ca T (n) cn d , d >= 0 const. T (n) (c n/2 d ) + (c n/2 d ) + 1 = cn 2d + 1 cn d , pentru d 1 Trebuie sa alegem constanta c sucient 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(c n/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 Simplicam 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

Cont inut

Analiza ecientei 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 ecare 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 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 identica forma termenului general T (n) se verica 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 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

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

Structuri de date ()

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 ...

n
i =0

3 ( )i + (nlog4 3 xT (1)) 4

= 4n + (nlog4 3 xT (1)) = O (n ) Obs: serii geometrice x n+1 1 + x + x 2 + ... + x n = 1 1x , pentru x = 1 1 1 + x + x 2 + ... = 1 x , pentru |x | < 1
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 ecare 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

T (n) = cn2 +
log4 n1

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

=
i =0

<
i =0

3 i 2 ) cn + (nlog4 3 ) 16

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

Structuri de date ()

Curs 3

Octombrie, 2013

35 / 40

Arborele de recursie - exemplu

Utilizam metoda substitutiei pentru a verica 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 3d n/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

Cont inut

Analiza ecientei 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) denita 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 sucient 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 sucient 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

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