Anlise de Algoritmos Disciplina Informtica Terica Prof Ktia

  • Slides: 14
Download presentation
Análise de Algoritmos Disciplina: Informática Teórica Prof. Kátia Guimarães e Prof. Ruy Guerra Hugo

Análise de Algoritmos Disciplina: Informática Teórica Prof. Kátia Guimarães e Prof. Ruy Guerra Hugo Santana – hps@cin. ufpe. br Disciplina Informática Teórica

A Notação O • f(n) = O(g(n)) se existem constantes c e N tal

A Notação O • f(n) = O(g(n)) se existem constantes c e N tal que, para n ≥ N, temse que f(n) ≤ c·g(n) – Intuitivamente, corresponde a noção de ≤ Disciplina Informática Teórica

A Notação Ω e Θ • Analogamente, tem-se a notação Ω (≥) – f(n)

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 ω (“>”) Disciplina Informática Teórica

Propriedades importantes • ( f(n) )c = o (af(n) ), se c > 0,

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 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 qualquer função logarítmica. Disciplina Informática Teórica

Propriedades Importantes • Se f(n) = O(s(n)) e g(n) = O(r(n)), então f(n) +

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)) e f(n) · g(n) = O(s(n) · r(n)) (Lemma 3. 2 do Udi Manber) Disciplina Informática Teórica

Exercícios (3. 5 do Manber) • Comparar as funções a seguir, e dizer se:

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)) Disciplina Informática Teórica

Exercício a f(n) = 100 n + log n e g(n) = n +

Exercício a f(n) = 100 n + log n e g(n) = n + (log n)2 n≤ 100 n ≤ n + (log n)2 ≤ 100 n + log n ≤ n+n≤ 100 n + n ≤ 2 n = O(n) 101 n = O(n) Lição: O termo maior em uma soma/subtração define a forma da função f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n)) Disciplina Informática Teórica

Exercício a – outra solução f(n) = 100 n + log n e g(n)

Exercício a – outra solução f(n) = 100 n + log n e g(n) = n + (log n)2 100 n = O(n) log n = O(n) (3. 3) f(n) = O(n + n) (3. 2) f(n) = O(n) n = O(n) (log n)2 = O(n) (3. 3) g(n) = O(n + n) (3. 2) g(n) = O(n) Logo, f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n)) Disciplina Informática Teórica

Exercício b f(n) = log n e g(n) = log (n 2 ) log

Exercício b f(n) = log n e g(n) = log (n 2 ) log (n 2) = log (n x n) = log (2 log n x 2 log n) = log (2 log n + log n) = 2 · log n Logo, f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n)) Disciplina Informática Teórica

Exercício c f(n) = n 2 / (log n) f(n) = n·n·(1/ logn) e

Exercício c f(n) = n 2 / (log n) f(n) = n·n·(1/ logn) e g(n) = n (log n)2 g(n) = n·(log n) Multiplicando ambas por log n, temos: f’(n) = n·n g’(n) = n·(log n)3 Substituindo “n” por 2 log n em f’(n), temos: Disciplina Informática Teórica

Exercício c (cont. ) f’(n) = n · 2 log n e g’(n) =

Exercício c (cont. ) f’(n) = n · 2 log n e g’(n) = n · (log n)3 Por 3. 3, temos f’ cresce muito mais rapidamente que g’. Sendo assim, g’ = o(f’) Disciplina Informática Teórica

Exercício d f(n) = (log n)log n e g(n) = n / (log n)

Exercício d f(n) = (log n)log n e 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) = 2 log n Como log n > 2 e (log n) + 1 > log n, g’ = o(f’) Disciplina Informática Teórica

Exercício e f(n) = n 1/2 e g(n) = (log n)5 f(n) = (2

Exercício e f(n) = n 1/2 e g(n) = (log n)5 f(n) = (2 log n)1/2 = 2(log n)/2 Pelo Teorema 3. 3, temos que g(n) = o(f(n)) Disciplina Informática Teórica

Exercício f f(n) = n· 2 n f(n) = n · 2 n e

Exercício f f(n) = n· 2 n f(n) = n · 2 n e g(n) = 3 n g(n) = (1, 5 · 2)n g(n) = (1, 5)n · 2 n Pelo Teorema 3. 3, (1, 5)n cresce mais rapidamente que n, logo: f(n) = o(g(n)) Disciplina Informática Teórica