Académique Documents
Professionnel Documents
Culture Documents
Dados
2010/2011
Luis Antunes
Anlise de
Algoritmos
Fac. Cincias Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Eficincia de Algoritmos
!
Fac. Cincias
Univ. Lisboa
Eficincia
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
2*n
2
4
6
8
10
12
14
16
18
f(n)
n^2 n^3
1
1
4
8
9
27
16 64
25 125
36 216
49 343
64 512
81 729
9000
e^n
2,7
7,4
20,1
54,6
148,4
403,4
1096,6
2981,0
8103,1
8000
7000
6000
2n
5000
n^2
4000
n^3
3000
e^n
2000
1000
0
1
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
estiver presente, o
ciclo for executado
x.length vezes
stio.
Fac. Cincias
Univ. Lisboa
executado x.length
vezes.
! Mas invoca o search, que executado y.length vezes
por x.length
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
vezes.
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
ciclo j, h x.length-1
vezes
! Na segunda vez
x-.length-2 vezes
! Na ltima vez, apenas 1
! O nmero total n x (n-1)/2 (com n = x.length vezes)
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Notao O ( grande)
!
Definio:
!
Fac. Cincias
Univ. Lisboa
Notao O Exemplos
1000000 O(1)
4.m 1 O(m)
10/n O(1/n)
5.x2 O(x3)
5.x2 O(x2)
5.x2 no O(x)
500.n4 n2 O(n4)
500.n4 + n2 O(n4)
n2.log10(n) O(n2.log(n))
45.2n O(en)
e 2.71828...
6n no O(5n)
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Notao O
! Para comparar algoritmos da mesma classe de complexidade
Fac. Cincias
Univ. Lisboa
Algumas Propriedades
Seja a funo F de ordem O(f) e G de ordem O(g)
F de ordem O(F)
Exemplo: 5.n2 + 4.n 300 O( 5.n2 + 4.n 300 )
c.F, com c uma constante, de ordem O(f)
Exemplo: O( 5000.n2 ) = O( n2 )
F + G de ordem O( f + g )
Exemplo: O( n2 ) + O( n ) = O( n2 + n ) = O( n2 )
F G de ordem O(f g)
Exemplo: O( n2 ) O( n3 . log n) = O( n5 . log n)
se F O(G) ento O( f + g ) = O( g )
Classes de Complexidade
Algumas classes de complexidade importantes (e progressivamente mais
abrangentes):
Constante, O(1)
Logartmica, O(log n)
Linear, O(n)
Pseudo-linear, O(n. log n)
Quadrtica, O(n2)
Polinomial, p1 O(np)
Exponencial, p>1 O(pn)
Factorial, O(n!) (n/e)n. 2n
Comparao de funes
Fac. Cincias
Univ. Lisboa
Anlise de Programas
A complexidade temporal de um programa pode ser determinada
analisando a sua estrutura. Como uma linguagem de programao possui
uma sintaxe e uma semntica bem definidas, a tarefa facilitada.
Considerase o pior caso, i.e., escolhese sempre a opo que implique no
nmero mximo de instrues. Procedese da mesma forma para o clculo
da complexidade espacial.
Existe um conjunto de comandos cuja complexidade temporal constante,
i.e., pertencem classe O(1):
Declaraes
Atribuies
Acessos aos mtodos
Uso das operaes aritmticas, lgicas e relacionais dos tipos de
dados primitivos
Anlise de Programas
Em relao aos restantes comandos, considere a guarda G O(fG), os
comandos A O(fA), B O(fB) e C O(fC) e N como o nmero de
iteraes mximo de cada ciclo:
A; B;
O( fA + fB )
if (G) A else B;
O( fG + fA + fB )
while (G) A;
O( N . ( fG + fA ) )
do A while (G);
O( N . ( fG + fA ) )
for (B;G;C) A;
O( fB + N . ( fG + fA + fC ) )
Um exemplo
Qual a complexidade do seguinte cdigo?
1 int x=0;
2 for(int i=0; i<n; i++)
3
for(int j=0; j<n; j++)
4
x=x+1;
1
4
3-4
2-4
1-4
->
->
->
->
->
principais
Outro exemplo
Dado o seguinte cdigo, qual a sua complexidade temporal?
//@ requires domain.length == images.length
Nesta funo, existem duas tarefas (a) ordenar o vector images, (b)
comparar os elementos desse vector, para verificar se existe algum
igual. Quais as suas complexidades?
Qual a complexidade total?