Vous êtes sur la page 1sur 56

Prof.

Tiago Buarque
EFICINCIA DE
ALGORITMOS
Agenda
Eficincia de algoritmos
Notao assinttica
12:09:25
2
Introduo
Geralmente, um mesmo problema pode ser
resolvido por diferentes algoritmos
Critrios para avaliar um algoritmo:
Corretude (aulas passadas)
Eficincia
Simplicidade
12:09:25
3
Eficincia
Existem dois tipos de eficincia:
Eficincia temporal: indica o quo rpido o
algoritmo executado
Eficincia espacial: indica o espao em
memria necessrio para a execuo do
algoritmo
12:09:25
4
Eficincia
Antigamente, espao em memria e tempo
eram recursos valiosos
Atualmente, devido aos avanos nos
mecanismos de armazenamento, o espao em
memria no to importante
No entanto, tempo continua sendo importante,
pois problemas cada vez mais complexos so
tratados
12:09:25
5
Como avaliar a eficincia
temporal?
Existem dois mtodos:
Mtodo emprico: Implementar o algoritmo e
medir o tempo de execuo considerando-se
entradas diversas
Mtodo analtico (anlise assinttica): Definir o
tempo de execuo do algoritmo atravs de
expresses matemticas em termos do tamanho
da entrada
12:09:25
6
Desvantagens do mtodo emprico
Esforo adicional de implementao do algoritmo
Podemos esquecer alguma entrada em que o
desempenho particularmente bom (ou ruim)
Os resultados dependem fortemente da
tecnologia
Deve-se garantir o mesmo hardware e ambiente de
software a fim de ser possvel fazer comparao
confivel entre algoritmos
12:09:25
7
Anlise assinttica
Ao contrrio da abordagem experimental:
Usa uma descrio de alto nvel dos algoritmos,
ou seja, no requer esforo de implementao
Leva em considerao todas as possveis
entradas
Recursos matemticos possibilitam generalizaes
independente do hardware e ambiente de
software utilizado
12:09:25
8
Tamanho da entrada
Quase todos os algoritmos levam mais tempo
para serem executados sobre entradas
maiores
Portanto, essencial investigar a eficincia de
algoritmos em funo do parmetro n, que
indica o tamanho da entrada do algoritmo
12:09:25
9
Tempo de execuo
Eficincia temporal analisada determinando
o nmero de repeties de operaes
bsicas em funo do tamanho da entrada
Operao bsica: operao que mais
contribui para o tempo de execuo de um
algoritmo
12:09:25
10
Mais sobre T(n)
C(n) e a constante c
op
so calculados por
aproximao
C(n) no contm informaes sobre operaes no
bsicas
Assuma que para um dado algoritmo C(n) = n(n-1).
Quanto tempo levar a mais se dobrarmos o tamanho
da entrada?
Vlido somente para grandes valores de n 12:09:25
11
Tempo de execuo
Note que encontramos a resposta sem
conhecer o valor de c
op
A constante tambm foi cancelada
Portanto, na anlise da eficincia, ignoramos
constantes multiplicativas e nos
concentramos na ordem de crescimento da
contagem da operao bsica
12:09:25
12
Tamanho da entrada e operaes
bsicas
12:09:25
13
Ordens de crescimento
Note que funes logartmicas crescem mais
devagar, e funes exponenciais e fatoriais
crescem mais rpido
12:09:25
14
Crescimento de funes
A ordem de crescimento de um algoritmo
permite:
Caracterizao simples da eficincia de um
algoritmo
Comparar a eficincia de diferentes algoritmos
Pode-se calcular o tempo exato de execuo
de um algoritmo, mas o esforo a mais no
vale a pena
12:09:25
15
Melhor caso, caso mdio e pior
caso
A maioria dos algoritmos no dependem
apenas do tamanho da entrada, mas tambm
das especificidades da entrada
Pior caso W(n): indica o maior tempo obtido,
levando em considerao todas as entradas
possveis
Caso mdio M(n): indica o tempo mdio obtido,
considerando todas as entradas possveis
Melhor caso B(n): indica o menor tempo obtido,
levando em considerao todas as entradas
possveis
12:09:25
16
Exemplo: Busca sequncial
Problema: Dado um vetor de tamanho n e
uma chave de busca com valor K, encontre o
elemento de valor K, se presente
Algoritmo:
Pior caso? Caso mdio? Melhor caso?
Busca(A,n,K)
i=1
while(i n and A[i] != K)
i = i + 1
if (in)
return i
else
return -1
12:09:25
17
Notao assinttica
A anlise da eficincia se concentra na ordem
de crescimento do nmero de operaes
bsicas de um algoritmo
Para comparar e classificar estas ordens de
crescimento so utilizadas notaes
assintticas
Objetivo:
Resumir o comportamento de um algoritmo em
frmulas simples e de fcil compreenso
Simplificar e descartar informaes desnecessrias
12:09:25
18
Eficincia assinttica
Maneira como o tempo de execuo se
comporta quando a entrada aumenta
indefinidamente
Em geral, um algoritmo que
assintoticamente mais eficiente ser a melhor
escolha para todas as entradas (exceto para
as muito pequenas)
12:09:25
19
Notao Assinttica
Notao O (Big-O)
Notao (Omega ou Big-Omega)
Notao (Theta ou Big-Theta)
12:09:25
20
Notao Big-O
Sejam duas
funes f(n) e g(n)
f(n) est em
O(g(n)) se existem
constantes
positivas c e n
0
tais que f(n)
cg(n) para n n
0
Ou seja, f(n) no
cresce mais do que
g(n)
12:09:25
21
Notao Big-O
Ao invs de f(n) est em O(g(n)), podemos
dizer:
f(n) O(g(n))
f(n) O(g(n))
f(n) = O(g(n))
Vlido para as demais notaes
12:09:25
22
Notao Big-O
Exemplo: 2n + 10 O(n)
2n + 10 cn
(c 2) n 10
n 10/(c 2)
Escolher c = 3 e n
0
= 10
Certamente existem outras opes para c e n
0
,
mas o importante que existe alguma opo
12:09:25
23
n
0
=
Notao Big-O
A notao O
coloca um
limite superior
no tempo de
execuo
12:09:25
24
Notao Big-O
Exemplo: n
2
no
est em O(n)
n
2
cn
n c
A desigualdade no
pode ser satisfeita
pois c deve ser
uma constante
12:09:25
25
Notao Big-O: Regras
Sejam d(n), e(n), f(n) e g(n) funes dos
inteiros no-negativos nos reais positivos.
Ento, as seguintes regras so vlidas:
12:09:25
26
Notao Big-O: Regras
12:09:25
27
Notao Big-O: Regras
12:09:25
28
Notao Big-O: Exemplos
f(n) = 10000n
2
+ 10000 f(n) = O(n
2
)
Regra 4: polinmio de grau 2
C=10.001 e n100
f(n) = 10000n
2
+ 10000 f(n) = O(n
3
)
Qualquer polinmio de grau superior f(n) limite superior
para f(n)
C=1000 e n100
f(n) c g(n)
10
4
(10
2
)
2
+ 10
4
10
3
(10
2
)
3
10
4
10
4
+ 10
4
10
3
10
6
10
4
10
4
+ 10
4
10
4
10
5
10
4
+ 1 10
5
12:09:26
29
Notao Big-O: Exemplos
f(n) = 6n
3
+ 4n + 9 f(n) = O(n
3
)
Regra 4: Polinmio de grau 3
C=7 e n3
f(n) = 3n + 5 log n + 2 f(n) = O(n)
Regra 2:
f
1
(n) = 3n + 2 e f
2
(n) = 5 log n = logn
5
f
1
(n) = O(n) regra 4
f
2
(n) = O(logn) regra 6
f
1
(n) + f
2
(n) = O(n + logn) = O(n)
C=4 e n64
f(n) = 450 f(n) = O(1)
12:09:26
30
Notao Omega
A notao omega coloca um limite inferior no
tempo de execuo
f(n) est em (g(n)) se existem constantes
positivas c e n
0
tais que cg(n) f(n) para n n
0
Ou seja, f(n) no decresce menos do que g(n)
12:09:26
31
Notao Omega
A figura apresenta as funes f(n) e g(n), onde
f(n) = (g(n))
Para todos os valores de n direita de n
0
, o valor
de f(n) est em ou acima de g(n)
12:09:26
32
Notao Omega: Exemplo
Mostre que f(n) = 7n 2 (n)
Para provarmos, precisamos apenas definir
constantes c e n
0
tais que
7n2 cn, para todo nn
0
Escolhendo c = 6 e n
0
= 2, pode-se verificar
que f(n) = (n)
7n2 = 6n+n2 6n para todo n 2
12:09:26
33
Notao Theta
A notao Theta coloca um limite inferior e
superior no tempo de execuo
Sejam duas funes f(n) e g(n)
f(n) est em (g(n)) se: f(n) est em O(g(n)) e
f(n) est em (g(n))
Isto , se existem constantes reais c
1
>0 e c
2
>0, e
uma constante inteira n
0
1 tal que c
2
g(n) f(n)
c
1
g(n), para n n
0
12:09:26
34
A figura abaixo apresenta as funes f(n) e g(n),
onde f(n) = (g(n))
Para todos os valores de n direita de n
0
, o valor de
f(n) reside em c
1
g(n) ou acima dele, e em c
2
g(n) ou
abaixo deste valor
Notao Theta
12:09:26
35
Notao Theta: Exemplo
Mostre que f(n) = n
2
- 3n (n
2
)
Para provarmos, precisamos apenas definir
constantes c
1
, c
2
e n
0
tais que
c
2
g(n) n
2
- 3n c
1
g(n), para todo n n
0
Escolhendo c
1
= 1/14, c
2
= 1/2 e n
0
= 7, pode-
se verificar que f(n) = (n
2
)
7
3
7
3
7
2
6 7
2
12:09:26
36
Notao Theta, O e Omega
12:09:26
37
Funes assintticas bsicas
Algumas funes ocorrem com muita
frequncia na anlise de algoritmos, de tal
forma que so usados termos especiais para
se referir complexidade delas
Por exemplo, o termo linear usado para se
referir classe de funes que so O(n)
12:09:26
38
Funes assintticas bsicas
12:09:26
39
Notaes utilizadas
lg n = log
2
n (Logaritmo binrio)
ln n = log
e
n (Logaritmo natural)
lg
k
n = (lg n)
k
(Exponenciao)
lg lg n = lg(lg n) (Composio)
Para todo a > 0, b > a, c > a e n real:
12:09:26
40
Exemplo
Para entrada de tamanho n, a ordenao por
insero executada em 8n
2
etapas,
enquanto que a ordenao por intercalao
executada em 64 n.lg(n) etapas.
Qual a complexidade destes algoritmos?
Para que valores de n a ordenao por
insero supera a ordenao por
intercalao?
12:09:26
41
Exemplo
Complexidade dos algoritmos:
Por insero: O(n
2
)
Por intercalao: O(n lgn)
12:09:26
42
Exemplo
A ordenao por insero possui
complexidade maior que a ordenao por
intercalao se:
12:09:26
43
Exemplo
12:09:26
44
Resumo
Tanto eficincia temporal como espacial so
medidas em funo do tamanho da entrada
Eficincia temporal medida contando o
nmero de vezes em que cada operao
bsica executada
A eficincia de dois algoritmos pode ser
significativamente diferente para entrada de
mesmo tamanho
12:09:26
45
Resumo
importante distinguir as eficincias de
melhor caso, caso mdio e pior caso
O interesse principal na ordem de
crescimento do algoritmo medida que o
tamanho da entrada cresce indefinidamente
As notaes O, e so usadas para
comparar o tempo de execuo de dois
algoritmos
12:09:26
46
Resumo
Na prtica, aplicamos a notao para
descrever um limite inferior para o melhor
caso e a notao O para descrever um limite
superior para o pior caso de um algoritmo
Quando o algoritmo no possui pior ou melhor
caso, se aplica o uso da notao
12:09:26
47
Exerccio 1 (exerccio 3.1-4)
2
n+1
= O(2
n
)?
12:09:26
48
Exerccio 1 (exerccio 3.1-4)
2
n+1
= O(2
n
)?
Resposta:
Se isso for verdade, existe c e n
0
constantes
positivas, tais que a seguinte relao vlida
2
n+1
c 2
n
, para n > n
0
C = 2 e n
0
=1
Concluso: 2
n+1
= O(2
n
)
12:09:26
49
Exerccio 2 (exerccio 3.1-4)
2
2n
= O(2
n
)?
12:09:26
50
Exerccio 2 (exerccio 3.1-4)
2
2n
= O(2
n
)?
Resposta:
Se isso for verdade, existe c e n
0
constantes
positivas, tais que a seguinte relao vlida
2
2n
c 2
n
, para n > n
0
Desenvolvendo a inequao, chegamos a situao de
2
n
c, que invlida, dado que c tem que ser
constante
Concluso: 2
2n
O(2
n
)
12:09:26
51
Exerccio 3 (exerccio 3.1-3)
Explique porque a declarao O tempo de
execuo no algoritmo A no mnimo
O(n
2
) isenta de significado
12:09:26
52
Exerccio 3 (exerccio 3.1-3)
Explique porque a declarao O tempo de
execuo no algoritmo A no mnimo O(n
2
)
isenta de significado
Resposta:
Seja T(n) o tempo de execuo do algoritmo A
A afirmativa diz que T(n) O(n
2
)
Isso significa que T(n) f(n), sendo f(n) alguma
funo em O(n
2
)
Essa afirmativa no diz nada em relao T(n), uma
vez que a funo g(n) = 0, para todo n, est em O(n
2
)
12:09:26
53
Exerccio 4 (exerccio 2.2-1)
Expresse a funo n
3
/1000 100n
2
100n + 3
em termos da notao theta ()
12:09:26
54
Exerccio 4 (exerccio 2.2-1)
Expresse a funo n
3
/1000 100n
2
100n + 3
em termos da notao theta ()
Resposta: (n
3
)
c
2
g(n) 1/1000n
3
100n
2
100n + 3 c
1
g(n),
para todo n n
0
n
0
= 10
6
, c
1
= 10
-18
e c
2
= 1
12:09:26
55
Referncia
CORMEN, T. H.; LEISERSON, C. E.; RIVEST,
R. L.; STEIN, C. Algoritmos: Teoria e prtica.
Traduo da Segunda edio Americana.
Editora Campus, 2002.
12:09:26
56

Vous aimerez peut-être aussi