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)

Documentos relacionados
Análise de Algoritmos

Análise de Algoritmos

Melhores momentos AULA 1. Algoritmos p.38/86

Análise de Algoritmos

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

Análise de Algoritmos

Melhores momentos AULA 3. Algoritmos p.148/188

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

Ordenação em tempo linear

Análise de Algoritmos

AULA 13. Algoritmos p.526/582

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

Análise de Algoritmos

ANÁLISE DE ALGORITMOS

Projeto e Análise de Algoritmos

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

Projeto e Análise de Algoritmos

Análise de Algoritmos

Melhores momentos AULA PASSADA. Complexidade Computacional p. 205

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

Projeto e Análise de Algoritmos

Algoritmos de ordenação Quicksort

Algoritmos gulosos (greedy)

Ordenação em Tempo Linear

Análise e Complexidade de Algoritmos

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

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

Aula 1. Teoria da Computação III

Estruturas de Dados 2

Coloração de intervalos

Algoritmos de Ordenação: MergeSort

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

Projeto e Análise de Algoritmos

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

Análise de algoritmos

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

Análise de Algoritmos e Estruturas de Dados

ORDENAÇÃO POR INTERCALAÇÃO

Algoritmos de Ordenação: Tempo Linear

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

Análise de algoritmos

Solução de Recorrências

Paradigmas de programação

Lista de Exercícios 6: Soluções Funções

Algoritmos de Ordenação

Ordenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho BCC402 Aula 04 Algoritmos e Programação Avançada

Algoritmos de Ordenação: Cota Inferior

Algoritmos de Ordenação

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

Princípio da boa ordenação. Aula 03. Princípio da boa ordenação. Princípio da boa ordenação. Indução Finita e Somatórios

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

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

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Introdução à Análise Algoritmos

Análise de algoritmos

Estruturas de Dados 2

5. Invólucros Convexos no Plano (cont )

Programação dinâmica

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

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

Lista de Exercícios 6 Funções

Análise e Projeto de Algoritmos

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

Projeto e Análise de Algoritmos

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

Estruturas de Dados 2

Análise de algoritmos

Análise de Algoritmos

Análise de algoritmos. Parte I

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

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

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

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

Algoritmos gulosos (greedy)

Análise de Algoritmos e Estruturas de Dados

Análise de Algoritmos

Complexidade assintótica de programas

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Projeto e Análise de Algoritmos

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Notação Assintótica Letícia Rodrigues Bueno

Análise de Algoritmos Algoritmos de Ordenação

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Limite assintótico para a ordenação, Ordenação em tempo linear

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

AULA 17. Algoritmos p.662/695

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

Projeto e Análise de Algoritmos

Análise de algoritmos. Parte I

Rascunho. CI165 - Análise de algoritmos (rascunho alterado constantemente) André Guedes Departamento de Informática UFPR. 7 de dezembro de 2016

ANÁLISE DE ALGORITMOS: PARTE 3

Algoritmos e Estruturas de Dados

Sobre a análise de algoritmos...

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

LISTA DE EXERCÍCIOS 1

Transcrição:

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) Exemplo 2: Par de pontos mais próximos (sec 33.4 do CLRS) Essas transparências foram adaptadas das transparências do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1

Número de inversões Problema: Dada uma permutação p[1..n], determinar o número de inversões em p. Inversão: par (i, j) de índices de p tal que i < j e p[i] > p[j]. Algoritmos p. 2

Número de inversões Problema: Dada uma permutação p[1..n], determinar o número de inversões em p. Inversão: par (i, j) de índices de p tal que i < j e p[i] > p[j]. Queremos um algoritmo O(n lg n) para o problema. O número de inversões pode ser Θ(n 2 ). Portanto, não podemos contar de uma em uma as inversões, como faz o algoritmo visto na aula passada. Algoritmos p. 2

Número de inversões Problema: Dada uma permutação p[1..n], determinar o número de inversões em p. Inversão: par (i, j) de índices de p tal que i < j e p[i] > p[j]. Queremos um algoritmo O(n lg n) para o problema. O número de inversões pode ser Θ(n 2 ). Portanto, não podemos contar de uma em uma as inversões, como faz o algoritmo visto na aula passada. Idéia: Vamos ordenar e contar ao mesmo tempo! A ordenação ajuda a contar várias inversões de uma só vez. Que algoritmo de ordenação usaremos? Duas opções: o MERGESORT e o HEAPSORT. Qual deles parece mais adequado? Algoritmos p. 2

Número de inversões Problema: Dada uma permutação p[1..n], determinar o número de inversões em p. Inversão: par (i, j) de índices de p tal que i < j e p[i] > p[j]. Queremos um algoritmo O(n lg n) para o problema. O número de inversões pode ser Θ(n 2 ). Portanto, não podemos contar de uma em uma as inversões, como faz o algoritmo visto na aula passada. Idéia: Vamos ordenar e contar ao mesmo tempo! A ordenação ajuda a contar várias inversões de uma só vez. Que algoritmo de ordenação usaremos? Duas opções: o MERGESORT e o HEAPSORT. Qual deles parece mais adequado? Resposta: o MERGESORT. Algoritmos p. 2

Merge-Sort Rearranja A[p..r], com p r, em ordem crescente. MERGESORT (A, p, r) 1 se p < r 2 então q (p + r)/2 3 MERGESORT (A, p, q) 4 MERGESORT (A,q + 1,r) 5 INTERCALA (A,p,q,r) Método: Divisão e conquista. Algoritmos p. 3

Intercalação Problema: Dados A[p..q] e A[q+1..r] crescentes, rearranjar A[p..r] de modo que ele fique em ordem crescente. Para que valores de q o problema faz sentido? Entra: p q r A 22 33 55 77 99 11 44 66 88 Algoritmos p. 4

Intercalação Problema: Dados A[p..q] e A[q+1..r] crescentes, rearranjar A[p..r] de modo que ele fique em ordem crescente. Para que valores de q o problema faz sentido? Entra: p q r A 22 33 55 77 99 11 44 66 88 Sai: p q r A 11 22 33 44 55 66 77 88 99 Algoritmos p. 4

Intercalação INTERCALA (A,p,q,r) 0 B[p..r] é um vetor auxiliar 1 para i p até q faça 2 B[i] A[i] 3 para j q + 1 até r faça 4 B[r + q + 1 j] A[j] 5 i p 6 j r 7 para k p até r faça 8 se B[i] B[j] 9 então A[k] B[i] 10 i i + 1 11 senão A[k] B[j] 12 j j 1 Algoritmos p. 5

Adaptação do Merge-Sort Conta o número de inversões de A[p..r], com p r, e rearranja A[p..r] em ordem crescente. CONTA-E-ORDENA (A, p, r) 1 se p r 2 então devolva 0 3 senão q (p + r)/2 4 c CONTA-E-ORDENA (A,p,q)+ 5 CONTA-E-ORDENA (A,q + 1,r)+ 6 CONTA-E-INTERCALA (A, p, q, r) 7 devolva c Método: Divisão e conquista. Algoritmos p. 6

Contagem na intercalação CONTA-E-INTERCALA (A, p, q, r) 1 para i p até q faça 2 B[i] A[i] 3 para j q + 1 até r faça 4 B[r + q + 1 j] A[j] 5 i p 6 j r 7 c 0 inicializa o contador 8 para k p até r faça 9 se B[i] B[j] 10 então A[k] B[i] 11 i i + 1 12 senão A[k] B[j] 13 j j 1 14 c c + (q i + 1) conta inversões 15 devolva c Algoritmos p. 7

Simulação p q r A 22 33 55 77 99 11 44 66 88 B c = 0 Algoritmos p. 8

Simulação A k i B 22 33 55 77 99 88 66 44 11 j c = 0 Algoritmos p. 9

Simulação A 11 k i B 22 33 55 77 99 88 66 44 11 j c = 0 + 5 = 5 Algoritmos p. 10

Simulação A 11 22 k i B 22 33 55 77 99 88 66 44 11 j c = 5 Algoritmos p. 11

Simulação A 11 22 33 k i B 22 33 55 77 99 88 66 44 11 j c = 5 Algoritmos p. 12

Simulação A 11 22 33 44 k i B 22 33 55 77 99 88 66 44 11 j c = 5 + 3 = 8 Algoritmos p. 13

Simulação A 11 22 33 44 55 k i B 22 33 55 77 99 88 66 44 11 j c = 8 Algoritmos p. 14

Simulação A 11 22 33 44 55 66 k i B 22 33 55 77 99 88 66 44 11 j c = 8 + 2 = 10 Algoritmos p. 15

Simulação A 11 22 33 44 55 66 77 k B 22 33 55 77 99 88 66 44 11 i j c = 10 Algoritmos p. 16

Simulação A 11 22 33 44 55 66 77 88 k i = j B 22 33 55 77 99 88 66 44 11 c = 10 + 1 = 11 Algoritmos p. 17

Simulação A 11 22 33 44 55 66 77 88 99 j i B 22 33 55 77 99 88 66 44 11 c = 11 Algoritmos p. 18

Contagem na intercalação CONTA-E-INTERCALA (A, p, q, r) 1 para i p até q faça 2 B[i] A[i] 3 para j q + 1 até r faça 4 B[r + q + 1 j] A[j] 5 i p 6 j r 7 c 0 inicializa o contador 8 para k p até r faça 9 se B[i] B[j] 10 então A[k] B[i] 11 i i + 1 12 senão A[k] B[j] 13 j j 1 14 c c + (q i + 1) conta inversões 15 devolva c Algoritmos p. 19

Consumo de tempo Quanto tempo consome em função de n := r p + 1? linha 1 O(n) 2 O(n) 3 O(n) 4 O(n) 5 7 O(1) 8 O(n) 9 O(n) 10 14 O(n) 15 O(1) consumo de todas as execuções da linha total O(7n + 2) = O(n) Algoritmos p. 20

Conclusão O algoritmo CONTA-E-INTERCALA consome O(n) unidades de tempo. Também escreve-se O algoritmo CONTA-E-INTERCALA consome tempo O(n). Algoritmos p. 21

Análise do Conta-E-Ordena Seja T(n) o tempo consumido pelo CONTA-E-ORDENA. Algoritmos p. 22

Análise do Conta-E-Ordena Seja T(n) o tempo consumido pelo CONTA-E-ORDENA. Vale a seguinte recorrência para T(n): T(n) = T( n/2 ) + T( n/2 ) + O(n) Algoritmos p. 22

Análise do Conta-E-Ordena Seja T(n) o tempo consumido pelo CONTA-E-ORDENA. Vale a seguinte recorrência para T(n): T(n) = T( n/2 ) + T( n/2 ) + O(n) Solução: T(n) = O(n lg n). Prova? Algoritmos p. 22

Análise do Conta-E-Ordena Seja T(n) o tempo consumido pelo CONTA-E-ORDENA. Vale a seguinte recorrência para T(n): T(n) = T( n/2 ) + T( n/2 ) + O(n) Solução: T(n) = O(n lg n). Prova? Considera-se a recorrência simplificada T(n) = 2T(n/2) + n definida apenas para n potência de 2. Algoritmos p. 22

Análise do Conta-E-Ordena Seja T(n) o tempo consumido pelo CONTA-E-ORDENA. Vale a seguinte recorrência para T(n): T(n) = T( n/2 ) + T( n/2 ) + O(n) Solução: T(n) = O(n lg n). Prova? Considera-se a recorrência simplificada T(n) = 2T(n/2) + n definida apenas para n potência de 2. Prova-se por indução em n que T(n) = n+nlg n = O(n lg n). Algoritmos p. 22

Prova Afirmação: A recorrência { T(n) = 1 se n = 1 2T(n/2) + n se n 2, n potência de 2 tem como soluçao T(n) = n + n lg n. Algoritmos p. 23

Prova Afirmação: A recorrência { T(n) = 1 se n = 1 2T(n/2) + n se n 2, n potência de 2 tem como soluçao T(n) = n + n lg n. Prova: Por indução em n. Base: n = 1 T(1) = 1 = 1 + 1 0 = 1 + 1 lg 1. Algoritmos p. 23

Prova Afirmação: A recorrência { T(n) = 1 se n = 1 2T(n/2) + n se n 2, n potência de 2 tem como soluçao T(n) = n + n lg n. Prova: Por indução em n. Base: n = 1 Passo: n 2 T(1) = 1 = 1 + 1 0 = 1 + 1 lg 1. T(n) = 2T(n/2) + n = 2 (n/2 + (n/2) lg(n/2)) + n por indução = 2n + n lg(n/2) = 2n + n(lg n 1) = n + n lg n. Algoritmos p. 23

Resolução de recorrências Mas como descobrimos que T(n) = n + n lg n? Algoritmos p. 24

Resolução de recorrências Mas como descobrimos que T(n) = n + n lg n? No chute! Algoritmos p. 24

Resolução de recorrências Mas como descobrimos que T(n) = n + n lg n? No chute! Uma maneira de se obter um chute de solução de recorrência é desenrolando a recorrência. Algoritmos p. 24

Resolução de recorrências Mas como descobrimos que T(n) = n + n lg n? No chute! Uma maneira de se obter um chute de solução de recorrência é desenrolando a recorrência. T(n) = 2T(n/2) + n = 2 (2T(n/2 2 ) + n/2) + n = 2 2 T(n/2 2 ) + 2n = 2 2 (2T(n/2 3 ) + n/2 2 ) + 2n = 2 3 T(n/2 3 ) + 3n = 2 3 (2T(n/2 4 ) + n/2 3 ) + 3n = 2 4 T(n/2 4 ) + 4n = = 2 k T(n/2 k ) + kn, onde k = lg n. Disso concluímos que T(n) = n + n lg n. Algoritmos p. 24

Exercícios Exercício 2.A Interprete e prove a afirmação O(n 2 ) + O(n 2 ) + O(n 2 ) = O(3n 2 ). Exercício 2.B Interprete e prove a afirmação no(n) = O(n 2 ). Exercício 2.C Interprete e prove a afirmação O(3n 2 + 4n) = O(n 2 ). Exercício 2.D (propriedade transitiva) Suponha T(n) = O(f(n)) e f(n) = O(g(n)). Mostre que T(n) = O(g(n)). Dê um exemplo interessante. Exercício 2.E (regra da soma, caso especial) Suponha que T(n) = O(f(n)) e mostre que T(n) + f(n) = O(f(n)). Dê um exemplo interessante. Exercício 2.E (regra da soma, geral) Suponha T 1 (n) = O(f 1 (n)) e T 2 (n) = O(f 2 (n)). Se f 1 (n) = O(f 2 (n)), mostre que T 1 (n) + T 2 (n) = O(f 2 (n)). Algoritmos p. 25

Mais exercícios Exercício 2.F O que significa T(n) = n 2 + O(n)? Mostre que se T(n) = n 2 + O(n) então T(n) = O(n 2 ). Exercício 2.G O que significa T(n) = no(lg n)? Mostre que T(n) = no(lg n) se e só se T(n) = O(nlg n). Exercício 2.H Interprete e prove a afirmação 7 O(n) = O(n). Exercício 2.I Interprete e prove a afirmação O(n) + O(n) = O(n). Exercício 2.J Prove que O(n) = O(n 2 ). É verdade que O(n 2 ) = O(n)? Exercício 2.K Interprete e prove a afirmação (n + 2) O(1) = O(n). Algoritmos p. 26

Mais exercícios ainda Exercício 2.L Interprete e prove a afirmação O(1) + + O(1) {z } n+2 Exercício 2.M Prove que O(1) + O(1) + O(1) = O(1). É verdade que O(1) = O(1) + O(1) + O(1)? = O(n). Exercício 2.N Interprete e prove a afirmação O(f) + O(g) = O(f + g). Exercício 2.O Prove que n 2 + 10n + 20 = Ω(n 2 ). Prove que n 2 10n 20 = Θ(n 2 ). Exercício 2.P Prove que n = Ω(lg n). Exercício 2.Q Prove que lg n = Θ(log 10 n). Exercício 2.R É verdade que 2 n = Ω(3 n )? Algoritmos p. 27

Mais exercícios Exercício 2.S É verdade que 2n 3 + 5 n = Θ(n 3 )? Exercício 2.T Suponha que os algoritmos A e B só dependem de um parâmetro n. Suponha ainda que A consome S(n) unidades de tempo enquanto B consome T(n) unidades de tempo. Quero provar que algoritmo A é pelo menos tão eficiente quanto o algoritmo B (no sentido assintótico). Devo mostrar que existe f(n) tal que S(n) = O(f(n)) e T(n) = O(f(n))? S(n) = O(f(n)) e T(n) = Ω(f(n))? S(n) = Ω(f(n)) e T(n) = O(f(n))? S(n) = Ω(f(n)) e T(n)Ω(f(n))? Que devo fazer para mostrar que A é mais eficiente que B? Exercício 2.U Mostre que o consumo de tempo do algoritmo INTERCALA é Θ(n), sendo n o número de elementos do vetor que o algoritmo recebe. Algoritmos p. 28