Escolar Documentos
Profissional Documentos
Cultura Documentos
1
n-1
n-1
A < n-1
n-1
n-1
1
Pior caso
Caso mdio
1
1
n-1
n-1
A < n-1
n-1
B < n-1
-
1
1
n-1
n-1
A < n-1
n-1-A
B < n-1-A
-
Elementos vermelhos so
maiores que os azuis
Encontrar o mximo entre os
elementos vermelhos
Custo: n/2 comparaes
1
1
n/2
n/2
n/4
n/4
n/2
A < n/2
n/2
B < n/2
-
Algoritmo timo
f(n)
Algoritmo
Melhor caso
Pior caso
Caso mdio
MinMax1
2(n-1)
2(n-1)
2(n-1)
MinMax2
n-1
2(n-1)
> 3(n-1)/2
MinMax3
3n/2
3n/2
3n/2
f(n) = n2 e g(n) = n
n = O(n2), (faa m = 0 e c = 1)
Mas n2 no O(n)
Suponha que existam c e m tais que para todo n m, n2 cn
Logo n c para todo n m, contradio
4log2(n) + 16 n para n m = 64 = 26
obtenha 2n c
para n m = 0
assinttica so equivalentes
Complexidade constante
Tempo de execuo do algoritmo independe
do tamanho da entrada
Os passos do algoritmo so executados um
nmero fixo de vezes
Exemplo: determinar se um nmero mpar
Complexidade logartmica
Tpico de algoritmos que dividem um
problema transformando-o em problemas
menores (dividir para conquistar)
Tempo de execuo pode ser considerado
menor do que uma constante grande
Quando n um milho, log(n) 20
A base do logartmo tem impacto pequeno
Complexidade linear
O algoritmo realiza um nmero fixo de
operaes sobre cada elemento da entrada
Melhor situao para um algoritmo que
processa n elementos de entrada e produz n
elementos de sada
Exemplo: busca sequencial, calcular fatorial
Complexidade quadrtica
Tpico de algoritmos que operam sobre pares
dos elementos de entrada
Comumente em um anel dentro de outro
Complexidade cbica
til para resolver problemas pequenos
Complexidade exponencial
Tpicos de algoritmos que fazem busca
exaustiva (fora bruta) para resolver um
problema
No so teis do ponto de vista prtico
Quando n 20, O(2n) um milho
Complexidade exponencial
Pior do que O(cn)
(tamanho)
Um problema considerado
outra funo
Depois analise funes que chamam apenas
funes analisadas no passo anterior
E assim sucessivamente at chegar ao programa
principal (main)
- int soma_acumulada(int n) {
int i;
1
int acumulador = 0;
n
for(i = 0; i < n; i++) {
n
acumulador += i;
}
1
return acumulador;
- }
- void exemplo(int n)
- {
int i, j;
1
int a = 0;
n
for(i = 0; i < n; i++)
n(n+1)/2
?
for(j = n; j > i; j--)
n(n+1)/2
?
a += i + j;
1
exemplo1(n);
- }
do nmero de comparaes?
n
n*n
n*n
n*n*n
n*n*n
-
1
n
n(n+1)/2
n(n+1)/2
n(n-1)/2
n(n-1)/2
-
void e2(int n)
{
int i, j, x, y;
x = y = 0;
for(i = 1; i <= n; i++) {
for(j = i; j <= n; j++)
x = x + 1;
for(j = 1; j < i; j++)
y = y + 1;
}
}