1 a Lista de Exercícios

Documentos relacionados
Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

LISTA DE EXERCÍCIOS 1

LISTA DE EXERCÍCIOS 1

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

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

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

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Projeto e Análise de Algoritmos

Solução de Recorrências

ANÁLISE DE ALGORITMOS: PARTE 3

Trabalho Prático 2 Mundo dos Blocos Alocação Dinâmica / Listas Encadeadas

Complexidade Assintótica

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Teoria da Computação Aula 9 Noções de Complexidade

Técnicas de projeto de algoritmos: Indução

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

BCC202 - Estrutura de Dados I

Algoritmos de Ordenação: QuickSort

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

Elementos de Análise Assintótica

Classes, Herança e Interfaces

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

SIN5013 Análise de Algoritmos e Estrutura de Dados - 1o Semestre de 2019

BCC202 - Estrutura de Dados I

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Complexidade de Algoritmos

André Vignatti DINF- UFPR

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

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

Técnicas de análise de algoritmos

Projeto e Análise de Algoritmos

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

Complexidade de Algoritmos

Introdução à Ciência da Computação II

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

BCC202 - Estrutura de Dados I

Análise de Algoritmos

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

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

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

Algoritmos de ordenação Quicksort

Lista de Exercícios 6 Funções

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Aula 1. Teoria da Computação III

BCC202 - Estrutura de Dados I

Complexidade de Algoritmos

Quantidade de memória necessária

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

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

Complexidade de Algoritmos

Aula 06: Análise matemática de algoritmos recursivos

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

Quicksort Letícia Rodrigues Bueno

INF 1010 Estruturas de Dados Avançadas

SCC0502 Algoritmos e Estruturas de Dados I. Profa. Maria Cristina

Programa Analítico de Disciplina SIN213 Projeto de Algoritmos

SCC0502 Algoritmos e Estruturas de Dados I

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

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

01 Análise de Algoritmos (parte 2) SCC201/501 - Introdução à Ciência de Computação II

Introdução à Análise Algoritmos

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

Sobre a análise de algoritmos...

Algoritmos de Ordenação: HeapSort

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

PLANO DE DISCIPLINA DISCIPLINA: Estrutura de Dados 2

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

Lista 2 - PMR2300/3200

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Análise de algoritmos

Projeto e Análise de Algoritmos

Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ. Campus Curitiba PLANO DE ENSINO

Análise de Algoritmos Estrutura de Dados II

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Análise de Algoritmos

Bubble Sort. Tempo total O(n 2 )

Análise de algoritmos

Classificação e Pesquisa

BCC202 - Estrutura de Dados I

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

Análise de Algoritmos e Estruturas de Dados

Teoria dos Grafos Aula 7

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.

Algoritmos de Ordenação

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise de Complexidade de Algoritmos

Filas de Prioridades Letícia Rodrigues Bueno

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

Análise de Algoritmos

Algoritmos de Ordenação

BCC202 - Estrutura de Dados I

Estruturas de Dados 2

SCC-201 Introdução à Ciência de Computação II

GBC015: INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO. Teoria de Algoritmos: Complexidade

Projeto e Análise de Algoritmos

Complexidade de algoritmos Notação Big-O

