Análise de Algoritmos

Documentos relacionados
Análise de Algoritmos

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

Análise de Algoritmos

Análise de Algoritmos

Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

AULA 13. Algoritmos p.526/582

Melhores momentos AULA 3. Algoritmos p.148/188

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Algoritmos de ordenação Quicksort

Quicksort Letícia Rodrigues Bueno

Análise de Algoritmos

ANÁLISE DE ALGORITMOS

Análise de Algoritmos

Aula 19: Métodos eficientes de ordenação

AULA 19 AULA 20. Ordenação: algoritmo Quicksort. Resumo. Melhores momentos

Melhores momentos AULA 1. Algoritmos p.38/86

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

AULA 23. Prof. Coelho

Estruturas de Dados 2

ANÁLISE DE ALGORITMOS

Estruturas de Dados 2

Ordenação em tempo linear

Análise de Algoritmos

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Algoritmos de Ordenação: QuickSort

AULA 21. Algoritmos p.760/792

Análise de Algoritmos

Estruturas de Dados 2

Análise de Algoritmos

Algoritmos de Ordenação: Tempo Linear

Programação dinâmica

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Algoritmos gulosos (greedy)

Análise de Algoritmos

Análise amortizada CLRS 17. Algoritmos p. 1

Paradigmas de programação

07 Ordenação em Memória Interna (parte 2) quicksort SCC201/501 - Introdução à Ciência de Computação II

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

I. Correção de Algoritmos Não-Recursivos

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Análise de Algoritmos

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

AULA 20. Algoritmos p.725/759

Estruturas Discretas

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Aula 04 Recorrência Prof. Tiago A. E. Ferreira

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

AULA 17. Melhores momentos. Segmento de soma máxima. Segmento de soma máxima. Conclusões. Algumas técnicas

Algoritmos de Ordenação

Programação dinâmica. CLRS cap 15. = recursão com tabela = transformação inteligente de recursão em iteração

Projeto e Análise de Algoritmos

Análise de Algoritmos

Estruturas de Dados. Cristina Gomes Fernandes. Estruturas de Dados p. 1

5. Algoritmos de Ordenação

Algoritimos e Estruturas de Dados III CIC210

- Métodos simples de busca - Métodos ingênuos de ordenação (introdução)

Análise de Algoritmos Algoritmos de Ordenação

Análise de Algoritmos

Análise de Algoritmos

Análise de algoritmos

O Teorema Mestre da Complexidade

Ordenação em Tempo Linear

BCC202 - Estrutura de Dados I

AED2 - Aula 11 Problema da separação e quicksort

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Análise de Complexidade para algoritmos iterativos e recursivos

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Conjuntos disjuntos dinâmicos

Análise de Algoritmos e Estruturas de Dados

Análise e Projeto de Algoritmos

AULA 17. Algoritmos p.662/695

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

Algoritmos gulosos (greedy)

Algoritmos de Ordenação: MergeSort

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Introdução à Análise Algoritmos

Algoritmos de Ordenação: Cota Inferior

Geometria Computacional p.1/14. Geometria Computacional p.1/14

Complexidade de Algoritmos

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Algoritmos gulosos (greedy) CLRS Cap 16 e KT Cap 4

Projeto e Análise de Algoritmos

Análise de algoritmos

Algoritmos de Ordenação

Transcrição:

Algoritmos p. 1/28 Análise de Algoritmos Parte destes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina.

Algoritmos p. 2/28 Análise de Algoritmos CLRS 7 Essas transparências foram adaptadas das transparências do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina.

Algoritmos p. 3/28 Partição Problema: Rearranjar um dado vetor A[p..r] e devolver um índice q tal que p q r e A[p..q 1] A[q] < A[q +1..r] Entra: p A 99 33 55 77 11 22 88 66 33 44 r

Algoritmos p. 3/28 Partição Problema: Rearranjar um dado vetor A[p..r] e devolver um índice q tal que p q r e A[p..q 1] A[q] < A[q +1..r] Entra: p A 99 33 55 77 11 22 88 66 33 44 r Sai: p q r A 33 11 22 33 44 55 99 66 77 88

Algoritmos p. 4/28 Particione p r A 99 33 55 77 11 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 11 55 77 99 22 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 11 55 77 99 22 88 66 33 44 A 33 11 22 77 99 55 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 11 55 77 99 22 88 66 33 44 A 33 11 22 77 99 55 88 66 33 44 A 33 11 22 77 99 55 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 11 55 77 99 22 88 66 33 44 A 33 11 22 77 99 55 88 66 33 44 i j x A 33 11 22 77 99 55 88 66 33 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 11 55 77 99 22 88 66 33 44 A 33 11 22 77 99 55 88 66 33 44 i j A 33 11 22 33 99 55 88 66 77 44

