14
Disciplina Informática Teórica Análise de Algoritmos Disciplina: Informática Teórica Prof. Kátia Guimarães e Prof. Ruy Guerra Hugo Santana – [email protected]

Análise de Algoritmos

  • Upload
    thuyet

  • View
    22

  • Download
    0

Embed Size (px)

DESCRIPTION

Análise de Algoritmos. Disciplina: Informática Teórica Prof. Kátia Guimarães e Prof. Ruy Guerra Hugo Santana – [email protected]. 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 ≤. - PowerPoint PPT Presentation

Citation preview

Page 1: Análise de Algoritmos

Disciplina Informática Teórica

Análise de Algoritmos

Disciplina: Informática TeóricaProf. Kátia Guimarães e Prof. Ruy Guerra

Hugo Santana – [email protected]

Page 2: Análise de Algoritmos

Disciplina Informática Teórica

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 ≤

Page 3: Análise de Algoritmos

Disciplina Informática Teórica

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 ω (“>”)

Page 4: Análise de Algoritmos

Disciplina Informática Teórica

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.

Page 5: Análise de Algoritmos

Disciplina Informática Teórica

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)

Page 6: Análise de Algoritmos

Disciplina Informática Teórica

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

Page 7: Análise de Algoritmos

Disciplina Informática Teórica

Exercício a

f(n) = 100n + log n e g(n) = n + (log n)2

100n ≤100n + log n ≤100n + n ≤101n = O(n)

n ≤n + (log n)2 ≤n + n ≤2n = O(n)

f(n)=O(g(n)), f(n)=Ω(g(n)) e f(n) = Θ(g(n))

Lição: O termo maior em uma soma/subtraçãodefine a forma da função

Page 8: Análise de Algoritmos

Disciplina Informática Teórica

Exercício a – outra solução

f(n) = 100n + log n e g(n) = n + (log n)2

100n = 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))

Page 9: Análise de Algoritmos

Disciplina Informática Teórica

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

Page 10: Análise de Algoritmos

Disciplina Informática Teórica

Exercício c

f(n) = n2 / (log n) e g(n) = n (log n)2

f(n) = n·n·(1/ logn) g(n) = n·(log n)·(log n)

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:

Page 11: Análise de Algoritmos

Disciplina Informática Teórica

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

Page 12: Análise de Algoritmos

Disciplina Informática Teórica

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) = 2log n

Como log n > 2 e (log n) + 1 > log n, g’ = o(f’)

Page 13: Análise de Algoritmos

Disciplina Informática Teórica

Exercício e

f(n) = n1/2 e 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))

Page 14: Análise de Algoritmos

Disciplina Informática Teórica

Exercício f

f(n) = n·2n e g(n) = 3n

g(n) = (1,5 · 2)n

g(n) = (1,5)n · 2nf(n) = n · 2n

Pelo Teorema 3.3, (1,5)n cresce mais rapidamente que n, logo:f(n) = o(g(n))