Transcrição:

Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Programa de Pós-Graduação em Ciência da Computação Projeto e Análise de Algoritmos - 1 o semestre de 2010 Professor: David Menotti 1 a Lista de Exercícios Valor: 1,0 pontos (10% da nota total) Data de Entrega: 18/04/2010 1. Como podemos modificar quase que qualquer algoritmo para ter um bom tempo de execução para o melhor caso? 2. Observe que o laço while das linhas 5-7 do procedimento Insertion-Sort (apresentado abaixo) usa uma pesquisa linear para percorrer de trás para frente o vetor ordenado A[1..j 1]. (a) Pode-se usar a pesquisa binária para melhorar o tempo de execução no pior caso do Insertion-Sort para Θ(n log n). (b) Justifique sua resposta? Insertion-Sort(A, n) 1 for j = 2 to length(a) 2 key = A[j] 3 / Insert A[j] into the sorted sequence A[1.. j 1]. 4 i = j 1 5 while i > 0 and A[i] > key 6 A[i + 1] = A[i] 7 i = i 1 8 A[i + 1] = key 3. Considere que você tenha um problema para resolver e duas opções de algoritmos. O primeiro algoritmo é quadrático tanto no pior caso quanto no melhor caso. Já o segundo algoritmo é linear no melhor caso e cúbico no pior caso. Considerando que o melhor caso ocorre 90% das vezes que você executa o programa enquanto o pior caso ocorre apenas 10% das vezes, qual algoritmo você escolheria? Justifique a sua resposta em função do tamanho da entrada. 4. * Sejam f(n) e g(n) funções assintoticamente não-negativas. Usando a definição básica da notação Θ, prove que max(f(n), g(n)) = Θ(f(n) + g(n)). (1) 1

5. * Mostre que para quaisquer constantes reais a e b, tal que b > 0, 6. Mostre se: (a) 2 n+1 = O(2 n ); (b) 2 2n = O(2 n ). (n + a) b = Θ(n b ). (2) 7. Pode-se estender a notação assintótica para o caso de dois parâmetros n e m que vão para inifinito independentemente com taxas diferentes. Para uma dada função g(n, m), denota-se O(g(n, m)) o conjunto de funções O(g(n, m)) = f(n, m) : existem constantes positivas c, n 0 e m 0 tais que 0 f(n, m) cg(n, m) para todo n n o em m o Apresente as definições correspondes para: (a) Ω(g(n, m)); (b) Θ(g(n, m)). 8. * Mostre se: (a) A função log n! é limitada polinomialmente; (b) A função log log n! é limitada polinomialmente. 9. * (Crescimento assintótico relativo) Indique para cada par de expressões (A, B) na tabela abaixo, se A é O, o, Ω, ω, ou T heta de B. Assuma que k 1, ɛ > 0 e c > 1 são constantes. Sua resposta deve ser na forma SIM ou NÃO acompanhada da justificativa. A B O o Ω ω Θ (a) log k n n ɛ (b) n k c n (c) n n sin n (d) 2 n 2 n/2 (e) n log m m log n (f) log (n!) log (n n ). 10. * (Ordenação por taxa de crescimento assintótico) (a) Classifique as funções abaixo pela ordem de crescimento, ou seja, ache uma permutação das funções g 1, g 2,..., g 30 que satisfaça a relação g 1 = Ω(g 2 ), g 2 = Ω(g 3 ),..., g 29 = Ω(g 30 ). Particione a lista em classes de equivalência tais que f(n) e g(n) estão na mesma classe se, e somente se, f(n) = Θ(g(n)). A notação log n representa a função logarítmica iterada conforme definido em [3, Iteração funcional, Capítulo 3]. 2

