Documente Academic
Documente Profesional
Documente Cultură
Analiza Efi Cienti Algoritmilor
Analiza Efi Cienti Algoritmilor
SD 2016/2017
Continut
FII, UAIC
Curs 3
SD 2016/2017
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 2016/2017
3 / 40
Scop:
I
compararea algoritmilor;
FII, UAIC
Curs 3
SD 2016/2017
4 / 40
Se implementeaza algoritmul.
Se analizeaza rezultatele.
FII, UAIC
Curs 3
SD 2016/2017
5 / 40
Continut
FII, UAIC
Curs 3
SD 2016/2017
6 / 40
Continut
FII, UAIC
Curs 3
SD 2016/2017
7 / 40
Funct, ii recursive
FII, UAIC
Curs 3
SD 2016/2017
8 / 40
Funct, ii recursive
FII, UAIC
Curs 3
SD 2016/2017
9 / 40
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 2016/2017
10 / 40
FII, UAIC
Curs 3
SD 2016/2017
11 / 40
Curs 3
SD 2016/2017
11 / 40
Function factorial(n)
begin
produs 1
while n > 1 do
produs produs n
n n1
return produs
end
FII, UAIC
Curs 3
SD 2016/2017
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 2016/2017
13 / 40
O(n )
FII, UAIC
Curs 3
SD 2016/2017
14 / 40
Numar de apeluri
fib(n)
apeluri
24
46368
150049
42
267914296
866988873
43
433494437
1402817465
FII, UAIC
Curs 3
SD 2016/2017
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 2016/2017
16 / 40
60
Ruby
Scheme
Python
C
Java
C-gcc
(Python) Fibonacci iterativ
40
20
0
20
FII, UAIC
40
60
80
Curs 3
SD 2016/2017
17 / 40
FII, UAIC
Curs 3
SD 2016/2017
18 / 40
Curs 3
SD 2016/2017
19 / 40
Continut
FII, UAIC
Curs 3
SD 2016/2017
20 / 40
FII, UAIC
Curs 3
SD 2016/2017
21 / 40
FII, UAIC
Curs 3
SD 2016/2017
22 / 40
FII, UAIC
Curs 3
SD 2016/2017
22 / 40
FII, UAIC
Curs 3
SD 2016/2017
22 / 40
Curs 3
SD 2016/2017
22 / 40
FII, UAIC
Curs 3
SD 2016/2017
23 / 40
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 2016/2017
24 / 40
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 2016/2017
25 / 40
Continut
FII, UAIC
Curs 3
SD 2016/2017
26 / 40
direct
a
I
I
I
invers
a
I
FII, UAIC
Curs 3
SD 2016/2017
27 / 40
T (n) =
FII, UAIC
0,
n=1
T (n 1) + 1, n > 1
Curs 3
SD 2016/2017
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 2016/2017
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 2016/2017
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 2016/2017
29 / 40
Continut
FII, UAIC
Curs 3
SD 2016/2017
30 / 40
2. Arborele de recursie
Arborele de recursie:
I
FII, UAIC
Curs 3
SD 2016/2017
31 / 40
FII, UAIC
Curs 3
SD 2016/2017
32 / 40
FII, UAIC
Curs 3
SD 2016/2017
32 / 40
FII, UAIC
Curs 3
SD 2016/2017
33 / 40
FII, UAIC
Curs 3
SD 2016/2017
34 / 40
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 2016/2017
35 / 40
FII, UAIC
Curs 3
SD 2016/2017
36 / 40
Continut
FII, UAIC
Curs 3
SD 2016/2017
37 / 40
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 2016/2017
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 2016/2017
39 / 40
Curs 3
SD 2016/2017
40 / 40