Algoritmos p. 4/28 Particione A 99 33 55 77 11 22 88 66 33 44 A 33 99 55 77 11 22 88 66 33 44 A 33 11 55 77 99 22 88 66 33 44 A 33 11 22 77 99 55 88 66 33 44 i j A 33 11 22 33 99 55 88 66 77 44 p q r A 33 11 22 33 44 55 88 66 77 99

Algoritmos p. 5/28 Particione Rearranja A[p..r] de modo que p q r e A[p..q 1] A[q] < A[q+1..r] PARTICIONE (A, p, r) 1 x A[r] x é o pivô 2 i p 1 3 para j p até r 1 faça 4 se A[j] x 5 então i i+1 6 A[i] A[j] 7 A[i+1] A[r] 8 devolva i+1 Invariantes: no começo de cada iteração de 3 6, (i0) A[p..i] x (i1) A[i+1..j 1] > x (i2) A[r] = x

Algoritmos p. 6/28 Consumo de tempo Quanto tempo consome em função de n := r p+1? linha consumo de todas as execuções da linha 1-2 = 2Θ(1) 3 = Θ(n) 4 = Θ(n) 5-6 = 2O(n) 7-8 = 2Θ(1) Conclusão: total = Θ(2n+4)+O(2n) = Θ(n) O algoritmo PARTICIONE consome tempo Θ(n).

Algoritmos p. 7/28 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A,p,r) 3 QUICKSORT(A,p,q 1) 4 QUICKSORT(A,q +1,r) p A 99 33 55 77 11 22 88 66 33 44 r

Algoritmos p. 8/28 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A,p,r) 3 QUICKSORT(A,p,q 1) 4 QUICKSORT(A,q +1,r) p q r A 33 11 22 33 44 55 88 66 77 99 No começo da linha 3, A[p..q 1] A[q] A[q+1..r]

Algoritmos p. 9/28 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A,p,r) 3 QUICKSORT(A,p,q 1) 4 QUICKSORT(A,q +1,r) p q r A 11 22 33 33 44 55 88 66 77 99

Algoritmos p. 10/28 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A,p,r) 3 QUICKSORT(A,p,q 1) 4 QUICKSORT(A,q +1,r) p q r A 11 22 33 33 44 55 66 77 88 99

Algoritmos p. 11/28 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A,p,r) 3 QUICKSORT(A,p,q 1) 4 QUICKSORT(A,q +1,r) No começo da linha 3, Consumo de tempo? A[p..q 1] A[q] A[q+1..r]

Algoritmos p. 11/28 Quicksort Rearranja A[p.. r] em ordem crescente. QUICKSORT (A, p, r) 1 se p < r 2 então q PARTICIONE(A,p,r) 3 QUICKSORT(A,p,q 1) 4 QUICKSORT(A,q +1,r) No começo da linha 3, Consumo de tempo? A[p..q 1] A[q] A[q+1..r] T(n) := consumo de tempo no pior caso sendo n := r p+1

Algoritmos p. 12/28 Consumo de tempo Quanto tempo consome em função de n := r p+1? linha consumo de todas as execuções da linha 1 =? 2 =? 3 =? 4 =? total =????

Algoritmos p. 13/28 Consumo de tempo Quanto tempo consome em função de n := r p+1? linha consumo de todas as execuções da linha 1 = Θ(1) 2 = Θ(n) 3 = T(k) 4 = T(n k 1) total = T(k)+T(n k 1)+Θ(n+1) 0 k := q p n 1

Algoritmos p. 14/28 Recorrência T(n) := consumo de tempo máximo quando n = r p+1 T(n) = T(k)+T(n k 1)+Θ(n)

Algoritmos p. 14/28 Recorrência T(n) := consumo de tempo máximo quando n = r p+1 T(n) = T(k)+T(n k 1)+Θ(n) Recorrência grosseira: T(n) é Θ(???). T(n) = T(0)+T(n 1)+Θ(n)

Algoritmos p. 14/28 Recorrência T(n) := consumo de tempo máximo quando n = r p+1 T(n) = T(k)+T(n k 1)+Θ(n) Recorrência grosseira: T(n) = T(0)+T(n 1)+Θ(n) T(n) é Θ(n 2 ). Demonstração:... Exercício!