log (log n) 2 log n ( 2) log n n 2 n! (log n)! (3/2) n n 3 log 2 n log (n!) 2 2n 1/ log n n ln ln n log n n.2 n n log log n log n 1 2 log n (log n) log n e n 4 log n (n + 1)! log (log n) 2 2 log n log n n 2 n n log n 2 2n+1 (b) Apresente um exemplo de uma função f(n) não-negativa tal que para todas as funções g i (n) da letra anterior, f(n) não é O(g i (n)) nem Ω(g i (n)). 11. Use uma árvore de recursão para apresentar uma solução assintoticamente firme para a recorrência T (n) = T (αn) + T ((1 α)n) + cn, (3) onde α é uma constante na faixa 0 < α < 1 e c > 0 é também uma constante. 12. Use o Teorema Mestre, se for possível, para apresesentar limites assintóticos firmes para as seguintes recorrências, e quando não for possível utilize outro método de resolução de equações de recorrência. (a) T (n) = 4T (n/2) + n; (b) T (n) = 4T (n/2) + n 2 ; (c) T (n) = 4T (n/2) + n 3. 13. A recorrência T (n) = 7T (n/2) + n 2 descreve o tempo de execução de um algoritmo A. Um algoritmo alternativo A tem um tmepo de execução T (n) = at (n/4) + n 2. Qual é o maior número inteiro a que faz com que A seja assintoticamente mais rápido que A? 14. O Teorema Mestre pode ser aplicado à recorrência T (n) = 4T (n/2) + n 2 log n? Justifique sua resposta. Apresente um limite superior assintótico para essa recorrência. 15. (Exemplos de recorrência) Apresente os limites assintóticos superior e inferior para T (n) em cada uma das recorrências abaixo. Assuma que T (n) é constante para n 2. Tente determinar cada limite tão firme quanto possível e justifique a sua resposta. (a) T (n) = 2T (n/2) + n 3 ; (b) T (n) = T (9n/10) + n; (c) T (n) = 16T (n/4) + n 2 ; (d) T (n) = 7T (n/3) + n 2 ; (e) T (n) = 7T (n/2) + n 2 ; (f) T (n) = 2T (n/4) + n; 3

(g) T (n) = T (n 1) + n; (h) T (n) = T ( n) + 1; 16. (Algoritmos não-recursivos) Determine a função de complexidade (no pior e melhor caso e no caso médio), das funções implementadas em C, apresentadas abaixo, fazendo as considerações pertinentes. (a) int Max( int A, int n ) int i, Temp ; 5 Temp = A [ 0 ] ; for ( i = 1 ; i < n ; i++) i f (Temp < A[ i ] ) Temp = A[ i ] ; return Temp ; 10 Programa 1: Max (b) void MaxMin1( int A, int n, int pmax, int pmin) int i ; 5 pmax = A [ 0 ] ; pmin = A [ 0 ] ; for ( i = 1 ; i < n ; i++) i f (A[ i ] > pmax) pmax = A[ i ] ; 10 i f (A[ i ] < pmin) pmin = A[ i ] ; Programa 2: MaxMin1 (c) void MaxMin2( int A, int n, int pmax, int pmin) pmax = A [ 0 ] ; pmin = A [ 0 ] ; 5 for ( i = 1 ; i < n ; i++) i f (A[ i ] > pmax) pmax = A[ i ] ; else i f (A[ i ] < pmin) pmin = A[ i ] ; 10 (d) Programa 3: MaxMin2 void MaxMin3( int A, int n, int pmax, int pmin) int i, FimDoAnel ; 5 i f ( ( n % 2) > 0) A[ n ] = A[ n 1 ] ; 4

FimDoAnel = n ; 10 else FimDoAnel = n 1 ; i f (A[ 0 ] > A[ 1 ] ) pmax = A [ 0 ] ; pmin = A [ 1 ] ; else pmax = A [ 1 ] ; pmin = A [ 0 ] ; 15 i = 3 ; while ( i <= FimDoAnel ) i f (A[ i 1 ] > A[ i ] ) 20 i f (A[ i 1 ] > pmax) pmax = A[ i 1 ] ; i f (A[ i ] < pmin) pmin = A[ i ] ; else 25 i f (A[ i 1 ] < pmin) pmin = A[ i 1 ] ; i f (A[ i ] > pmax) pmax = A[ i ] ; i += 2 ; 30 (e) 5 Programa 4: MaxMin3 void BubbleSort ( int A, int n ) int i, j ; int aux ; for ( j = 0 ; j < n ; j++ ) for ( i = 0 ; i < n 1 ; i++ ) 10 i f ( A[ i ] > A[ i +1] ) aux = A[ i ] ; A[ i ] = A[ i +1]; A[ i +1] = aux ; 15 (f) 5 Programa 5: BubbleSort void BubbleSort2 ( int A, int n ) int i, t r o c a ; int aux ; do t r o c a = 0 ; for ( i = 0 ; i < n 1 ; i++ ) 10 i f ( A[ i ] > A[ i +1] ) 5

