Você está na página 1de 55

GBC034 - Notação e Análise Assintótica de

Algoritmos

Marcelo K. Albertini

12 de Junho de 2013
Aula de hoje

Nesta aula veremos


Notação de complexidade
Análise assintótica de algoritmos

2/15
Estudo de complexidade de algoritmos

Dois fatores
Tempo de execução
Espaço de memória necessário

Motivações
qual é o menor custo possı́vel?
é possı́vel resolver o problema em tempo hábil?

3/15
Caso hipotético

Problema
Um banco tem 10 milhões clientes.
Cada cliente faz em média 4 transações diárias.

Relatório
O banco precisa entregar um relatório diário para o Banco Central,
com uma relação ordenada de todas as transações.

Infraestrutura
O computador do banco é dedicado ao problema e resolve
operações lógico-aritméticas na taxa de 230 (∼ 1 bilhão) operações
por segundo.

4/15
Caso hipotético

Problema
Um banco tem 10 milhões clientes.
Cada cliente faz em média 4 transações diárias.

Relatório
O banco precisa entregar um relatório diário para o Banco Central,
com uma relação ordenada de todas as transações.

Infraestrutura
O computador do banco é dedicado ao problema e resolve
operações lógico-aritméticas na taxa de 230 (∼ 1 bilhão) operações
por segundo.

4/15
Caso hipotético

Problema
Um banco tem 10 milhões clientes.
Cada cliente faz em média 4 transações diárias.

Relatório
O banco precisa entregar um relatório diário para o Banco Central,
com uma relação ordenada de todas as transações.

Infraestrutura
O computador do banco é dedicado ao problema e resolve
operações lógico-aritméticas na taxa de 230 (∼ 1 bilhão) operações
por segundo.

4/15
Um problema de ordenação

Se o algoritmo é O(n2 ), como o Bubblesort, o banco:


a) conseguirá tranquilamente fazer o relatório a tempo;
b) deverá comprar um computador melhor;
c) deverá contratar um programador melhor.

5/15
Um problema de ordenação

Se o algoritmo é O(n2 ), como o Bubblesort, o banco:


a) conseguirá tranquilamente fazer o relatório a tempo;
b) deverá comprar um computador melhor;
c) deverá contratar um programador melhor.

5/15
Um problema de ordenação

Se o algoritmo é O(n2 ), como o Bubblesort, o banco:


a) conseguirá tranquilamente fazer o relatório a tempo;
b) deverá comprar um computador melhor;
c) deverá contratar um programador melhor.

5/15
Um problema de ordenação

Se o algoritmo é O(n2 ), como o Bubblesort, o banco:


a) conseguirá tranquilamente fazer o relatório a tempo;
b) deverá comprar um computador melhor;
c) deverá contratar um programador melhor.

5/15
Notação de complexidade

Função de complexidade (de tempo ou espaço)


Para um problema de tamanho n, buscamos uma função f (n) que
descreve o componente principal do nosso custo

Conflito de interesses
Frequentemente, quando a complexidade de tempo diminui, a
complexidade de espaço aumenta

6/15
Notação

Melhor caso: Ω
Menor custo de um algoritmo (tempo ou espaço) para todas as
entradas (problema) de tamanho n

Pior caso: O
Maior custo possı́vel de um algoritmo (tempo ou espaço) para
todas as entradas (problema) de tamanho n.

O custo nunca é menor que no melhor caso e nunca maior do que


no pior caso.

7/15
Notação

Melhor caso: Ω
Menor custo de um algoritmo (tempo ou espaço) para todas as
entradas (problema) de tamanho n

Pior caso: O
Maior custo possı́vel de um algoritmo (tempo ou espaço) para
todas as entradas (problema) de tamanho n.

O custo nunca é menor que no melhor caso e nunca maior do que


no pior caso.

7/15
Caso médio

Caso médio ou esperado: Θ


