Sei sulla pagina 1di 3

Universidade Federal dos Vales do Jequitinhonha e Mucuri Sistemas de Informao

Algoritmos e Estruturas de Dados 2

Prof: Alexandre Ramos Fonseca

Lista de Exerccios 4 Complexidade


1. Avalie os seguintes somatrios: a) somatrio de i para i variando de 5 a n b) somatrio de a^i para i variando de 1 a n c) somatrio de 2^(k-i) para i variando de 0 a k d) somatrio de 2^(i-k) * i^2 para k variando de 0 a i

2. Resolva as seguintes equaes de recorrncia: a) b) c) d) e) f) T(n) T(n) T(n) T(n) T(n) T(n) = = = = = = T(n-1) + c, c constante, n>1; T(1) = 0 T(n-1) + n - 1; T(1) = 0 2T(n/2) + n - 1; T(1) = 0 T(n/2) + 1 ; T(1) = 1 2T(n/2) + 1 ; T(1) = 1 T(n-1) + 2^n; T(0) = 1

3. Suponha dois algoritmos A e B com funes de complexidade de tempo dadas por a(n) = n^2 - n + 549 e b(n) = 49n + 49, respectivamente. Determine quais valores de n no conjunto dos nmeros naturais para os quais A leva menos tempo para executar que B.

4. Considere o algoritmo a seguir (em pseudo-cdigo). Suponha que a operao crucial o fato de inspecionar um elemento. Neste caso o algoritmo inspeciona os n elementos, o que de alguma forma lhe permite descartar 1/3 deles; ento ele faz uma chamada recursiva sobre os 2/3 restantes. Pesquisa(n) if n<=1 then "inspecione elemento" e termine else begin para cada um dos n elementos "inspecione elemento" Pesquisa( 2n/3 ); end; a) Escreva a relao de recorrncia que descreva este comportamento. b) Converta essa relao para um somatrio. c) Determine a forma fechada do somatrio.

5. Determine o pior caso dos seguintes procedimentos em funo de n: void multmat(int n, int** A, int** B, int** C) { int i,j,k; for(i=0 ; i<n ; ++i) for(j=0 ; j<n ; ++j) { C[i][j] = 0; for(k=0 ; k<n ; ++k) C[i][j] += A[i][k] * B[k][j]; } } void misterio(int n) { int i,j,k; for(i=0 ; i<n ; ++i) for(j=i ; j<n ; ++j) { for(k=0 ; k<j ; ++k) { //Alguma operacao de complexidade O(1) } for(k=0 ; k<sqrt(n) ; ++k) { //Alguma operacao de complexidade O(1) } } } int recursiva(int n) { if(n<=1) return 1; else return recursiva(n-1) + recursiva(n-1); }

OBS.: Para o procedimento misterio, considere dois casos para a complexidade da funo sqrt(x) (parte inteira da raiz quadrada): O(sqrt(x)) = O(x^(0.5)) - sqrt tem complexidade igual raiz quadrada O(sqrt(x)) = O(1) - sqrt tem complexidade constante

6. Ordene as seguintes funes em termos da taxa de crescimento (complexidade): n, sqrt(n), log(n), log(log(n)), log(n)^2, n/log(n), sqrt(n)log(n)^2, (1/3)^n, (3/2)^n, 17.

7. Considere o seguinte algoritmo (conhecido como "regra de Horner") para se calcular o valor de um polinmio de grau n dado por: p(x) = somatorio de i=0 a n de (a[i].x^i), onde a[0..n] contem os coeficientes de cada termo do polinmio: int polinomio(int n, int x, int[] a) { int p = 0; for(i = n-1 ; i>=0 ; --i) p = x*p + a[i]; return p; } a) Mostre os passos do processamento desse algoritmo para x=3, p(x) = 4 x^4 + 8 x^3 + x + 2. b) Explique porque este algoritmo funciona. c) Qual a complexidade do algoritmo (em funo do grau do polinmio, n)?

8. Dois programas A e B foram analisados e os respectivos limites de pior caso foram determinados como sendo 150n*log(n) e n^2. Se possvel, responda s seguintes perguntas: a) Qual dos programas tem melhor garantia de desempenho para valores grandes de n (n>10000)? b) Qual dos programas tem melhor garantia de desempenho para valores pequenos de n (n<100)? c) Qual programa executar mais rpido na media para n=1000? d) possvel ao programa B executar mais rpido que A para todas as entradas possveis?

Potrebbero piacerti anche