aux = A[ i ] ; A[ i ] = A[ i +1]; 15 A[ i +1] = aux ; t r o c a = 1 ; while ( t r o c a ) ; 20 (g) 5 Programa 6: BubbleSort2 void S e l e c t i o n S o r t ( int A, int n ) int i, j, min ; int aux ; for ( i = 0 ; i < n 1 ; i++ ) min = i ; for ( j = i + 1 ; j < n ; j++ ) 10 i f ( A[ j ] < A[ min ] ) min = j ; aux = A[ min ] ; A[ min ] = A[ i ] ; 15 A[ i ] = aux ; Programa 7: SelectionSort (h) void I n s e r t i o n S o r t ( int A, int n ) int j ; for ( int i = 1 ; i < n ; i++) 5 aux = A[ i ] ; j = i 1 ; while ( ( j >= 0 ) && ( aux < v [ j ] ) ) 10 v [ j + 1 ] = v [ j ] ; j ; v [ j + 1 ] = aux ; 15 (i) void FazAlgo ( int n ) int i, j, k ; Programa 8: InsertionSort 5 x = 0 ; for ( i = 1 ; i <= n 1 ; i++ ) 6

for ( j = i + 1 ; j <= n ; j++ ) 10 for ( k = 1 ; k <= j ; k++ ) x = x + 1 ; (j) void FazAlgo2 ( int n ) int i, j, k, x ; Programa 9: FazAlgo 5 x = 0 ; for ( i = 1 ; i <= n ; i ++) for ( j = i + 1 ; j <= n 1 ; j++ ) for ( k = 1 ; k <= j ; k++ ) x = x + 1 ; 10 Programa 10: FazAlgo2 17. (Algoritmos recursivos) Determine a função de complexidade, das funções recursivas apresentadas abaixo, fazendo as considerações que considerar pertinente. (a) void Pesquisa1 ( int A, int n ) i f ( n > 1) 5 I n s p e c i o n e n n n elementos ; // custo n^3 Pesquisa (A, n /3) ; Programa 11: Pesquisa1 (b) void Pesquisa2 ( int A, int n ) i f ( n <= 1 ) return ; 5 else obtenha o maior elemento dentre os n elementos ; / de alguma forma i s t o permite d e s c a r t a r 2/5 dos / / elementos e f a z e r uma chamada r e c u r s i v a no r e s t o / 10 Pesquisa (A, 3 n /5) ; (c) Programa 12: Pesquisa2 void Pesquisa3 ( int A, int n ) ; i f ( n <= 1 ) 7

return ; 5 else ordena os n elementos ; / de alguma forma i s t o permite d e s c a r t a r 1/3 dos / / elementos e f a z e r uma chamada r e c u r s i v a no r e s t o / 10 Pesquisa (2 n /3) ; Programa 13: Pesquisa3 (d) int Fibonacci ( int n ) i f ( n == 0) return 0 ; else i f ( n == 1) return 1 ; 5 else return Fibonacci (n 1) + Fibonacci (n 2) ; Programa 14: Fibonacci (e) void Proc ( int n ) i f ( n == 0) return 1 ; 5 else return Proc ( n 1) + Proc ( n 1) ; Programa 15: Proc (f) / n é uma p o t e n c i a de 2 / void Sort ( int A, int i, int j ) i f ( i < j ) 5 m = ( i + j 1) / 2 ; Sort ( A, i, m ) ; / custo = T(N/2) / Sort ( A, m + 1, j ) ; / custo = T(N/2) / 10 Merge ( A, i, m, j ) ; / custo = N 1 / comparacoes no p i o r caso / / Merge i n t e r c a l a A[ i..m] e A[m+1.. j ] em A[ i.. j ] / Programa 16: Sort (g) / n uma p o t e n c i a de 3 / void Sort2 ( int A, int i, int j ) i f ( i < j ) 5 m = ( ( j i ) + 1 ) / 3 ; Sort2 ( A, i, i + m 1 ) ; Sort2 ( A, i + m, i + 2 m 1 ) ; Sort2 ( A, i + 2 m, j ) ; 8

10 Merge ( A, i, i + m, i + 2 m, j ) ; / Merge i n t e r c a l a A[ i.. ( i+m 1) ], A[ ( i+m).. ( i+2m 1) e A[ i +2m.. j ] em A[ i.. j ] a um custo ( (5n/3) 2 ) / Programa 17: Sort2 18. Considere a função em C abaixo. 5 (a) O que ela faz? (b) Qual é a função de complexidade do número de comparações no melhor e no pior caso? (c) Que configuração do vetor de entrada A leva a essas duas situações? void FazAlgo3 ( int A, int n ) int i, j ; int aux ; for ( i = 2 ; i < n ; i ++) aux = A[ i ] ; j = i 1 ; 10 A[ 0 ] = aux ; while ( aux < A[ j ] ) A[ j + 1 ] = A[ j ] ; j = j 1 ; 15 A[ j + 1 ] = aux ; Programa 18: FazAlgo3 O que deve ser entregue Solução dos exercícios propostos. Como deve ser apresentada a solução dos exercícios 1. Em L A TEX: Caso seja utilizado algum editor eletrônico de texto, a solução da lista de exercícios deve ser elaborada obrigatoriamente em L A TEX. Nenhum outro formato será aceito. Veja modelo em latex: http://www.decom.ufop. br/menotti/paa101/tps/modelo.zip 2. Caso os exercícios sejam resolvidos à mão, em folha de papel almaço pautado ou sulfite, usando exclusivamente caneta azul ou preta, e não-ambas, estas folhas devem ser escaneados e encapsuladas em um único arquivo PDF; 3. Formato final: mandatoriamente em PDF (http://www.pdf995.com/). 9

Como deve ser feita a entrega A entrega DEVE ser feita via Moodle (www.decom.ufop.br/moodle) na forma de um único arquivo zipado, contendo a documentação da solução das questões e arquivos que foram utilizados para elaborá-la. Também deve ser entregue a documentação impressa na próxima aula teórica após a data de entrega. Comentários Gerais A entrega dos exercícios marcados com * (asterico) é opcional e vale pontos extra. A maioria desses exercícios foram extraídos de [2, 1, 3, 6, 7, 4, 5] e as vezes de alguam forma alterados; Comece a resolver esta liga logo, enquanto o problema está fresco na memória e o prazo para terminá-lo está tão longe quanto jamais poderá estar; A solução da lista é individual (grupo de UM aluno); Soluções copiadas (e FONTE) terão nota zero; Soluções entregues em atraso serão aceitas, todavia a nota atribuída a solução será zero; Evite discussões inócuas com o professor em tentar postergar a data de entrega. Referências [1] T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. Algoritmos: Teoria e Prática. Editora Campus, 2001. Tradução da 2a. edição americana. [2] T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. Introduction to Algorithms. The MIT Press/McGraw-Hill, 2nd edition, 2001. [3] T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. Introduction to Algorithms. The MIT Press/McGraw-Hill, 3rd edition, 2009. [4] A.M. Tenenbaum, Y. Langsam, and M.J. Augenstein. Data Strcutures Using C. Prentice-Hall International Editions, 1995. [5] A.M. Tenenbaum, Y. Langsam, and M.J. Augenstein. Estruturas de Dados Usando C. Makron Books/Pearson Education, 1995. [6] N. Ziviani. Projeto de Algoritmos: com implementações em Pascal e C. Cengage Learning (Thomson / Pioneira), São Paulo, 2nd edition, 2004. [7] N. Ziviani. Projeto de Algoritmos com implementações em Java e C++. Cengage Learning (Thomson / Pioneira), São Paulo, 1st edition, 2006. 10