19_Notacao_Assintotica
-
Upload
roberto-neto -
Category
Documents
-
view
142 -
download
11
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)