Algoritmos p. 15/28 Recorrência cuidadosa T(n) := consumo de tempo máximo quando n = r p+1 T(n) = max {T(k)+T(n k 1)}+Θ(n) 0 k n 1

Algoritmos p. 15/28 Recorrência cuidadosa T(n) := consumo de tempo máximo quando n = r p+1 T(n) = max {T(k)+T(n k 1)}+Θ(n) 0 k n 1 Versão simplificada: T(0) = 1 T(1) = 1 T(n) = max {T(k)+T(n k 1)}+n para n = 2,3,4,... 0 k n 1 n 0 1 2 3 4 5 T(n) 1 1 2+2 5+3 9+4 14+5

Algoritmos p. 15/28 Recorrência cuidadosa T(n) := consumo de tempo máximo quando n = r p+1 T(n) = max {T(k)+T(n k 1)}+Θ(n) 0 k n 1 Versão simplificada: T(0) = 1 T(1) = 1 T(n) = max {T(k)+T(n k 1)}+n para n = 2,3,4,... 0 k n 1 n 0 1 2 3 4 5 T(n) 1 1 2+2 5+3 9+4 14+5 Vamos mostrar que T(n) n 2 +1 para n 0.

Algoritmos p. 16/28 Demonstração Prova: Trivial para n 1. Se n 2 então { T(n) = hi max 0 k n 1 max 0 k n 1 { T(k)+T(n k 1) } +n k 2 +1+(n k 1) 2 +1 } +n = = n 2 n+3 n 2 +1. Prove que T(n) 1 2 n2 para n 1.

Algoritmos p. 17/28 Algumas conclusões T(n) é Θ(n 2 ). O consumo de tempo do QUICKSORT no pior caso é O(n 2 ). O consumo de tempo do QUICKSORT é O(n 2 ).

Algoritmos p. 18/28 Quicksort no melhor caso M(n) := consumo de tempo mínimo quando n = r p+1 M(n) = min {M(k)+M(n k 1)}+Θ(n) 0 k n 1

Algoritmos p. 18/28 Quicksort no melhor caso M(n) := consumo de tempo mínimo quando n = r p+1 M(n) = min {M(k)+M(n k 1)}+Θ(n) 0 k n 1 Versão simplificada: M(0) = 1 M(1) = 1 M(n) = min {M(k)+M(n k 1)}+n para n = 2,3,4,... 0 k n 1

Algoritmos p. 18/28 Quicksort no melhor caso M(n) := consumo de tempo mínimo quando n = r p+1 M(n) = min {M(k)+M(n k 1)}+Θ(n) 0 k n 1 Versão simplificada: M(0) = 1 M(1) = 1 M(n) = min {M(k)+M(n k 1)}+n para n = 2,3,4,... 0 k n 1 Mostre que M(n) (n+1)lg(n+1) para n 1.

Algoritmos p. 18/28 Quicksort no melhor caso M(n) := consumo de tempo mínimo quando n = r p+1 M(n) = min {M(k)+M(n k 1)}+Θ(n) 0 k n 1 Versão simplificada: M(0) = 1 M(1) = 1 M(n) = min {M(k)+M(n k 1)}+n para n = 2,3,4,... 0 k n 1 Mostre que M(n) (n+1)lg(n+1) para n 1. Isto implica que no melhor caso o QUICKSORT é Ω(nlgn),

Algoritmos p. 18/28 Quicksort no melhor caso M(n) := consumo de tempo mínimo quando n = r p+1 M(n) = min {M(k)+M(n k 1)}+Θ(n) 0 k n 1 Versão simplificada: M(0) = 1 M(1) = 1 M(n) = min {M(k)+M(n k 1)}+n para n = 2,3,4,... 0 k n 1 Mostre que M(n) (n+1)lg(n+1) para n 1. Isto implica que no melhor caso o QUICKSORT é Ω(nlgn), que é o mesmo que dizer que o QUICKSORT é Ω(nlgn).

Algoritmos p. 19/28 Mais algumas conclusões M(n) é Θ(nlgn). O consumo de tempo do QUICKSORT no melhor caso é Ω(nlogn). Na verdade... O consumo de tempo do QUICKSORT no melhor caso é Θ(nlogn).

Algoritmos p. 20/28 Análise de caso médio do Quicksort Apesar do consumo de tempo de pior caso do QUICKSORT ser Θ(n 2 ), sua performance na prática é comparável (e em geral melhor) a de outros algoritmos cujo consumo de tempo no pior caso é O(nlgn). Por que isso acontece?

