Escolar Documentos
Profissional Documentos
Cultura Documentos
Complexidade de Algoritmos
14 de abril de 2022
Estrutura de Dados I 2 / 86
Roteiro
Roteiro
Crescimento de funções
Conceitos Gerais
Notação O
Notação Ω
Notação Θ
Notação Assintótica
Notações o e ω: notações estritas
Trabalho 1 - Complexidade de Algoritmos
Referências Bibliográficas
Estrutura de Dados I 4 / 86
Análise Assintótica de Algoritmos
Objetivos
Caracterı́sticas do TAD
Implementação do TAD
Implementação do TAD
Implementação do TAD
Definição
I Para uma dada função g (n), denotamos O(g (n)) o conjunto
de funções como:
O(g (n)) = {f (n) : existem constantes positivas c e n0 tais
que 0 ≤ f (n) ≤ c · g (n) para todo n ≥ n0 }
I uma função f (n) pertence ao conjunto O(g (n)) se existe uma
constante positiva c de forma que ela possa estar limitada por
c · g (n) para um valor de n suficienemente grande.
I Dizemos que f (n) ∈ O(g (n)), porém podemos adotar
f (n) = O(g (n)) (Abuso da notação de igualdade)
I Na maiora dos casos estamos interessados no limite superior,
pois queremos saber no pior caso, qual a complexidade de
tempo
Estrutura de Dados I 14 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Estrutura de Dados I 16 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
Estrutura de Dados I 17 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
Estrutura de Dados I 18 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
n + 5 ≤ c.n
Estrutura de Dados I 19 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
n + 5 ≤ c.n
5 ≤ c.n − n
Estrutura de Dados I 20 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
n + 5 ≤ c.n
5 ≤ c.n − n
c.n − n ≥ 5
Estrutura de Dados I 21 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
n + 5 ≤ c.n
5 ≤ c.n − n
c.n − n ≥ 5
n(c − 1) ≥ 5
Estrutura de Dados I 22 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
n + 5 ≤ c.n
5 ≤ c.n − n
c.n − n ≥ 5
n(c − 1) ≥ 5
5
n≥
c −1
Estrutura de Dados I 23 / 86
Crescimento de funções
Notação O
Exemplos
1. n + 5 é O(n)
Vamos encontrar c e n0
f (n) ≤ c.n
n + 5 ≤ c.n
5 ≤ c.n − n
c.n − n ≥ 5
n(c − 1) ≥ 5
5
n≥
c −1
c = 2 e n0 = 5
Estrutura de Dados I 24 / 86
Crescimento de funções
Notação O
Exemplos - Aluno
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos - Aluno
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos
I f (n) = n2 + O(n)
Significa que existe uma função h(n) ∈ O(n) de forma que
f (n) = n2 + h(n)
Estrutura de Dados I 39 / 86
Crescimento de funções
Notação Ω
Definição
I Para uma dada função g (n), denotamos Ω(g (n)) o conjunto
de funções como:
Ω(g (n)) = {f (n) : existem constantes positivas c e n0 tais
que 0 ≤ c · g (n) ≤ f (n) para todo n ≥ n0 }
I uma função f (n) pertence ao conjunto Ω(g (n)) se existe uma
constante positiva c de forma que ela possa estar limitada por
c · g (n) para um valor de n suficienemente grande.
I Dizemos que f (n) ∈ Ω(g (n)), porém podemos adotar
f (n) = Ω(g (n)) (Abuso da notação de igualdade)
Estrutura de Dados I 40 / 86
Crescimento de funções
Notação Ω
Exemplo 1
√
I n = Ω(log(n))
√
I Como n ≤ c · log(n) para
c >0
I Dizemos: “Raiz de n é, pelo
menos, omega de log n” para
um n suficienemente grande
Estrutura de Dados I 42 / 86
Crescimento de funções
Notação Ω
Exemplo 2
Exemplo 1
I 6n2 + n = Ω(n)
√
I n = Ω(log(n)) I 6n2 + n ≤ c.n
√
I Como n ≤ c · log(n) para I 6n + 1 ≤ c
c >0 I 6n ≤ c − 1
I Dizemos: “Raiz de n é, pelo c −1
menos, omega de log n” para I n≤
6
um n suficienemente grande I Para n0 = 1 temos de tomar
c=7
Estrutura de Dados I 43 / 86
Crescimento de funções
Notação Θ
Definição
I Para uma dada função g (n), denotamos Θ(g (n)) o conjunto
de funções como:
Θ(g (n)) = {f (n) : existem constantes positivas c1 , c2 e n0
tais que 0 ≤ c1 · g (n) ≤ f (n) ≤ c2 · g (n) para todo n ≥ n0 }
I uma função f (n) pertence ao conjunto Θ(g (n)) se existem
constantes positiva c1 e c2 de forma que ela possa estar
limitada por c1 · g (n) e c2 · g (n) para um valor de n
suficienemente grande.
Estrutura de Dados I 44 / 86
Crescimento de funções
Notação Θ
limite superior
I Seja dado um problema, multiplicação de duas matrizes
quadradas n × n
I Conhecemos um algoritmo para resolver este problema (pelo
método trivial) de complexidade O(n3 )
I Sabemos que a complexidade deste problema não deve
superar O(n3 ), uma vez que existe um algoritmo que o resolve
com essa complexidade.
I O limite superior (upper bound) deste problema é O(n3 )
I limite superior de um problema pode mudar se alguém
descobrir um outro algoritmo melhor
O(n3 )
Estrutura de Dados I 47 / 86
Crescimento de funções
Notação Assintótica
limite superior
O(nlog 7 ) O(n3 )
Estrutura de Dados I 48 / 86
Crescimento de funções
Notação Assintótica
limite superior
Constante: ≈ 1
I Independente do tamanho de n, quantidade de
operações executadas é uma quantidade fixa de
vezes
Logarı́tmica: ≈ logb n
I Tı́pica de algoritmos que resolvem um problema
transformando-o em problemas menores.
Linear: ≈ n
I Uma certa quantidade de operações é
processada sobre cada um dos elementos de
entrada
I Situação ideal para quando é preciso processar
entrada e obter n elementos de saı́da
Estrutura de Dados I 52 / 86
Crescimento de funções
Notação Assintótica
Eficiência Assintótica
Estrutura de Dados I 54 / 86
Crescimento de funções
Notação Assintótica
Eficiência Assintótica
Estrutura de Dados I 55 / 86
Crescimento de funções
Notação Assintótica
Eficiência Assintótica
Estrutura de Dados I 56 / 86
Crescimento de funções
Notação Assintótica
Medida de Complexidade
Exercı́cio
Exercı́cio
Estrutura de Dados I 59 / 86
Crescimento de funções
Notação Assintótica
Exercı́cio
n1.3
f (n) = = n0.3
n
n log n
g (n) = = log n
n
Analisando Algoritmo
Analisando Algoritmo
Analisando Algoritmo
Analisando Algoritmo
Relações e Teorema
Estrutura de Dados I 70 / 86
Crescimento de funções
Notação Assintótica
Relações e Teorema
Estrutura de Dados I 71 / 86
Crescimento de funções
Notação Assintótica
Relações e Teorema
Estrutura de Dados I 72 / 86
Crescimento de funções
Notações o e ω: notações estritas
f (n)
lim =∞
n→∞ g (n)
Estrutura de Dados I 75 / 86
Crescimento de funções
Notações o e ω: notações estritas
f (n)
lim =∞
n→∞ g (n)
Estrutura de Dados I 76 / 86
Crescimento de funções
Notações o e ω: notações estritas
I 2n3 é o(n3 )
Estrutura de Dados I 79 / 86
Crescimento de funções
Notações o e ω: notações estritas
I 2n3 é o(n3 )
I (Desprezando as constantes) não podemos dizer que n3 é
sempre menor que n3 para um n suficientemente grande.
Estrutura de Dados I 80 / 86
Crescimento de funções
Notações o e ω: notações estritas
Exercı́cios de Anotação
Referências I
Referências II
Complexidade de Algoritmos
14 de abril de 2022