Você está na página 1de 5

Lista de exerccios resolvida

1) Utilizando o princpio da induo finita, demonstre que as seguintes relaes so


vlidas:
a.
Resolvendo o item a como exemplo:
caso base: n = 1
1 = 1.(1+2)/2 = 1.(2)/2 = 1 OK
supondo que vale para k, provaremos que vale para k + 1
1 + 2 + 3 + ... + k = k(k+1)/2
1 + 2 + 3 + ... + k + k+1 = (k+1)(k+2)/2

Por hiptese, a primeira parcela a soma de 1 a k. Portanto, vale para k + 1!


2) Um algoritmo tem complexidade
. Em um determinado computador, dentro de um
intervalo de tempo t, o algoritmo resolve um problema de tamanho 25. Imagine agora
que voc tem disponvel um computador 100 vezes mais rpido. Qual o tamanho
mximo de problema que o mesmo algoritmo resolve usando o computador mais
rpido e considerando o mesmo intervalo de tempo?
R.: Para um problema de tamanho 25, teramos o correspondente a 2.25*25 = 1250
instrues que poderiam ser feitas, cada uma em 0.001s. Assim, teramos que t =
1.25s. Se temos um computador 100 vezes mais rpido, ento cada instruo ser
feita em 0.00001s. A basta fazer a seguinte anlise:

Portanto, precisamos de um computador 100 vezes mais rpido para resolver um


problema 10x maior.

3) Suponha que exista um supercomputador e um computador pessoal competindo para


ver qual ordena primeiro 1 milho de nmeros. Para deixar a competio mais
emocionante, vamos utilizar 2 algoritmos diferentes: o mtodo X com tempo de
execuo de pior caso O( ) sendo empregado pelo supercomputador e o mtodo Y
utilizado pelo computador pessoal com tempo de execuo de pior caso O(n log n).
Sabe-se que o supercomputador capaz de executar 100 milhes de operaes por
segundo enquanto que o computador pessoal capaz de executar apenas 1 milho de
operaes por segundo. Para deixar as coisas mais precisas, o mtodo X foi codificado
por um programador bem experiente e habilidoso que utilizou um compilador
otimizado resultando em um programa que usa 2 operaes para ordenar n nmeros
inteiros. Por outro lado, o mtodo Y foi codificado por um programador mediano que
utilizou um compilador at certo ponto ineficiente e o programa final gasta 50 n log n
operaes para ordenar n nmeros. Perguntas:
i. Quais os tempos que os dois computadores levam para executar a
tarefa de ordenao de um milho de nmeros inteiros?
ii. Quantas vezes o vencedor mais rpido que o perdedor?
iii. Em sua opinio, o que contribuiu para este resultado?
R. Para o item i. vamos calcular os tempos de acordo com as informaes apresentadas:
tempo do supercomputador:
tempo do computador pessoal:
ii.) Claramente o vencedor 20 vezes mais rpido que o perdedor!
iii) Obviamente o que fez a diferena foi a complexidade do algoritmo vencedor.
4) Qual o menor valor de n tal que um programa com tempo de execuo
mais
rpido que um programa cujo tempo de execuo , supondo que os programas
foram implementados no mesmo computador?
R.

N
20
15
14
13
12
11
10
5

40.000
22.500
19.600
16.900
14.400
12.100
10.000
2.500

1.048.576
32.768
16.384
8.192
4.096
2.048
1024
32

5) Suponha que voc tenha algoritmos com os cinco tempos de execuo listados abaixo.
Quo mais lento cada um fica quando voc duplica o tamanho da entrada?
a.
b.
c.
d.
e.
6) R. Analisando para
a.
10
20
40
80

100
400
1.600
6.400

Para , a medida que se duplica o tamanho do problema, a resposta demora 4 vezes mais
(o que ).
Para

supe-se que demore 8 vezes mais... conferindo:


10
20
40
80

1.000
8.000
64.000
512.000

De fato!
Repetir raciocnio para as outras frmulas.
7) Utilizando as definies para as notaes assintticas, prove que so verdadeiras (ou
demonstre sua falsidade) as seguintes afirmativas:
a.
b.
c.
R.
O menor valor possvel para que a relao valha c = 7 quando n = 1!
Resolvendo letra c:

Portanto para n a partir de 1 e c = 4 a relao vlida.


Repetir raciocnio para as outras expresses!
8) Um algoritmo tem o trecho de cdigo destacado abaixo. Qual seria a expresso que
poderia melhor indicar o custo do algoritmo em funo do nmero de entradas?
a.
b.
c.
Trecho do cdigo:
for (i = n - 1; i > 0; i--)
for (j = 0; j < i; j++)
if (v[j] > v[j+1])
troca(&v[j], &v[j+1]);
R. Primeiro passo tem-se n-1 comparaes
Segundo passo tem-se n-2 comparaes
Terceiro passo tem-se n-3 comparaes

i-simo passo tem-se n-i comparaes


Total de comparaes: C(n) = (n-1) + (n-2) + ... + 1 =
9) Pode-se considerar a complexidade de tempo como sendo o nmero de unidades de
tempo (UT) necessrias para processar uma entrada de tamanho n. Considerando-se
que 1.UT = 1ms =
, indique o tamanho dos problemas que podem ser
resolvidos:
i. em um minuto por um algoritmo O(n);
ii. em um segundo por um algoritmo O(
iii. em uma hora por um algoritmo O(n log n).
R. i.) T(n) = n * UT
1 n.

n = 1.000

lembrando que 1 min = 60s


60s 60.000
ii. T(n) = n*n*UT

n = 31.6
iii. T(n) = n log n *
n log n *

= 3.600s

n = 2*

10) O Teorema Mestre indica que se houver recorrncia da forma T(n)= a.T(n/b)+f(n)
possvel determinar limites assintticos para T(n) em 3 casos. Indique o que significa a,
b e f(n) na expresso de recorrncia.
R. a o nmero de subproblemas
n/b o tamanho de cada problema
f(n) o custo para dividir e combinar os resultados