Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos
Marcelo K. Albertini
12 de Junho de 2013
Aula de hoje
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
5/15
Um problema de ordenação
5/15
Um problema de ordenação
5/15
Um problema de ordenação
5/15
Notação de complexidade
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.
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.
7/15
Caso médio
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 )
14/15
Classes de problemas
O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )
14/15
Classes de problemas
O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )
14/15
Classes de problemas
O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )
14/15
Classes de problemas
O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )
14/15
Classes de problemas
O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )
14/15
Classes de problemas
O(1) < O(log (n)) < O(n) < O(nlog (n)) < O(n2 ) < O(n3 ) <
O(2n )
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
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
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
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
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
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
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
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
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
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
15/15