Documente Academic
Documente Profesional
Documente Cultură
Curs 03
Curs 03
SD 2015/2016
Continut
FII, UAIC
Curs 3
SD 2015/2016
2 / 40
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 2015/2016
3 / 40
Scop:
compararea algoritmilor;
FII, UAIC
Curs 3
SD 2015/2016
4 / 40
Se implementeaza algoritmul.
Se analizeaza rezultatele.
FII, UAIC
Curs 3
SD 2015/2016
5 / 40
Continut
FII, UAIC
Curs 3
SD 2015/2016
6 / 40
Continut
FII, UAIC
Curs 3
SD 2015/2016
7 / 40
Funct, ii recursive
FII, UAIC
Curs 3
SD 2015/2016
8 / 40
Funct, ii recursive
FII, UAIC
Curs 3
SD 2015/2016
9 / 40
Funct, ii recursive
Exemplul 1. Definit, ia funct, iei factorial:
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 2015/2016
10 / 40
FII, UAIC
Curs 3
SD 2015/2016
11 / 40
Curs 3
SD 2015/2016
11 / 40
FII, UAIC
Curs 3
SD 2015/2016
12 / 40
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 2015/2016
13 / 40
O(n )
FII, UAIC
Curs 3
SD 2015/2016
14 / 40
Numar de apeluri
fib(n)
apeluri
24
46368
150049
42
267914296
866988873
43
433494437
1402817465
FII, UAIC
Curs 3
SD 2015/2016
15 / 40
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 2015/2016
16 / 40
60
Ruby
Scheme
Python
C
Java
C-gcc
(Python) Fibonacci iterativ
40
20
0
20
FII, UAIC
40
60
80
SD 2015/2016
17 / 40
FII, UAIC
Curs 3
SD 2015/2016
18 / 40
Curs 3
SD 2015/2016
19 / 40
Continut
FII, UAIC
Curs 3
SD 2015/2016
20 / 40
FII, UAIC
Curs 3
SD 2015/2016
21 / 40
FII, UAIC
Curs 3
SD 2015/2016
22 / 40
FII, UAIC
Curs 3
SD 2015/2016
22 / 40
FII, UAIC
Curs 3
SD 2015/2016
22 / 40
Curs 3
SD 2015/2016
22 / 40
FII, UAIC
Curs 3
SD 2015/2016
23 / 40
Evitarea capcanelor
Exemplu: T (n) = 2T (n/2) + n
Demonstram fals ca T (n) = O(n) ghicind T (n) cn s, i
argumentand:
T (n) 2(cn/2) + n
cn + n
= O(n), fals!!
Eroarea: nu am demonstrat forma exacta a ipotezei inductive.
FII, UAIC
Curs 3
SD 2015/2016
24 / 40
Schimbare de variabila.
Exemplu: T (n) = 2T (sqrt(n)) + 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 2015/2016
25 / 40
Continut
FII, UAIC
Curs 3
SD 2015/2016
26 / 40
direct
a
invers
a
FII, UAIC
Curs 3
SD 2015/2016
27 / 40
T (n) =
FII, UAIC
0,
n=1
T (n 1) + 1, n > 1
Curs 3
SD 2015/2016
28 / 40
T (n) =
0,
n=1
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 2015/2016
28 / 40
T (n) =
0,
n=1
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 2015/2016
28 / 40
X
3
n
( )i + (nlog4 3 xT (1))
4
i=0
= 4n + (nlog4 3 xT (1))
= O(n)
Observat, ie: utilizarea seriilor geometrice:
n+1
1 + x + x 2 + ... + x n = 1x
1x , pentru x 6= 1
1
1 + x + x 2 + ... = 1x
, pentru |x| < 1
FII, UAIC
Curs 3
SD 2015/2016
29 / 40
Continut
FII, UAIC
Curs 3
SD 2015/2016
30 / 40
2. Arborele de recursie
Arborele de recursie:
FII, UAIC
Curs 3
SD 2015/2016
31 / 40
FII, UAIC
Curs 3
SD 2015/2016
32 / 40
FII, UAIC
Curs 3
SD 2015/2016
32 / 40
FII, UAIC
Curs 3
SD 2015/2016
33 / 40
FII, UAIC
Curs 3
SD 2015/2016
34 / 40
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 )
=
FII, UAIC
Curs 3
SD 2015/2016
35 / 40
FII, UAIC
Curs 3
SD 2015/2016
36 / 40
Continut
FII, UAIC
Curs 3
SD 2015/2016
37 / 40
3. Teorema Master
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 2015/2016
38 / 40
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 2015/2016
39 / 40
Curs 3
SD 2015/2016
40 / 40