Escolar Documentos
Profissional Documentos
Cultura Documentos
Analise Complexidade PDF
Analise Complexidade PDF
Algoritmos
Seqncia de instrues necessrias para a
resoluo de um problema bem formulado
Permite implementao computacional
COMPLEXIDADE DE ALGORITMOS
1
COMPLEXIDADE DE ALGORITMOS
Questes
O problema em questo tratvel?
Existe um algoritmo que demande
quantidade razovel de recursos
computacionais?
Quais os custos deste algoritmo?
Existe um algoritmo melhor?
Como comparar algoritmos?
COMPLEXIDADE DE ALGORITMOS
Exerccio:
1 ! + 2 ! + 3 ! + ... + n !
2
COMPLEXIDADE DE ALGORITMOS
Anlise de complexidade
de algoritmos
COMPLEXIDADE DE ALGORITMOS
O custo final de um algoritmo pode estar
relacionado a diversos fatores:
- Tempo de execuo
- Utilizao de memria principal
- Utilizao de disco
- Consumo de energia, etc...
Medidas importantes em outros contextos:
- legibilidade do cdigo
- custo de implementao
- portabilidade
- extensibilidade
3
COMPLEXIDADE DE ALGORITMOS
Exemplo:
Soluo de um sistema de equaes lineares
AX = 0
Mtodos:
Cramer (determinantes)
Gauss (escalonamento)
COMPLEXIDADE DE ALGORITMOS
Estimativa emprica de tempo, para um processador
rodando em 3GHz
n Cramer Gauss
2 4 ns 2 ns
3 12 ns 8 ns
4 48 ns 20 ns
5 240ns 40 ns
10 7.3ms 330 ns
20 152 anos 2.7 ms
Em maioria dos casos, complexidade em tempo
preocupao principal
4
COMPLEXIDADE DE ALGORITMOS
Outro exemplo
- Busca seqencial
- Dado um vetor de nmeros, verificar se um
nmero chave encontra-se neste vetor
char achou = 0;
i = 0;
while (!achou && i<n) {
achou = (vet[i] == chave);
i++;
}
if (achou) return(i);
else return(1);
COMPLEXIDADE DE ALGORITMOS
Outro exemplo
- Busca seqencial
Neste caso no existe um nmero fixo de
operaes!
Isto vai depender de onde o valor chave
encontrado
Por isso, comum realizar a contagem para:
- O melhor caso
- O pior caso
- E o caso mdio
5
TEMPO DE EXECUO DE ALGORTMOS
6
COMPLEXIDADE DE ALGORITMOS
COMPLEXIDADE DE ALGORITMOS
Complexidade de tempo:
Pode ser medida empiricamente:
Com funes para o clculo do tempo. Exemplo:
#include <time.h>
time_t t1,t2;
time(&t1);
/*Operaes*/
time(&t2);
double diferenca = difftime(t2,t1);
//diferena em segundos
7
TEMPO DE EXECUO DE ALGORTMOS
Estudo experimental
- escreva um programa que implemente o
algoritmo;
- execute o programa com conjuntos de dados
de vrios tamanhos e composies;
- use um mtodo para medir o tempo de
execuo com exatido;
- os resultados devem ser parecidos com este
8
TEMPO DE EXECUO DE ALGORTMOS
COMPLEXIDADE DE ALGORITMOS
9
ANLISE ASSINTTICA
ANLISE ASSINTTICA
Procedimento
10
Algumas notaes
Notaes que usaremos na anlise de algoritmos
f(n) = O(g(n)) (l-se big-oh, big-o ou da ordem de)
se existirem constantes c e n0 tal que f(n) c*g(n)
quando n n0
- A taxa de crescimento de f(n) menor ou igual taxa de g(n)
Algumas notaes
Notaes que usaremos na anlise de algoritmos
f(n) = (g(n)) (l-se theta) se e somente se f(n) =
O(g(n)) e f(n) = (g(n))
- A taxa de crescimento de f(n) igual taxa de g(n)
11
12
Algumas consideraes
Ao dizer que T(n) = O(f(n)), garante-se que T(n) cresce
numa taxa no maior do que f(n), ou seja, f(n) seu limite
superior
Ao dizer que T(n) = (f(n)), tem-se que f(n) o limite
inferior de T(n).
Exemplos
Se f(n)=n2 e g(n)=2n2, ento essas duas funes tm
taxas de crescimento iguais. Portanto, f(n) = O(g(n)) e f(n)
= (g(n))
13
Taxas de crescimento
Algumas regras
Se T1(n) = O(f(n)) e T2(n) = O(g(n)), ento
T1(n) + T2(n) = max(O(f(n)), O(g(n)))
T1(n) * T2(n) = O(f(n) * g(n))
Se T(x) um polinmio de grau n, ento
T(x) = O(xn)
14
Funes e Taxas de Crescimento
15
16
Calculando o tempo de execuo
Supondo que as operaes simples demoram uma
unidade de tempo para executar, considere
n
o programa
abaixo para calcular o resultado de i 3
i =1
Incio
declare soma_parcial numrico;
soma_parcial := 0;
para i :=1 at n faa
soma_parcial := soma_parcial+i*i*i;
escreva(soma_parcial);
Fim
17
Calculando o Tempo de Execuo
1 unidade de tempo
Incio
1 unidade para inicializao
declare soma_parcial numrico; de i,
18
Em geral, no consideramos os termos de ordem inferior
da complexidade de um algoritmo, apenas o termo
predominante.
Exemplo: Um algoritmo tem complexidade T(n) = 3n2 +
100n. Nesta funo, o segundo termo tem um peso
relativamente grande, mas a partir de n0 = 11, o termo
n2 que "d o tom" do crescimento da funo: uma
parbola. A constante 3 tambm tem uma influncia
irrelevante sobre a taxa de crescimento da funo aps
um certo tempo. Por isso dizemos que este algoritmo da
ordem de n2 ou que tem complexidade O(n2).
Repeties
O tempo de execuo de uma repetio o
tempo dos comandos dentro da repetio
(incluindo testes) vezes o nmero de vezes
que executada
19
Regras para o clculo
Repeties aninhadas
- A anlise feita de dentro para fora
- O tempo total de comandos dentro de um grupo
de repeties aninhadas o tempo de execuo
dos comandos multiplicado pelo produto do
tamanho de todas as repeties
- O exemplo abaixo O(n2)
para i := 0 at n faa
para j := 0 at n faa
faa k := k+1;
20
Regras para o clculo
Se... ento... seno
- Para uma clusula condicional, o tempo de
execuo nunca maior do que o tempo do teste
mais o tempo do maior entre os comandos relativos
ao ento e os comandos relativos ao seno
- O exemplo abaixo O(n)
se i < j
ento i := i+1
seno para k := 1 at n faa
i := i*k;
Exerccio
Estime quantas unidades de tempo so
ecessrias para rodar o algoritmo abaixo
Incio
declare i e j numricos;
declare A vetor numrico de n posies;
i := 1;
enquanto i <= n faa
A[i] := 0;
i := i+1;
para i := 1 at n faa
para j := 1 at n faa
A[i] := A[i]+i+j;
Fim
21
Regras para o clculo
Chamadas a sub-rotinas
Uma sub-rotina deve ser analisada primeiro
e depois ter suas unidades de tempo
incorporadas ao programa/sub-rotina que a
chamou
22
Regras para o clculo
Exemplo de uso de recorrncia
- Calculo Fatorial n!
23
UMA RPIDA REVISO DE MATEMTICA
Logaritmos e Expoentes
Cho (floor)
x= ao maior inteiro menor que x
Teto (ceiling)
x = ao menor inteiro menor que x
Somatria
t
f (i ) = f (s ) + f (s + 1) + f (s + 2) + ... + f (t 1) + f (t )
i=s
24
UMA RPIDA REVISO DE MATEMTICA
n
1 a n +1
i =0
a = a + a + a + ... + a =
i 0 1 2 n
1 a
Progresses aritmticas
Um exemplo,
n
n(n + 1)
i = 1 + 2 + 3 + ... + n =
i =1 2
n
1
= n(n + 1) n +
1
i
i =1
2
3 2
25