19_Notacao_Assintotica

Post on 04-Jul-2015

142 views 11 download

Transcript of 19_Notacao_Assintotica

Teoria da Computação e Computabilidade

Aula 19– Notação Assintótica

Requisitos

• Na analise de algoritmos é importante concentrar-se na taxa de crescimento do tempo de execução como uma função do tamanho de entrada n, obtendo-se um quadro geral do comportamento.

• O número de passos de um algoritmo é considerado como o número de execuções da operação dominante em função das entradas, desprezando-se constantes aditivas ou multiplicativas.

• Pior Caso – Melhor Caso e Caso Médio

• Funções não muito exatas.

• Tamanho de entrada muito grande.

Notação Assintótica

• Quando um problema têm custo dado em tempo O(n²) em uma configuração de computador e linguagem, este custo será o mesmo em todos os computadores, de maneira que esta notação generaliza a noção de custo independentemente do equipamento utilizado.

Notação Assintótica

• Etimologia'que não se reduz, não coincidente', prov. pelo fr. asymptote (1638) 'linha que se aproxima indefinidamente de uma curva sem jamais cortá-la, mesmo que se suponha uma e outra prolongadas ao infinito com uma distância menor que toda quantidade finita determinada‘

Chamamos de comportamento assintóticoo comportamento a ser observado em uma função f(n), quando n tende ao infinito.

Notação Assintótica

• Notações.

– Θ (teta)

– O (O grande)

– Ω (Ômega grande)

– o (O pequeno)

– ω (Ômega pequeno)

Notação Assintótica• Análise assintótica

– Estudo do comportamento de algoritmos com entradas grandes

– Ordem de crescimento do tempo de execução em função do tamanho da entrada

• Em geral– Algoritmo assintoticamente mais eficiente => melhor

• Exceto para entradas muito pequenas

Notação Assintótica• Comportamento a ser observado em uma função

f(n), quando n tende ao infinito.

• Da uma idéia da velocidade de crescimento da função sem entrar em muitos detalhes.

• Em geral, o custo aumenta com o tamanho n do problema.

Notação Assintótica• Utilizada para comparar a eficiência de diferentes

algoritmos.

• Vamos supor que funções que expressam complexidade são sempre positivas, já que estamos medindo número de operações.

Notação Assintótica (Ω)É usada para expressar o limite inferior do tempo de execução de um algoritmo (melhor caso).

Notação Assintótica (Ω)• Definição Ω(g(n)) = f(n)

Existem constantes positivas c e n0 tais que

0 ≤ f(n) ≤ cg(n), para todo n ≥ n0 .

Informalmente, dizemos que, se f(n) ЄΩ(g(n)), então f(n) cresce no máximo tão rapidamente quanto g(n).

f (n) é um limite assintótico superior para g(n)

Notação Assintótica (O)

É usada para expressar o limite superior do tempo de execução de um algoritmo (pior caso).

Notação Assintótica (O)• Definição O(g(n)) = f(n)

Existem constantes positivas c e n0 tais que

0 ≤ cg(n) ≤ f(n), para todo n ≥ n0.

Informalmente, dizemos que, se f(n) Є O(g(n)), então f(n) cresce no mínimo tão lentamente quanto g(n).

Notação Assintótica (Θ)• DefiniçãoΘ (g(n)) = f(n)

Existem constantes positivas c1, c2 e n0 tais que 0 ≤c1g(n) ≤ f(n) ≤ c2g(n), para todo n ≥ n0.

Notação Assintótica (Θ)É usada para expressar o limite superior e inferior do tempo de execução de um algoritmo (caso médio)

Notação Assintótica (o)• Definição o(g(n)) = f(n)

Existem constantes positivas c e n0 tais que

0 ≤ f(n) < cg(n), para todo n ≥ n0.

Informalmente, dizemos que, se f(n) Є o(g(n)), então f(n) cresce mais lentamente do que g(n).

Notação Assintótica (o)• A relação f(n) Є o(g(n)) denota que a função g(n)

dá um limite superior assintótico para o crescimento de f(n), mas esse limite não é justo.

Ex: 100n2 Є o(n3).

Notação Assintótica (o)• O que significa 2n2 + 3n +1 = 2n2 + Θ(n)?

– Em geral, em equações/desigualdades a notação representa uma função anônima

– Nesse caso, uma função f(n) ∈ Θ(n)• 2n2 + 3n +1 = 2n2 + f(n)

• Como existe a igualdade, f(n) = 3n + 1. Note que f(n) ∈Θ(n)

• T(n) = 2T(n/2) + Θ(n)– Θ(n) representa função que não se conhece exatamente

• É conhecido seu comportamento assintótico

Notação Assintótica (ω)• Definição ω(g(n)) = f(n)

Existem constantes positivas c e n0 tais que

0 ≤ cg(n) < f(n), para todo n ≥ n0.

