Complexidade de Algoritmos
Edson Prestes
Complexidade de Algoritmos
Mostre o principio da absorção
Conceitos Auxiliares
Complexidade de Algoritmos
Considere duas funções f e g de IN em IR
+.
Freqüentemente, a partir de um certo ponto, uma função fica sempre maior que a outra. Se f é O(g), então Máx ( f, g ) também é O(g).
Exemplo: como 2n + 3 é O(n2 ), então Máx (2n + 3, n2) é O(n2).
Em alguns casos esta dominância pode não existir. Uma solução é utilizar para a ordem do máximo pontual Máx ( f, g ) a soma pontual, dada por
( f + g )(n) :=f(n) + g(n).
Outra sugestão é utilizar o máximo assintótico em ordem (MxAO).
Conceitos Auxiliares
Complexidade de Algoritmos
O máximo assintótico deve ser comutativo.
(i): MxAO ( f, g ) = MxAO ( g, f ).
Devemos também requerer que as funções sejam dominadas.
(ii): f = O( MxAO ( f, g ) ) e g = O( MxAO ( f, g ) ).
Para ter uma cota menos folgada podemos exigir que o máximo assintótico seja a melhor cota superior .
(iii): MxAO ( f, g ) = O( h ), sempre que f = O( h ) e g = O( h ).
Para tratar melhor o caso de dominância de uma das funções podemos Requerer também a seguinte propriedade.
(iv): MxAO ( f, g ) = g, sempre que (∃n
0∈N)(∀n ≥ n
0): f(n) ≤ g(n).
Conceitos Auxiliares
Complexidade de Algoritmos
Conceitos Auxiliares
Considere as propriedades (ii) (dominância) e (iii) (melhor cota). Verifique
quais delas são satisfeitas em cada caso abaixo
Complexidade de Algoritmos
Considere uma operação de atribuição ve
A custo da atribuição é igual a
ACP - Atribuição
Na maioria das vezes esta complexidade fica reduzida à avaliação da expressão e, logo
Sua complexidade pessimista tem as seguintes cotas
A ordem da complexidade pessimista da atribuição é
Complexidade de Algoritmos
Considere o seguinte exemplo.
a) para variáveis inteiras a.1) i<-0 {inicialização}
a.2) j<-i {tranferência}
b) para lista v de inteiros e variável inteira m
m<-Max(v) //determinar maximo e tranferi-lo para m
c) para listas u,v, w
c.1) u<-v //tranferência de elementos
c.2) w<-reversa(u) // inversão de lista e atribuição para w
ACP - Atribuição
A complexidade é constante logo é O(1)
A complexidade é linear e igual a n, logo, é O(n)
A complexidade é 2n, i.e., O(n)
A complexidade é n, logo é, O(n)
Complexidade de Algoritmos
Considere as listas u e v de inteiros e a seguinte operação de atribuição uordene(v), onde ordena tem complexidade n
2e a atribuição tem complexidade n. Qual é a complexidade resultante?
ACP - Atribuição
C
p[uordene(v)]=C
p[ordene(v)]+C
p[
ordena(v)] C
p[uordene(v)]= n
2+n
C
p[uordene(v)] é O(n
2)
Se não considerarmos a transferência de valores então, a complexidade de ve fica reduzida à avaliação da expressão e, ou seja,
fica reduzida à complexidade da instrução de ordenação.
Complexidade de Algoritmos
Suponha que para todo d com tam(d) ≤ n, tem-se que calc[e](d) ≤ f(n) e transf[e(d)] ≤ g(n). Então pode-se garantir para entradas d com
tam(d) ≤ n que desemp[ve](d) ≤ f(n)+g(n) ?
ACP - Atribuição
Complexidade de Algoritmos
O desempenho da seqüência S;T é a soma dos desempenhos de suas componentes
ACP - Seqüência
Complexidade de Algoritmos
De maneira geral a execução da seqüência S;T tem sobre a entrada d, os esforços computacionais associados à
Execução de S sobre a entrada d;
Execução de T sobre a entrada S(d).
ACP - Seqüência
Assim o desempenho da seqüência S;T com entrada d é dado por
Complexidade de Algoritmos
O desempenho da seqüência S;T é a soma dos desempenhos de suas componentes
Preservando assintoticamente o tamanho da entrada
A complexidade pessimista da seqüência tem cotas
ACP - Seqüência
A ordem da complexidade é
Complexidade de Algoritmos
Dados dois algoritmos Prim(u) e Buscab(a,v), considere a seqüência: vPrim(u) ; Buscab( a , v ).
Suponha que
Qual é a complexidade do algoritmo composto ?
ACP - Seqüência
c
p[v ← P rim(u)](n) = c
p[P rim(u)](n) + c
p[ ← ](n) c
p[P rim(u)](n) = n c
p[ ← ](n) = 1
c
p[v ← P rim(u)](n) = n + 1 c
p[Buscab](n/2) = log
2(n/2)
= n + 1 + log
2(n/2) = O(n)
Complexidade de Algoritmos
ACP - Seqüência
c
p[v ← P rim(u); Buscab(a, v )](n) =
c
p[v ← P rim(u)](n) + c
p[Buscab(a, v)](n/2)
c
p[v ← P rim(u); Buscab(a, v)](n) =
Complexidade de Algoritmos
Complexidade geral
A complexidade pessimista da seqüência tem cotas
Onde
A ordem da complexidade é
ACP - Seqüência
Complexidade de Algoritmos
Considere os seguintes exemplos.
a) para lista v de inteiros e variável inteira m
mMax(v); //determinar maximo e tranferi-lo para m mm+1;
b) para listas u,v, w uv //tranferencia
wreversa(u) // inversão de lista e atribuicao para w
ACP - Seqüência
A complexidade tem ordem n+1 : O(n)
A complexidade tem ordem n+n+n: O(n)
Complexidade de Algoritmos
Considere o seguinte exemplo.
v Prim(u) ; w Fin(u) ;
v Ordene(v) ; w Ordene(w) ; u Concat( v , w )
Suponha que
- Prim dá como saída a primeira metade da lista u; e Fin dá a segunda metade de sua entrada. Ambas tem complexidade linear no tamanho da entrada.
- Ordene tem complexidade quadrática no tamanho da entrada;
- Concat( v , w ) dá como saída a concatenação das listas v e w, com complexidade O( p + q ), com p e q os comprimentos de v e w, respectivamente
Qual é a complexidade do algoritmo ?
ACP - Seqüência
Complexidade de Algoritmos
Suponha que desemp[S] (d) ≤ f(n) e desemp[T](d) ≤ g(n), para todo d com tam(d) ≤ n. Verifique em que casos podemos garantir que desemp[S;T] ≤ f(n) +g(n) para entradas d com tam(d) ≤ n.
a) Quando S preserva o tamanho da entrada d, i. e. , tam(S(d))=tam(d).
b) Quando S não aumenta o tamanho da entrada d, i. e. , tam(S(d)) ≤ tam(d).