complexidade assintótica de programas x análise...

90
Análise de Algoritmos Complexidade Assintótica de Programas X Análise Empírica Hebert Coelho Nádia Félix Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas

Upload: others

Post on 07-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 2: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 3: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 4: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 5: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 6: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 7: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 8: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 9: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 10: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 11: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 12: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 13: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 14: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 15: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 16: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 17: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 18: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 19: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 20: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 21: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 22: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 23: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 24: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 25: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 26: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 27: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 28: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 29: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 30: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 31: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 32: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 33: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 34: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 35: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 36: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 37: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 38: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 39: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 40: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 41: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 42: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 43: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 44: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 45: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 46: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 47: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 48: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 49: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 50: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 51: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 52: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 53: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 54: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 55: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 56: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 57: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 58: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 59: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 60: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 61: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 62: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 63: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 64: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 65: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 66: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 67: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 68: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 69: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 70: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 71: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 72: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 73: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 74: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 75: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 76: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 77: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 78: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 79: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 80: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 81: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 82: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 83: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

Análise de Algoritmos

Funções de complexidade frequentes

Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas

Page 84: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

Análise de Algoritmos

Funções de complexidade frequentes

Prof. Hebert Coelho e Profa. Nádia Félix Complexidade Assintótica de Programas

Page 85: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 86: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 87: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 88: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 89: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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

Page 90: Complexidade Assintótica de Programas X Análise Empíricahebert/disc/aed1/AED1_03_complexidade.pdf · Análise de Algoritmos Análise de Algoritmos 1 Introdução; 2 Conceitos básicos;

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