Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
Complexidade Assintótica de Programas X Análise...
Transcript of Complexidade Assintótica de Programas X Análise...
Análise de Algoritmos
Complexidade Assintótica de ProgramasX
Análise Empírica
Hebert CoelhoNádia Félix
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Existem duas formas principais de análise de algoritmos eprogramas:
1 Análise Matemática;2 Análise Empírica;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise de Algoritmos
1 Introdução;
2 Conceitos básicos;3 Notação assintótica: notação O;4 Análise Empírica de Algoritmos
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise de Algoritmos
1 Introdução;2 Conceitos básicos;
3 Notação assintótica: notação O;4 Análise Empírica de Algoritmos
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise de Algoritmos
1 Introdução;2 Conceitos básicos;3 Notação assintótica: notação O;
4 Análise Empírica de Algoritmos
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise de Algoritmos
1 Introdução;2 Conceitos básicos;3 Notação assintótica: notação O;4 Análise Empírica de Algoritmos
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Introdução
Objetivo: possibilitar medir eficiência de algoritmos;
Analisar um algoritmo: prever os recursos que serãonecessários;Busca: Sequencial ou Binária?Ordenação: Inserção;Análise Empírica de Algoritmos
Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. A guide to the theory of NP-Completeness,
W.H. Freeman and Company: New York, 1979.Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Introdução
Objetivo: possibilitar medir eficiência de algoritmos;Analisar um algoritmo: prever os recursos que serãonecessários;
Busca: Sequencial ou Binária?Ordenação: Inserção;Análise Empírica de Algoritmos
Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. A guide to the theory of NP-Completeness,
W.H. Freeman and Company: New York, 1979.Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Introdução
Objetivo: possibilitar medir eficiência de algoritmos;Analisar um algoritmo: prever os recursos que serãonecessários;
Busca: Sequencial ou Binária?Ordenação: Inserção;Análise Empírica de Algoritmos
P1
A1 A2
A3A4
A5
Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. A guide to the theory of NP-Completeness,
W.H. Freeman and Company: New York, 1979.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Introdução
Objetivo: possibilitar medir eficiência de algoritmos;Analisar um algoritmo: prever os recursos que serãonecessários;Busca: Sequencial ou Binária?
Ordenação: Inserção;Análise Empírica de Algoritmos
P1 = buscaA1 = Sequencial
A2 = Binaria
Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. A guide to the theory of NP-Completeness,
W.H. Freeman and Company: New York, 1979.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Introdução
Objetivo: possibilitar medir eficiência de algoritmos;Analisar um algoritmo: prever os recursos que serãonecessários;Busca: Sequencial ou Binária?Ordenação: Inserção;
Análise Empírica de Algoritmos
P2 = ordenacao
A1 = Insercao
A2 = Mergesort
A3 = Quicksort
Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. A guide to the theory of NP-Completeness,
W.H. Freeman and Company: New York, 1979.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Introdução
Objetivo: possibilitar medir eficiência de algoritmos;Analisar um algoritmo: prever os recursos que serãonecessários;Busca: Sequencial ou Binária?Ordenação: Inserção;Análise Empírica de Algoritmos
Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. A guide to the theory of NP-Completeness,
W.H. Freeman and Company: New York, 1979.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: definições
modelo assumido: instruções executadas uma após aoutra, sem operações concorrentes (ou simultâneas);
execução de uma operação toma uma unidade de tempo;a memória é infinita;problema com entrada de tamanho n: função de custoou função de complexidade f (n);função de complexidade de tempo: número deexecuções de determinada operação consideradarelevante;função de complexidade de espaço: espaço dememória ocupada;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: definições
modelo assumido: instruções executadas uma após aoutra, sem operações concorrentes (ou simultâneas);execução de uma operação toma uma unidade de tempo;
a memória é infinita;problema com entrada de tamanho n: função de custoou função de complexidade f (n);função de complexidade de tempo: número deexecuções de determinada operação consideradarelevante;função de complexidade de espaço: espaço dememória ocupada;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: definições
modelo assumido: instruções executadas uma após aoutra, sem operações concorrentes (ou simultâneas);execução de uma operação toma uma unidade de tempo;a memória é infinita;
problema com entrada de tamanho n: função de custoou função de complexidade f (n);função de complexidade de tempo: número deexecuções de determinada operação consideradarelevante;função de complexidade de espaço: espaço dememória ocupada;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: definições
modelo assumido: instruções executadas uma após aoutra, sem operações concorrentes (ou simultâneas);execução de uma operação toma uma unidade de tempo;a memória é infinita;problema com entrada de tamanho n: função de custoou função de complexidade f (n);
função de complexidade de tempo: número deexecuções de determinada operação consideradarelevante;função de complexidade de espaço: espaço dememória ocupada;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: definições
modelo assumido: instruções executadas uma após aoutra, sem operações concorrentes (ou simultâneas);execução de uma operação toma uma unidade de tempo;a memória é infinita;problema com entrada de tamanho n: função de custoou função de complexidade f (n);função de complexidade de tempo: número deexecuções de determinada operação consideradarelevante;
função de complexidade de espaço: espaço dememória ocupada;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: definições
modelo assumido: instruções executadas uma após aoutra, sem operações concorrentes (ou simultâneas);execução de uma operação toma uma unidade de tempo;a memória é infinita;problema com entrada de tamanho n: função de custoou função de complexidade f (n);função de complexidade de tempo: número deexecuções de determinada operação consideradarelevante;função de complexidade de espaço: espaço dememória ocupada;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: exemplo
Exemplo: calcular o fatorial de um número n.
fatorial(n)1: fat ← 1;2: para (i ← 1; i ≤ n; i ++) faça // executa n vezes3: fat ← fat ∗ i ;4: retorna fat
Complexidade de tempo: c1.n;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: fatorial
Exemplo: calcular o fatorial de um número n.Tamanho da entrada do problema: n;
fatorial(n)1: fat ← 1;2: para (i ← 1; i ≤ n; i ++) faça // executa n vezes3: fat ← fat ∗ i ; // tempo constante c1
4: retorna fat
Complexidade de tempo: c1.n;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: melhor caso, pior caso e caso médio
Três cenários dependentes da entrada:Melhor caso: menor tempo de execução;
Pior caso: maior tempo de execução. Geralmente,priorizamos determinar o pior caso;Caso médio: média dos tempos de execução. Mais difícilde obter;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: melhor caso, pior caso e caso médio
Três cenários dependentes da entrada:Melhor caso: menor tempo de execução;Pior caso: maior tempo de execução. Geralmente,priorizamos determinar o pior caso;
Caso médio: média dos tempos de execução. Mais difícilde obter;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: melhor caso, pior caso e caso médio
Três cenários dependentes da entrada:Melhor caso: menor tempo de execução;Pior caso: maior tempo de execução. Geralmente,priorizamos determinar o pior caso;Caso médio: média dos tempos de execução. Mais difícilde obter;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: melhor caso, pior caso e caso médio
Exemplo: busca sequencial.Operação relevante: comparação de x com elementos de V ;
buscaSequencial(x ,V )1: i ← 1;2: enquanto (i ≤ n) e (V [i] 6= x) faça // executa n vezes no máximo
3: i ← i + 1;4: se i > n então “Busca sem sucesso”5: senão “Busca com sucesso”
Complexidade de tempo: n
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: melhor caso
Melhor caso da busca sequencial: x está em V [1]!
buscaSequencial(x ,V )1: i ← 1;2: enquanto (i ≤ n) e (V [i] 6= x) faça // executa n vezes no máximo
3: i ← i + 1;4: se i > n então “Busca sem sucesso”5: senão “Busca com sucesso”
Complexidade de tempo: 1
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: pior caso
Pior caso da busca sequencial: x está em V [n] ou não estáem V !
buscaSequencial(x ,V )1: i ← 1;2: enquanto (i ≤ n) e (V [i] 6= x) faça // executa n vezes no máximo
3: i ← i + 1;4: se i > n então “Busca sem sucesso”5: senão “Busca com sucesso”
Complexidade de tempo: n
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: caso médio
Caso médio da busca sequencial: assumindo que xestá em V , f (n) = 1× p1 + 2× p2 + . . .+ n × pn onde pi éprobabilidade de x estar na posição i ;
probabilidades são iguais: pi =1n ;
Complexidade de tempo: n+12 , ou seja, uma pesquisa
bem-sucedida examina aproximadamente metade dosregistros.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: caso médio
Caso médio da busca sequencial: assumindo que xestá em V , f (n) = 1× p1 + 2× p2 + . . .+ n × pn onde pi éprobabilidade de x estar na posição i ;probabilidades são iguais: pi =
1n ;
Complexidade de tempo: n+12 , ou seja, uma pesquisa
bem-sucedida examina aproximadamente metade dosregistros.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: caso médio
Caso médio da busca sequencial: assumindo que xestá em V , f (n) = 1× p1 + 2× p2 + . . .+ n × pn onde pi éprobabilidade de x estar na posição i ;probabilidades são iguais: pi =
1n ;
Complexidade de tempo: n+12 , ou seja, uma pesquisa
bem-sucedida examina aproximadamente metade dosregistros.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑inf sup
inicializ.Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑ ↑inf meio sup
1a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑inf sup
1a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑inf sup
2a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑ ↑inf meio sup
2a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑inf sup
3a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑inf sup
4a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
1: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio] então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup] então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
↑ ↑inf sup
5a iter. Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Complexidade da Busca Binária
Cada iteração (linhas 4–9) divide ao meio a faixa entre infe sup.Termina quando faixa tem apenas 1 elemento.Quantas iterações, dividindo ao meio, até 1 elemento?
i ∨ ...
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Complexidade da Busca Binária
Cada iteração (linhas 4–9) divide ao meio a faixa entre infe sup.Termina quando faixa tem apenas 1 elemento.Quantas iterações, dividindo ao meio, até 1 elemento?Equivalente: quantas vezes devo dobrar até chegar a n?
i ∧ ...
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Complexidade da Busca Binária
Cada iteração (linhas 4–9) divide ao meio a faixa entre infe sup.Termina quando faixa tem apenas 1 elemento.Quantas iterações, dividindo ao meio, até 1 elemento?Equivalente: quantas vezes devo dobrar até chegar a n?
i ∧ ...
2i = (n) ⇔ i = log2(n)
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Complexidade da Busca Binária
1
1
(log 2
n)×
11: BuscaBinária(chave, lista[0 . . . n])2: inf ← −13: sup ← n4: enquanto inf < sup − 1 faça5: meio ← b inf+sup
2 c6: se chave ≤ lista[meio].chave então7: sup ← meio8: senão9: inf ← meio
10: se chave = lista[sup].chave então11: retorna lista[sup]12: senão13: retorna elemento não encontrado
Total operações: 1 + log2 n, para n elementos.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: busca sequencial × busca binária
Problema de busca no pior caso: busca binária levag(n) = 1 + log2 n passos e busca sequencial leva f (n) = npassos;
Vamos comparar f (n) = n e g(n) = 1 + log2 n:
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: busca sequencial × busca binária
Problema de busca no pior caso: busca binária levag(n) = 1 + log2 n passos e busca sequencial leva f (n) = npassos;Vamos comparar f (n) = n e g(n) = 1 + log2 n:
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Conceitos Básicos: busca sequencial × busca binária
Problema de busca no pior caso: busca binária levag(n) = 1 + log2 n passos e busca sequencial leva f (n) = npassos;Vamos comparar f (n) = n e g(n) = 1 + log2 n:
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Análise assintótica dos programas: mede como f (n) secomporta conforme n aumenta indefinidamente;
Uma função f (n) é O(g(n)) (notação f (n) = O(g(n))) seexistem duas constantes positivas c e m tais quef (n) ≤ c.g(n), para todo n ≥ m;f (n) = O(g(n)): g(n) é limite superior para f (n);
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Análise assintótica dos programas: mede como f (n) secomporta conforme n aumenta indefinidamente;Uma função f (n) é O(g(n)) (notação f (n) = O(g(n))) seexistem duas constantes positivas c e m tais quef (n) ≤ c.g(n), para todo n ≥ m;
f (n) = O(g(n)): g(n) é limite superior para f (n);
n
f, g
f(n)
c.g(n)
m
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Análise assintótica dos programas: mede como f (n) secomporta conforme n aumenta indefinidamente;Uma função f (n) é O(g(n)) (notação f (n) = O(g(n))) seexistem duas constantes positivas c e m tais quef (n) ≤ c.g(n), para todo n ≥ m;f (n) = O(g(n)): g(n) é limite superior para f (n);
n
f, g
f(n)
c.g(n)
m
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Análise assintótica dos programas: mede como f (n) secomporta conforme n aumenta indefinidamente;Uma função f (n) é O(g(n)) (notação f (n) = O(g(n))) seexistem duas constantes positivas c e m tais quef (n) ≤ c.g(n), para todo n ≥ m;f (n) = O(g(n)): g(n) é limite superior para f (n);
n
f, g
f(n)
c.g(n)
m
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Qual a complexidade assintótica da busca sequencial e dabusca binária?
Busca sequencial: n = O(n), para c ≥ 1, m = 1;Busca binária: 1 + log2 n = O(log2 n), para c ≥ 1, m = 2;Como 1 + log2 n = O(n), c ≥ 1, m = 1, a busca binária éassintoticamente mais eficiente que a busca sequencial!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Qual a complexidade assintótica da busca sequencial e dabusca binária?Busca sequencial: n = O(n), para c ≥ 1, m = 1;
Busca binária: 1 + log2 n = O(log2 n), para c ≥ 1, m = 2;Como 1 + log2 n = O(n), c ≥ 1, m = 1, a busca binária éassintoticamente mais eficiente que a busca sequencial!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Qual a complexidade assintótica da busca sequencial e dabusca binária?Busca sequencial: n = O(n), para c ≥ 1, m = 1;Busca binária: 1 + log2 n = O(log2 n), para c ≥ 1, m = 2;
Como 1 + log2 n = O(n), c ≥ 1, m = 1, a busca binária éassintoticamente mais eficiente que a busca sequencial!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Qual a complexidade assintótica da busca sequencial e dabusca binária?Busca sequencial: n = O(n), para c ≥ 1, m = 1;Busca binária: 1 + log2 n = O(log2 n), para c ≥ 1, m = 2;Como 1 + log2 n = O(n), c ≥ 1, m = 1, a busca binária éassintoticamente mais eficiente que a busca sequencial!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Vamos analisar o trecho de código abaixo:
1: sum1← 0;2: para (i = 1; i ≤ n; i ++) faça
// n vezes3: para (j = 1; j ≤ n; j ++) faça // n vezes4: sum1← sum1 + 1; // n2 vezes
Complexidade assintótica: O(n2)!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Vamos analisar o trecho de código abaixo:
1: sum1← 0;2: para (i = 1; i ≤ n; i ++) faça // n vezes3: para (j = 1; j ≤ n; j ++) faça
// n vezes4: sum1← sum1 + 1; // n2 vezes
Complexidade assintótica: O(n2)!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Vamos analisar o trecho de código abaixo:
1: sum1← 0;2: para (i = 1; i ≤ n; i ++) faça // n vezes3: para (j = 1; j ≤ n; j ++) faça // n vezes4: sum1← sum1 + 1;
// n2 vezes
Complexidade assintótica: O(n2)!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Vamos analisar o trecho de código abaixo:
1: sum1← 0;2: para (i = 1; i ≤ n; i ++) faça // n vezes3: para (j = 1; j ≤ n; j ++) faça // n vezes4: sum1← sum1 + 1; // n2 vezes
Complexidade assintótica: O(n2)!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Vamos analisar o trecho de código abaixo:
1: sum1← 0;2: para (i = 1; i ≤ n; i ++) faça // n vezes3: para (j = 1; j ≤ n; j ++) faça // n vezes4: sum1← sum1 + 1; // n2 vezes
Complexidade assintótica: O(n2)!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Outro trecho de código:
1: sum2← 0;2: para (i = 1; i ≤ n; i ++) faça3: para (j = 1; j ≤ i ; j ++) faça4: sum2← sum2 + 1;
Complexidade assintótica:
1+2+3+. . .+n =n∑
j=1
j =n(n + 1)
2=
n2 + n2
= O(n2), c ≥ 1,m = 1.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Outro trecho de código:
1: sum2← 0;2: para (i = 1; i ≤ n; i ++) faça3: para (j = 1; j ≤ i ; j ++) faça4: sum2← sum2 + 1;
Complexidade assintótica:
1+2+3+. . .+n =n∑
j=1
j =n(n + 1)
2=
n2 + n2
= O(n2), c ≥ 1,m = 1.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Apenas mais um trecho de código:
1: sum3← 0;2: para (i = 1; i ≤ n; i ++) faça3: para (j = i ; j ≤ n; j ++) faça4: sum3← sum3 + 1;
Complexidade assintótica:
n+(n−1)+. . .+1 =n∑
j=1
j =n(n + 1)
2=
n2 + n2
= O(n2), c ≥ 1,m = 1.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Apenas mais um trecho de código:
1: sum3← 0;2: para (i = 1; i ≤ n; i ++) faça3: para (j = i ; j ≤ n; j ++) faça4: sum3← sum3 + 1;
Complexidade assintótica:
n+(n−1)+. . .+1 =n∑
j=1
j =n(n + 1)
2=
n2 + n2
= O(n2), c ≥ 1,m = 1.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Notação Assintótica: Notação O
Apenas mais um trecho de código:
1: sum3← 0;2: para (i = 1; i ≤ n; i ++) faça3: para (j = i ; j ≤ n; j ++) faça4: sum3← sum3 + 1;
Complexidade assintótica:
n+(n−1)+. . .+1 =n∑
j=1
j =n(n + 1)
2=
n2 + n2
= O(n2), c ≥ 1,m = 1.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por inserção - Exemplo
O R D E N A
O R D E N A
O R D E N A
D O R E N A
D E O R N A
D E N O R A
A D E N O R
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Algoritmo
1: Ordenação-Inserção(A);2: for (j = 2; j ≤ n; j ++) do3: key ← A[j];
// Insere A[j] na sequência ordenada A[1..j − 1]4: i ← (j − 1);5: while (i > 0) and (A[i] > chave) do6: A[i + 1]← A[i];7: i ← (i − 1);8: A[i + 1]← chave;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do
(n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j];
n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1);
n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do
∑nj=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];
∑nj=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);
∑nj=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave;
n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Complexidade Local
1: Ordenação-Inserção(A); Frequência2: for (j = 2; j ≤ n; j ++) do (n − 1) + 1
3: key ← A[j]; n − 1
4: i ← (j − 1); n − 1
5: while (i > 0) and (A[i] > chave) do∑n
j=2 tj
6: A[i + 1]← A[i];∑n
j=2(tj − 1)
7: i ← (i − 1);∑n
j=2(tj − 1)
8: A[i + 1]← chave; n − 1onde tj é o número de vezes que o teste do laço while éexecutado para cada valor de j .
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Análise Assintótica
Operação relevante: comparações entre chaves
1: Ordenação-Inserção(A);2: for (j = 2; j ≤ n; j ++) do3: key ← A[j];
// Insere A[j] na sequência ordenada A[1..j − 1]4: i ← (j − 1);5: while (i > 0) and (A[i] > chave) do6: A[i + 1]← A[i];7: i ← (i − 1);8: A[i + 1]← chave;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Análise Assintótica
1: Ordenação-Inserção(A);2: for (j = 2; j ≤ n; j ++) do3: key ← A[j];
// Insere A[j] na sequência ordenada A[1..j − 1]4: i ← (j − 1);5: while (i > 0) and (A[i] > chave) do6: A[i + 1]← A[i];7: i ← (i − 1);8: A[i + 1]← chave;
Melhor caso: sequência já ordenada;Linha 2 executa n − 1 vezes: O(n)!
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Análise Assintótica
1: Ordenação-Inserção(A);2: for (j = 2; j ≤ n; j ++) do3: key ← A[j];
// Insere A[j] na sequência ordenada A[1..j − 1]4: i ← (j − 1);5: while (i > 0) and (A[i] > chave) do6: A[i + 1]← A[i];7: i ← (i − 1);8: A[i + 1]← chave;
Pior caso: sequência invertida;Linha 2 executa n − 1 vezes e linha 5 executa:
2 + 3 + . . .+ n =n∑
j=2
j =(n − 1)(n + 2)
2=
n2 + n − 22
= O(n2).
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Ordenação por Inserção - Análise Assintótica
1: Ordenação-Inserção(A);2: for (j = 2; j ≤ n; j ++) do3: key ← A[j];
// Insere A[j] na sequência ordenada A[1..j − 1]4: i ← (j − 1);5: while (i > 0) and (A[i] > chave) do6: A[i + 1]← A[i];7: i ← (i − 1);8: A[i + 1]← chave;
Pior caso: sequência invertida;
n2 + n − 22
= O(n2), c ≥ 1,m = 2.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Funções de complexidade frequentes
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Funções de complexidade frequentes
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Exercícios
1 Leia o capítulo 1 do livro 3 da bibliografia;2 Resolva os exercícios do capítulo 1 do livro do livro 3 da
bibliografia;3 Ler o texto da professora Celina para a revista Ciencia
Hoje.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise Empírica
1 As técnicas de análise matemática podem ser aplicadascom sucesso em muitos algoritmos;
2 Porém, a análise matemática para diversos problemaspode ser muito difícil, principalmente a análise do casomédio;
3 A principal alternativa à análise matemática de umalgoritmo é a análise empírica.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise Empírica
Alguns passos para executar a análise empírica da eficiênciade um algoritmo:
1 Entender o propósito do experimento;2 Escolher uma métrica a ser medida e unidade de medida
(ex.:unidade de tempo ou número de operações)3 Escolher as características das amostras de entrada.4 Implementar um programa implementando o algoritmo
para a experimentação;5 Gerar as amostras de entrada;6 Executar o programa sobre as amostras;7 Analisar os dados obtidos;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise Empírica
Desenvolver os seguintes experimentos para análise empirica:1 Implementar em linguagem C o algoritmo da soma de
matrizes. Contar o número de passos que o algoritmoexecuta para entradas (matrizes) de diversos tamanhosgeradas aleatoriamente;
2 Implementar em linguagem C o algoritmo da multiplicaçãode matrizes e contar o número de passos que o algoritmoexecuta para entradas (matrizes) de diversos tamanhosgeradas aleatoriamente;
3 Gere entradas idênticas para os as implementações dosalgoritmos de soma e multiplicação de matrizes e compareo tempo de execução de cada implementação;
4 Assista ao vídeo “Medindo tempo de execução”:https://www.youtube.com/watch?v=TrMZRkywpVU
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Análise Empírica
Desenvolver os seguintes experimentos para análise empirica:1 Implementar em linguagem C a busca sequencial;2 Implementar em linguagem C a busca binária;3 Implementar em linguagem C algum método de ordenação
de vetores;4 Gere 10 vetores com o maior tamanho possível com
valores aleatórios. Para cada vetor gerado, gere pelomenos 1000 elementos aleatórios a serem buscados.Execute a sua implementação da busca sequencial sobrecada um dos 10000 casos de teste; Ordene os vetores eexecute a sua implementação da busca binária sobre cadaum dos 10000 casos de teste. Compare os tempos decada implementação, considere o tempo da ordenação +busca binária;
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas
Análise de Algoritmos
Bibliografia
CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C.Introduction to Algorithms, 3a edição, MIT Press, 2009.
GAREY, M. R. e JOHNSON, D. S. Computers and Intractability. Aguide to the theory of NP-Completeness, W.H. Freeman andCompany: New York, 1979.
SZWARCFITER, J. L. e MARKENZON, L. Estruturas de Dados eseus Algoritmos, LTC, 1994.
ZIVIANI, N. Projeto de Algoritmos: com implementações em Pascal eC, 2a edição, Cengage Learning, 2009.
Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas