140 likes | 258 Views
Análise de Algoritmos. Disciplina: Informática Teórica Prof. Kátia Guimarães e Prof. Ruy Guerra Hugo Santana – hps@cin.ufpe.br. A Notação O. f(n) = O(g(n)) se existem constantes c e N tal que, para n ≥ N , tem-se que f(n) ≤ c ·g (n) Intuitivamente, corresponde a noção de ≤.
E N D
Análise de Algoritmos Disciplina: Informática Teórica Prof. Kátia Guimarães e Prof. Ruy Guerra Hugo Santana – hps@cin.ufpe.br
A Notação O • f(n) = O(g(n)) se existem constantes c e N tal que, para n ≥ N, tem-se que f(n) ≤ c·g(n) • Intuitivamente, corresponde a noção de ≤
A Notação Ω e Θ • Analogamente, tem-se a notação Ω (≥) • f(n) = Ω(g(n)) se existem constantes c e N tal que, para n ≥ N, tem-se que f(n) ≥ c·g(n) • Note que se f(n) = Ω(g(n)) então g(n) = O(f(n)) • A notação Θ: • Se f(n) = Ω(g(n)) e f(n) = O(g(n)) então: f(n) = Θ(g(n)) • Finalmente, a notação o (“<”) e ω (“>”)
Propriedades importantes • ( f(n) )c = o (af(n) ), se c > 0, a > 1 e f é crescente (Teorema 3.3 do Udi Manber) • Em outras palavras, uma função exponencial cresce mais rapidamente que qualquer função polinomial • Substituindo f(n) por loga(n), temos: • (loga(n) )c = o (aloga n) = o (n) • Ou seja, uma função linear cresce mais rapidamente que qualquer função logarítmica.
Propriedades Importantes • Se f(n) = O(s(n)) e g(n) = O(r(n)), então f(n) + g(n) = O(s(n) + r(n)) ef(n) · g(n) = O(s(n) · r(n))(Lemma 3.2 do Udi Manber)
Exercícios (3.5 do Manber) • Comparar as funções a seguir, e dizer se: • f(n) = O(g(n)), • f(n)=Ω(g(n)) e/ou • f(n) =Θ(g(n))
Exercício a f(n) = 100n + log n e g(n) = n + (log n)2 n ≤ n + (log n)2 ≤ n + n ≤ 2n = O(n) 100n ≤ 100n + log n ≤ 100n + n ≤ 101n = O(n) Lição: O termo maior em uma soma/subtraçãodefine a forma da função f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n))
Exercício a – outra solução f(n) = 100n + log n e g(n) = n + (log n)2 n = O(n)(log n)2 = O(n) (3.3)g(n) = O(n + n) (3.2) g(n) = O(n) 100n = O(n)log n = O(n) (3.3)f(n) = O(n + n) (3.2) f(n) = O(n) Logo,f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n))
Exercício b f(n) = log n e g(n) = log (n2 ) log (n2) = log (n x n) = log (2log n x 2log n) = log (2log n + log n) = 2 · log n Logo,f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n))
Exercício c f(n) = n2 / (log n) e g(n) = n (log n)2 g(n) = n·(log n)·(log n) f(n) = n·n·(1/ logn) Multiplicando ambas por log n, temos: f’(n) = n·n g’(n) = n·(log n)3 Substituindo “n” por 2log n em f’(n), temos:
Exercício c (cont.) f’(n) = n · 2log n e g’(n) = n · (log n)3 Por 3.3, temos f’ cresce muito mais rapidamente que g’.Sendo assim, g’ = o(f’)
Exercício d f(n) = (log n)log ne g(n) = n / (log n) Multiplicando ambas por log n, temos: f’(n) = (log n)log n + 1 e g’(n) = n f’(n) = (log n)log n + 1 e g’(n) = 2log n Como log n > 2 e (log n) + 1 > log n, g’ = o(f’)
Exercício e f(n) = n1/2e g(n) = (log n)5 f(n) = (2log n)1/2 = 2(log n)/2 Pelo Teorema 3.3, temos queg(n) = o(f(n))
Exercício f f(n) = n·2ne g(n) = 3n g(n) = (1,5 · 2)n g(n) = (1,5)n· 2n f(n) = n · 2n Pelo Teorema 3.3, (1,5)ncresce mais rapidamente que n, logo:f(n) = o(g(n))