Informalmente, dizemos que, se f(n) Єω(g(n)), então f(n) cresce mais rapidamente do que g(n).

Notação Assintótica (ω)• A relação f(n) Єω(g(n)) denota que a função g(n)

dá um limite inferior assintótico para o crescimento de f(n), mas esse limite não é justo.

• Se f(n) Єω(g(n)), então certamente f(n) Єω(g(n)).

Notação Assintótica• Propriedades

– Transitiva• f = Θ(g) e g = Θ(h) ⇒ f = Θ(h)

• f = O(g) e g = O(h) ⇒ f = O(h)

• f = Ω(g) e g = Ω(h) ⇒ f = Ω(h)

– Reflexiva• f = Θ(f)

• f = (f)

• f = Ω(g)

– Simetria• f = Θ(g) ⇔ g = Θ(f)

• f = O(g) ⇔ g = Ω(f)

Notação Assintótica• Operações.

f(n) = O(f(n))

cO(f(n)) = O(f(n)) c constante

O(f(n)) + O(f(n)) = O(f(n))

O( O(f(n)) ) = O(f(n))

O(f(n)) + O(g(n)) = O( max(f(n),g(n)) )

O(f(n))O(g(n)) = O(f(n)g(n))

f(n)O(g(n)) = O(f(n)g(n))

Notação Assintótica• Podemos fazer uma analogia entre notação assintótica e números

reais

• Sejam f, g funções e a, b ∈ R– f(n) = O(g(n)) ≈ a ≤ b

– f(n) = Ω(g(n)) ≈ a ≥ b

– f(n) = Θ(g(n)) ≈ a = b

– f(n) = o(g(n)) ≈ a < b

– f(n) = Ω(g(n)) ≈ a > b

• Considere a funções f(n) = n e g(n) = n1+sin n

– f(n) é O(g(n))?

– f(n) éΩ(g(n))?

Classes de Comportamento Assintóticos

Classes de Comportamento Assintóticos

• Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado.

Classes de Comportamento Assintóticos

• f (n) = O(1) (complexidade constante)– O uso do algoritmo independe do tamanho de n.

– Neste caso as instruções do algoritmo são executadas um número fixo de vezes.

Classes de Comportamento Assintóticos

• f(n) = O(log n) (complexidade logarítmica)– Ocorre tipicamente em algoritmos que resolvem um

problema transformando-o em problemas menores.

– Nestes casos, o tempo de execução pode ser considerado como sendo menor do que uma constante grande..

Classes de Comportamento Assintóticos

• f(n)= O(n) (complexidade de linear).– Em geral um pequeno trabalho é realizado sobre cada

elemento de entrada.

– Esta é a melhor situação possível para um algoritmo que tem que processar n elementos de entrada ou produzir n elementos de saída.

Classes de Comportamento Assintóticos

• f(n)= O(nlogn)– Este tempo de execução ocorre tipicamente em

algoritmos que resolvem um problema quebrando-o em problemas menores, resolvendo cada um deles independentemente e depois juntando as soluções.

Classes de Comportamento Assintóticos

• f(n)= O(n2) (complexidade quadrática)– Algoritmos desta ordem de complexidade ocorrem

quando os itens de dados são processados aos pares, muitas vezes em um anel (loop) dentro de outro.

Classes de Comportamento Assintóticos

• f(n)= O(n3) (complexidade cúbica)– Algoritmos desta ordem de complexidade são úteis

apenas para resolver pequenos problemas.

Classes de Comportamento Assintóticos

• f(n)= O(2n) (complexidade exponencial)– Algoritmos desta ordem de complexidade geralmente

não são úteis sob o ponto de vista prático. Eles ocorrem na solução de problemas quando se usa força bruta para resolvê-los.

32

Classes de Comportamento Assintóticos

Classes de Comportamento Assintóticos Classes de Comportamento Assintóticos

POSCOMP2007 Questão 32. Observe as funções representadas no gráfico abaixo.

Assinale a afirmativa FALSA sobre o crescimento assintótico dessas funções.(a) f(n) = O(h(n)) e i(n) = Ω(g(n)).(b) f(n) = Θ(h(n)) e i(n) = Ω(h(n)).(c) g(n) = O(i(n)) e h(n) = Ω(g(n)).(d) g(n) = O(i(n)), i(n) = O(f(n)) e, portanto, g(n) = O(f(n)).(e) h(n) = Ω(i(n)), logo, i(n) = O(h(n)).

Classes de Comportamento Assintóticos

2002 Questão 29. Qual das seguintes afirmações sobre crescimento assintótico de funções não é verdadeira:

(a) 2n2 + 3n + 1 = O(n2)(b) Se f(n) = O(g(n)) então g(n) = O(f(n))(c) logn2 = O(logn)(d) Se f(n) = O(g(n)) e Se g(n) = O(h(n)) então f(n) = O(h(n))(e) 2n+1 = O(2n)