Você está na página 1de 7

Fundamentos de Programao e Estruturas de Dados - Lista de Exerccios 1.

Anlise de alguns algoritmos simples


Exerccio 1 : Contagem de iteraes
Analise o algoritmo abaixo, e diga qual ser o valor de k, ao final de sua execuo.

DETERMINA_K (n) k 0 para i variando de 1 at n faa para j variando de 1 at i faa kk+1 devolva k

loop externo loop interno

Soluo: Quando i assume o valor 1, o loop mais interno incrementa k exatamente 1 vez. Quando i valer 2, k ser incrementado duas vezes. E assim por diante, at que, na ltima iterao do loop mais externo i dever assumir valor igual a n, e ento o loop mais interno dever incrementar k um total de n vezes. Assim, o valor de k ser : k=1+2+...+(n1)+n Observe que k segue uma P.A. (progresso aritmtica) de n termos, cujo 1 termo igual a 1, e o ltimo termo vale exatamente n.

k = n(n + 1) 2
Exerccio 2 : O clculo de T(n)

Analise o mesmo algoritmo do exerccio anterior, e determine quanto tempo ele consome para executar.

Soluo: Imagine que cada linha, quando executada, consome tempo exatamente igual a 1. Para ver quanto tempo o algoritmo levar para executar, basta somar o total de vezes que cada linha ser executada.
linha contagem 1 n+1 2+3+... + (n+1) 1+2+...+ n

k 0 para i variando de 1 at n faa para j variando de 1 at i faa kk+1

H. Senger

17/4/2004 - 1

Assim,

T (n) = 1 + (n + 1) +i + i
2 1

n+1

2 + (n + 1) 1+ n T (n) = 1 +(n + 1) + n+ n 2 2 2 2 n + 3n n + n + T (n) = 1 + (n + 1) + 2 2 2n + 4 + n 2 + 3n + n 2 + n 2n 2 + 6n + 4 = T (n) = 2 2 T (n) = n 2 + 3n + 2


Exerccio 3 : Algoritmos com sries de termos

Conforme se sabe, podemos obter uma boa aproximao para o clculo de exp(x) (isto , ex ) atravs da srie de somas parciais :

sn = 1+ x +

x2 x3 xn + + ... + 2! 3! n!

Na verdade, trata-se apenas de uma aproximao, pois


n

lim S n = exp( x)

Veja um algoritmo para calcular exp(x), com um limite de preciso que interrompe o clculo aps o n-simo termo. EXP (x,n) S1 para i de 1 at n faa /* calcula n termos da srie */ num 1 den 1 para j de 1 ate i faa /* calcula numerador e o denominador */ /* num xi */ num num * x /* den i! */ den den * j S S + num / den devolva S

H. Senger

17/4/2004 - 2

PEDE-SE : a) Simule o algoritmo para os valores de : x = 2 e n = 3


x n i j num den S

b) Determine o tempo de execuo do algoritmo, T(n) : (Resolvido)


linha contagem 1 n+1 n n 2+3+...+ (n+1) 1+2+...+ n 1+2+...+ n n

S1 para i de 1 at n faa num 1 den 1 para j de 1 ate i faa num num * x den den * j S S + num / den Assim,

T (n) = 1 + (n + 1) + n + n + i + i + i + n
2 1 1

n +1

2 + (n + 1) 1+ n 1+ n n+ n+ n 2 2 2 n 2 + 3n n 2 + n n 2 + n T ( n) = 2 + 4n + + + 2 2 2 2 2 2 4 + 8n + n + 3n + n + n + n + n 3n 2 + 13n + 4 T ( n) = = 2 2 T (n) = 3 n 2 + 13 3n + 2 2 2 T ( n) = 2 + 4n +
Exerccio 4 : Melhoria do algoritmo para exp(x)
possvel melhorar a eficincia do clculo de exp(x). Vamos rever a srie :

x2 x3 xn + + ... + sn = 1 + x + 2! 3! n!

H. Senger

17/4/2004 - 3

Observamos que o clculo da srie com n termos pode ser escrita na forma :

s n = 1 + T1 + T2 + ... + Tn ,
onde cada Ti um termo da srie, e pode ser determinado a partir de seu anterior Ti-1:

T1 = x Ti = Ti 1 * x , i1 i
Vejamos ento uma nova verso do algoritmo : EXP (x,n) T1 ST para i de 1 at n faa /* calcula n termos sa srie */ TT*x/i SS+T devolva S PEDE-SE : a) Simule o novo algoritmo para os valores de : x = 2 e n = 3
x n i T S

b) Determine o tempo de execuo do novo algoritmo, T(n) :

H. Senger

17/4/2004 - 4

2. Notao ( grande), (mega) e (theta)