O conjunto de entradas n é descrito por uma distribuição de
probabilidades.
Qual é a função de custo, considerando a probabilidade de cada
entrada de tamanho n?

8/15
Exemplos

Problema
Verificar se um dado número está em um vetor.
Entrada: vetor com n números.
Saı́da: Afirmativo, se número buscado está entre os n números do
vetor. Negativo, caso contrário.

Algoritmo
Comparar cada número do vetor com o número buscado. Dar a
resposta afirmativa assim que encontrá-lo.

9/15
Exemplos

Problema
Verificar se um dado número está em um vetor.
Entrada: vetor com n números.
Saı́da: Afirmativo, se número buscado está entre os n números do
vetor. Negativo, caso contrário.

Algoritmo
Comparar cada número do vetor com o número buscado. Dar a
resposta afirmativa assim que encontrá-lo.

9/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise de casos

Casos
Melhor caso: notação Ω
f (n) = 2 operações
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Pior caso: notação O
f (n) = 2n + 1 operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Caso médio: distribuição de probabilidade uniforme
Θ(n) =

10/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Análise assintótica

Casos
Notação limitante inferior Ω
f (n) = 1 operação
Ω(n) = 1, i.e., f (n) ≥ c ∗ Ω(n)
Notação limitante superior O
f (n) = 5n operações
O(n) = n, i.e., f (n) ≤ c ∗ O(n)
Notação limitante superior e inferior iguais
c1 ∗ Θ(n) ≤ f (n) ≤ c2 ∗ Θ(n)
não há no caso de busca de número em vetor
Não utiliza-se notação para casos médios

11/15
Exemplo: avaliação assintótica
Exemplo 1
f (n) = n2 + n + c
n2 = g (n) = O(f (n))
n2 domina assintoticamente os outros termos

Exemplo 2
f (n) = n + log (n) + c
O(n)
n domina assintoticamente os outros termos

Exemplo 3
f (n) = n! + n2 + c
O(n!)
n! domina assintoticamente os outros termos
12/15
Exemplo: avaliação assintótica
Exemplo 1
f (n) = n2 + n + c
n2 = g (n) = O(f (n))
n2 domina assintoticamente os outros termos

Exemplo 2
f (n) = n + log (n) + c
O(n)
n domina assintoticamente os outros termos

Exemplo 3
f (n) = n! + n2 + c
O(n!)
n! domina assintoticamente os outros termos
12/15
Exemplo: avaliação assintótica
Exemplo 1
f (n) = n2 + n + c
n2 = g (n) = O(f (n))
n2 domina assintoticamente os outros termos

Exemplo 2
f (n) = n + log (n) + c
O(n)
n domina assintoticamente os outros termos

Exemplo 3
f (n) = n! + n2 + c
O(n!)
n! domina assintoticamente os outros termos
12/15
Orientações

Desprezar constantes
f (n) = 100000000 ∗ n + 999999999
O(f (n)) = n
Desprezar termos de menor grandeza

Atenção
Complexidade assintótica menor não indica que o algoritmo sempre
é o melhor. Se as constantes forem significativas, na prática é
melhor considerá-las.

13/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Classes de problemas

O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )

O(1): ordem constante


O(log (n)): ordem logaritmica
O(n): ordem linear
O(nlog (n)): ordem tı́pica de soluções em “pedaços”, e.g.,
árvores
O(n2 ): ordem quadrática. “um laço dentro de outro”
O(2n ): ordem exponencial. Impraticável.
O(n!): ordem fatorial. Pior que exponencial.

14/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15
Caso bancário

Avaliação:
Ordem do Bubblesort O(n2 )
Elementos a ordenar: número de transações n = 4 × 107
Operações necessárias: (4 × 107 )2
Capacidade do computador: 230 operações por segundo
Tempo necessário em minutos: (4 × 107 )2 /230

= 17 dias, 4 horas, 55 minutos e 16 segundos

15/15

Você também pode gostar