Algoritmos p. 21/28 Exercício Considere a recorrência T(1) = 1 T(n) = T( n/3 )+T( 2n/3 )+n para n = 2,3,4,... Solução assintótica: T(n) é O(???), T(n) é Θ(???)

Algoritmos p. 21/28 Exercício Considere a recorrência T(1) = 1 T(n) = T( n/3 )+T( 2n/3 )+n para n = 2,3,4,... Solução assintótica: T(n) é O(???), T(n) é Θ(???) Vamos olhar a árvore da recorrência.

Algoritmos p. 22/28 Árvore da recorrência n n 3 2n 3 n 9 2n 9 2n 9 4n 9 4n 27 4n 27 8n 27 total de níveis log 3/2 n

Algoritmos p. 23/28 Árvore da recorrência soma em cada horizontal n número de níveis log 3/2 n T(n) = a soma de tudo T(n) n log 3/2 n + 1+ +1 }{{} log 3/2 n T(n) é O(nlgn).

Algoritmos p. 24/28 De volta a recorrência T(1) = 1 T(n) = T( n/3 )+T( 2n/3 )+n para n = 2,3,4,... n T(n) 1 1 2 1+1+2 = 4 3 1+4+3 = 8 4 4+4+4 = 12

Algoritmos p. 24/28 De volta a recorrência T(1) = 1 T(n) = T( n/3 )+T( 2n/3 )+n para n = 2,3,4,... n T(n) 1 1 2 1+1+2 = 4 3 1+4+3 = 8 4 4+4+4 = 12 Vamos mostrar que T(n) 20nlgn para n = 2,3,4,5,6,...

Algoritmos p. 24/28 De volta a recorrência T(1) = 1 T(n) = T( n/3 )+T( 2n/3 )+n para n = 2,3,4,... n T(n) 1 1 2 1+1+2 = 4 3 1+4+3 = 8 4 4+4+4 = 12 Vamos mostrar que T(n) 20nlgn para n = 2,3,4,5,6,... Para n = 2 temos T(2) = 4 < 20 2 lg2. Para n = 3 temos T(3) = 8 < 20 3 lg3. Suponha agora que n > 3. Então...

Algoritmos p. 25/28 Continuação da prova T(n) = T( n 3 )+T( 2n 3 )+n hi 20 n 3 lg n 3 +20 2n 3 lg 2n 3 +n 20 n+2 3 < 20 n+2 3 = 20 n+2 3 lg n 3 +202n 3 lg 2n 3 +n (lg n 3 +1)+202n 3 lg 2n 3 +n lg 2n 3 +202n 3 lg 2n 3 +n = 20 n 3 lg 2n 3 +202 3 lg 2n 3 +202n 3 lg 2n 3 +n

Algoritmos p. 26/28 Continuação da continuação da prova < 20nlg 2n 3 +14lg 2n 3 +n = 20nlgn+20nlg 2 3 +14lgn+14lg 2 3 +n < 20nlgn+20n( 0.58)+14lgn+14( 0.58)+n < 20nlgn 11n+14lgn 8+n = 20nlgn 10n+14lgn 8 < 20nlgn 10n+7n 8 < 20nlgn Iiiéééééssss!

Algoritmos p. 27/28 De volta à intuição Certifique-se que a conclusão seria a mesma qualquer que fosse a proporção fixa que tomássemos. Por exemplo, resolva o seguinte...

Algoritmos p. 27/28 De volta à intuição Certifique-se que a conclusão seria a mesma qualquer que fosse a proporção fixa que tomássemos. Por exemplo, resolva o seguinte... Exercício: Considere a recorrência T(1) = 1 T(n) = T( n/10 )+T( 9n/10 )+n para n = 2,3,4,... e mostre que T(n) é O(nlgn).

Algoritmos p. 27/28 De volta à intuição Certifique-se que a conclusão seria a mesma qualquer que fosse a proporção fixa que tomássemos. Por exemplo, resolva o seguinte... Exercício: Considere a recorrência T(1) = 1 T(n) = T( n/10 )+T( 9n/10 )+n para n = 2,3,4,... e mostre que T(n) é O(nlgn). Note que, se o QUICKSORT fizer uma boa partição a cada, digamos, 5 níveis da recursão, o efeito geral é o mesmo, assintoticamente, que ter feito uma boa partição em todos os níveis.

Algoritmos p. 28/28 Outros comentários Espaço extra consumido pelo mergesort Espaço extra consumido pelo quicksort: recursão de cauda Espaço extra consumido pelo heapsort