Exerccio 5 :
D um significado para as notaes assintticas , e . Diga o que significa cada uma delas. Dica: Uma interpretao grfica pode ajudar bastante.

Exerccio 6 :

(resolvido)

Supondo que f(n)=3n, encontre uma funo g(n), tal que f(g(n))=g(f(n))=n. Em outras palavras, encontre uma funo g, tal que y=f(x) se e somente se x=g(y).

Soluo: Uma possvel resposta para o problema a funo g(n)=n/3. Posso provar isso, mostrando que f(g(n))=3g(n)=3*n/3=n e g(f(n))=g(3n)=3n/3=n. Exerccio 7 :
Para os diversos valores de f(n) abaixo, encontre uma funo g(n), tal que f(g(n))=g(f(n))=n. a) n+7 b) 7n c) n/5 d) n4 e) n1/4 f) n-1 g) n-5 h) 7n i) 7-log5n

Exerccio 8 :
Prove que so verdadeiras (ou que so falsas) as afirmaes abaixo. a) n=(n2)

Soluo: Isso fcil de provar. Basta encontrar c (c > 0) tal que n c n2 para algum n inteiro e positivo que seja suficientemente grande (ou seja, acima de um certo n0). Assim, se fizermos c = 1, a expresso ser vlida para quaisquer valores de n1. A resposta pode ser dada, por exemplo, desta forma: n pode ser (n2), pois n c n2 para c = 1 e para todo n1 (ou seja, n0 = 1). Obs.: Para provar que uma funo f O(g) voc deve mostrar os valores de c e n0 . O professor ir corrigir a questo verificando se realmente a relao n c n2 verdadeira para todo n n0.

b) n2 =(n)

Soluo: Para provar isso, seria necessrio encontrar c tal que n2 c n para algum n grande, acima de um certo n0 Vamos supor que esse c existe. Ento, podemos trabalhar um pouco sobre essa desigualdade e concluir que c n Mas isso impossvel, pois no pode existir um valor constante c que seja maior do que n, para n suficientemente grande. RESPOSTA : Quando uma funo f NO O(g), a resposta deve ser um pouco diferente : n2 no pode ser (n), pois no existe a constante inteira e positiva c que satisfaz a relao n2 c n.

H. Senger

17/4/2004 - 5

c) d) e) f) g) h) i) j)

n2+3n-5=(n2) n2=(n2+3n-5) n2=(n3) n3=(n2) n2+3n-5=(n3) 4n2+n-5=(n) nn=(n!) n5=(2n) (Resolvido)

Soluo: Esta prova um pouco diferente das anteriores, pois envolve funes polinomiais e exponenciais (n5 uma funo polinomial, pois pode ser escrita forma a0.n0 + a1.n1 + ... e 2n uma funo exponencial, pois tem a varivel n como expoente). Qualquer funo polinomial tem crescimento assinttico menor do que qualquer funo exponencial. Essa afirmativa baseia-se no fato de que

nb lim n = 0 n a
para todas as constantes a e b reais, tal que a > 1. Na prtica, voc no precisa desse bl bl bl todo. Apenas d um exemplo de c e n0 que satisfazem a relao.
k) 10n=(n2) l) 2n3=(2n) m) lg n=(n)

Exerccio 9 :

(resolvido)

Prove que so verdadeiras (ou que so falsas) as afirmaes abaixo. a) 1/2n2-3n=( n2)

Soluo: 1/2n2-3n realmente ( n2) se conseguirmos achar os valores n0, c1 e c2, tais que : c1 . n2 n2 3 n c2 . n2, para todo n > n0 Para descobrir c1 e c2 vamos dividir a expresso acima por n2, e ento teremos c1 3/ n c2

Tomando o lado direito da desigualdade, e fazendo n 1 teremos os valores de c1 1/14 e c2 , que validam a expresso. Para provar, basta analisar o comportamento da desigualdade. Como s interessam valores inteiros e positivos para c1 e c2, temos que considerar n 7. Ou ento, fazendo n 7 teremos que -3/n assume valores no intervalo [1/14, [ Portanto, c1 = 1/14, c2 = e n0 = 7 Exerccio 10 : (resolvido)
Prove ou desprove que 6n3= (n2).

H. Senger

17/4/2004 - 6

Soluo : Se 6n3= (n2), ento devem existir c1 e c2 tal que c1 . n2 6 n3 c2 . n2, para todo n > n0 Se analisarmos a segunda desigualdade, ou seja, 6 n3 c2 . n2 ento, teremos que 6 c2 . n2/ n3 6 c2 ./ n Isso impossvel, se pensarmos em n realmente grande, pois c2 teria de ser maior do que 6n, e nesse caso c2 no seria uma constante, mas teria de ser maior, medida que n cresce.

H. Senger

17/4/2004 - 7

Você também pode gostar