19_Notacao_Assintotica

6
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ótico o 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

Transcript of 19_Notacao_Assintotica

Page 1: 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

Page 2: 19_Notacao_Assintotica

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).

Page 3: 19_Notacao_Assintotica

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).

Page 4: 19_Notacao_Assintotica

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.

Page 5: 19_Notacao_Assintotica

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.

Page 6: 19_Notacao_Assintotica

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)