Documente Academic
Documente Profesional
Documente Cultură
SD 2014/2015
Continut
FII, UAIC
Curs 3
SD 2014/2015
2 / 39
Clase de eficient, a
Clasa
logaritmic
Notat, ie
O(log n)
Exemplu
cautare binara
liniar
O(n)
patratic
O(n2 )
cubic
O(n3 )
exponent, ial
O(2n )
factorial
O(n!)
FII, UAIC
Curs 3
SD 2014/2015
3 / 39
Scop:
I
compararea algoritmilor;
FII, UAIC
Curs 3
SD 2014/2015
4 / 39
Se implementeaza algoritmul.
Se analizeaza rezultatele.
FII, UAIC
Curs 3
SD 2014/2015
5 / 39
Continut
FII, UAIC
Curs 3
SD 2014/2015
6 / 39
Continut
FII, UAIC
Curs 3
SD 2014/2015
7 / 39
Funct, ii recursive
FII, UAIC
Curs 3
SD 2014/2015
8 / 39
Funct, ii recursive
FII, UAIC
Curs 3
SD 2014/2015
9 / 39
Funct, ii recursive
Exemplul 1. Definit, ia funct, iei factorial:
I
Cazul de baza: 0! = 1;
Function factorial(n)
begin
if n <= 1 then
return 1
else
return (n factorial(n 1))
end
FII, UAIC
Curs 3
SD 2014/2015
10 / 39
FII, UAIC
Curs 3
SD 2014/2015
11 / 39
Curs 3
SD 2014/2015
11 / 39
Function factorial(n)
begin
produs 1
while n > 1 do
produs produs n
n n1
return produs
end
FII, UAIC
Curs 3
SD 2014/2015
12 / 39
f (0) = 0, f (1) = 1,
Function fib(n)
begin
if n <= 1 then
return n
else
return fib(n 1) + fib(n 2)
end
FII, UAIC
Curs 3
SD 2014/2015
13 / 39
O(n )
FII, UAIC
Curs 3
SD 2014/2015
14 / 39
Numar de apeluri
fib(n)
apeluri
24
46368
150049
42
267914296
866988873
43
433494437
1402817465
FII, UAIC
Curs 3
SD 2014/2015
15 / 39
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
FII, UAIC
Curs 3
SD 2014/2015
16 / 39
60
Ruby
Scheme
Python
C
Java
C-gcc
(Python) Fibonacci iterativ
40
20
0
20
FII, UAIC
40
60
80
Curs 3
SD 2014/2015
17 / 39
FII, UAIC
Curs 3
SD 2014/2015
18 / 39
Curs 3
SD 2014/2015
19 / 39
Continut
FII, UAIC
Curs 3
SD 2014/2015
20 / 39
FII, UAIC
Curs 3
SD 2014/2015
21 / 39
FII, UAIC
Curs 3
SD 2014/2015
22 / 39
FII, UAIC
Curs 3
SD 2014/2015
22 / 39
FII, UAIC
Curs 3
SD 2014/2015
22 / 39
Curs 3
SD 2014/2015
22 / 39
FII, UAIC
Curs 3
SD 2014/2015
23 / 39
Evitarea capcanelor
Exemplu: T (n) = 2T (bn/2c) + n
Demonstram fals ca T (n) = O(n) ghicind T (n) cn s, i
argumentand:
T (n) 2(cbn/2c) + n
cn + n
= O(n), fals!!
Eroarea: nu am demonstrat forma exacta a ipotezei inductive.
FII, UAIC
Curs 3
SD 2014/2015
24 / 39
Schimbare de variabila.
Exemplu: T (n) = 2T (bsqrt(n)c) + log n
Simplificam recurent, a printr-o schimbare de variabila m = log n.
T (2m ) = 2T (2m/2 ) + m
Redenumim S(m) = T (2m ), s, i avem S(m) = 2S(m/2) + m.
S(m) = O(m log m),
T (n) = T (2m ) = S(m) = O(m log m) = O(log n log log n).
FII, UAIC
Curs 3
SD 2014/2015
25 / 39
Continut
FII, UAIC
Curs 3
SD 2014/2015
26 / 39
2. Arborele de recursie
Arborele de recursie:
FII, UAIC
Curs 3
SD 2014/2015
27 / 39
direct
a
I
I
I
invers
a
I
FII, UAIC
Curs 3
SD 2014/2015
28 / 39
T (n) =
FII, UAIC
0,
n=0
T (n 1) + 1, n > 1
Curs 3
SD 2014/2015
29 / 39
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
FII, UAIC
Curs 3
SD 2014/2015
29 / 39
T (n) =
0,
n=0
T (n 1) + 1, n > 1
Iterare directa
Iterare inversa
T (1) = 0
T (2) = 1
T (3) = 2
...
T (n) = n 1
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
FII, UAIC
Curs 3
SD 2014/2015
29 / 39
X
3
n
( )i + (nlog4 3 xT (1))
4
i=0
= 4n + (nlog4 3 xT (1))
= O(n)
Observat, ie: utilizarea seriilor geometrice:
1 + x + x 2 + ... + x n =
FII,2UAIC
1x n+1
1x ,
pentru x 6= 1
Curs 3
SD 2014/2015
30 / 39
FII, UAIC
Curs 3
SD 2014/2015
31 / 39
FII, UAIC
Curs 3
SD 2014/2015
31 / 39
FII, UAIC
Curs 3
SD 2014/2015
32 / 39
FII, UAIC
Curs 3
SD 2014/2015
33 / 39
3
3
3 2
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 )
=
FII, UAIC
Curs 3
SD 2014/2015
34 / 39
FII, UAIC
Curs 3
SD 2014/2015
35 / 39
Continut
FII, UAIC
Curs 3
SD 2014/2015
36 / 39
3. Teorema Master
I
Teorema Master:
Fie a 1 s, i b > 1 constante, f (n) o funct, ie s, i T (n) definita pe
numere ntregi nenegative prin relat, ia de recurent, a:
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 log n).
3. Daca f (n) = (nlogb a+ ) pentru > 0 constant, s, i daca
af (n/b) cf (n) pentru c < 1 s, i n suficient de mare, atunci
T (n) = (f (n)).
FII, UAIC
Curs 3
SD 2014/2015
37 / 39
T (n) = 9T (n/3) + n
a = 9, b = 3, f (n) = n s, i 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 s, i nlogb a = nlog3/2 1 = n0 = 1.
Cum f (n) = (nlogb a ) = (1), putem aplica cazul 2 al teoremei
master T (n) = (log n).
FII, UAIC
Curs 3
SD 2014/2015
38 / 39
Curs 3
SD 2014/2015
39 / 39