Você está na página 1de 30

Exerccios

Anlise de algoritmos &


Ordenao
Eduardo Laber

Cap 2- Tardos
Exerccio 3
f2 < f3 < f6 < f1 <f4 <f5

Cap 2- Tardos
Exerccio 4
g3 < g4 < g1 < g5 < g2 < g7 < g6

Cap 2- Tardos
Exerccio 5
a) Verdadeiro, assumindo g(n)>=1.
log f(n) <= log (c.g(n)) <=
log c + log g(n) <= d log g(n) para d > log c
a) Falso. f(n)=4n2 e g(n)=n2
b) Verdadeiro. f(n)2 <= c2 g(n) 2 < d.g(n) 2 para
d>c.

Cap 2- Tardos
Exerccio 6
a) O(n3)
b) Para mostrar (n3), considere i variando de 1 a
n/4 e j variando de n/4 a n
c) For i=1,2,...,n do
B[i,i]A[i]

For i=1,2,...,n
For j=i+1,i+2,...,n

B[i,j] B[i,j-1]+A[j]
O(n2)

Cap 2- Tardos
Exerccio 8
Enquanto o primeiro vazo no quebra,
jogar de alturas n0.5, 2n0.5,, n0.5 n0.5
Se ele quebrar ao jogar de altura i.n 0.5
Jogar de alturas (i-1)n0.5 , (i-1)n0.5 +1 , (i-1)n0.5
+2, at ele quebrar

Total de passo <= 2n0.5

Exerccios Extras
Escreva o pseudo-cdigo da operaco de
remover o elemento A[i] de um heap
armazenado em um vetor A[1..n]

Exerccio
Projete um algoritmo para fazer um merge
de k listas ordenadas que execute em O(n
log k), aonde n o total de elementos nas
k listas

Soluo
Seja L(1),...,L(k) as k listas
Remova o primeiro elemento de cada lista
e construa um heap com eles: O(k)
Para i=1,...,n
Remova o menor elemento do heap e insira
na lista ordenada. Assuma que este elemento
veio da lista j; O(log k)
Remova o primeiro elemento da lista L(j) e
insira no heap. O(log k)

Exerccio
Mostre como ordenar n inteiros no
intervalo [1,n2] em tempo linear O(n)

Soluo
Soluo
Crie vetores B e C com n posies, indexadas de 0 a
n-1. Cada posio pode armazenar uma lista de
inteiros
Percorra o vetor A inserindo A[i] na lista B[i mod n].
Para i variando de 0 a n-1
Para cada elemento x da lista B[i] faa
Insira x no final da lista C[ x div n]

Para i variando de 0 at n-1


Para cada elemento x da lista C[i] faa
Imprima [x]

Exerccio
A) Mostre que para fazer o merge de duas
listas com n elementos necesrio realizar
pelo menos 2n-1 comparaes no pior
caso.
B) Mostre que para fazer o merge de duas
listas, uma com n elementos e outra com m
elementos, necesrio realizar pelo menos
m n caso.
comparaes
no pior

Soluo
Considere as duas listas A= a(1)< ... < a(n)
e B=b(1) < ... < b(n) de n elementos
Seja X a ordem
a(1)<b(1)<a(2)<b(2) <...<a(n)<b(n)
Seja Y(j), j=1,...,n, a ordem idntica a
ordem X, exceto pelo fato que a(j) > b(j)
Seja Z(j), j=2,..,n, a ordem idntica a ordem
X, exceto pelo fato que a(j) < b(j-1)

Soluo
Se o algoritmo no comparar a(j) com b(j)
ele no tem como diferenciar X de Y(j)
Se o algoritmo no comparar a(j) com b(j1) ele no tem como diferenciar X de Z(j)
Logo so necessrias 2n-1 comparaes

Exerccio
Perdido em uma terra muito distante, voc se encontra em
frente a um muro de comprimento infinito para os dois
lados (esquerda e direita). Em meio a uma escurido total,
voc carrega um lampio que lhe possibilita ver apenas a
poro do muro que se encontra exatamente sua frente
(o campo de viso que o lampio lhe proporciona equivale
exatamente ao tamanho de um passo seu). Existe uma
porta no muro que voc deseja atravessar. Supondo que a
mesma esteja a n passos de sua posio inicial (no se
sabe se direita ou esquerda), elabore um algoritmo
para caminhar ao longo do muro que encontre a porta em
O(n) passos. Considere que n um valor desconhecido
(informao pertencente instncia). Considere que a
ao composta por dar um passo e verificar a posio do
muro correspondente custa O(1).

Soluo
p=0
Enquanto no encontrar o muro
Ande at a posio 2p. Se encontrar o muro no caminho
pare
Ande at a posio -2p. Se encontrar o muro pare
p++
Fim Enquanto
Assuma que a porta esta na posio + n. Seja p* tal que
2p*-1<n<=2p*
O algoritmo anda no mximo 3 2p*+1 +4 .2p*+1 para encontrar
o muro. Esse valor menor que 14 n.

Exerccio
Analise a complexidade do algoritmo abaixo
Leia(n);
x0
Para i 1 at n faa
Para j i+1 at n faa
Para k 1 at j-i faa
x x + 1

Exerccio
Projete o algoritmo mais eficiente que
voc conseguir para encontrar a mediana
de um vetor de n elementos. Anlise sua
complexidade.

Soluo
Ordene os elementos e retorne o
elemento n/2 da lista ordenada
Complexidade: O(n log n)

Mais adiante no curso mostraremos um


algoritmo O(n)

Exerccio
Dizemos que um vetor P[1..m] ocorre em
um vetor T[1..n] se P[1..m] =
T[s+1..s+m] para algum s. O valor de um
tal s um deslocamento vlido.
Projete um algoritmo para encontrar todos
os deslocamentos vlidos de um vetor e
analise sua complexidade.

Exerccio
Seja A[1..n] um vetor que pode conter
nmeros positivos e negativos.
Projete um algoritmo com complexidade
O(n3) determinar os ndices i e j, com i<=j,
tal que A[i] + ...+A[j] mximo. Tente
reduzir a complexidade para O(n2), depois
para O(n log n) e ento para O(n)

Exerccio
Resolvas as equaes abaixo encontrando
uma funo f(n) tal que T(n) = (f(n))
a)
b)
c)
d)

T(n)=2.T(n/2) + n2 para n>1; T(1)=1


T(n) = 2.T(n/2) + n, para n>1; T(1)=1
T(n)=T(n/2) + 1, para n>1; T(1)=1
T(n)=T(n/2) + n, para n>1; T(1)=1

Exerccio
Seja uma matriz quadrada A com n2 nmeros
inteiros que satisfaz as segintes propriedades
(i) A[i,j] <= A[i+1,j] para 1<=i<=n-1 e 1<=j<=n
(ii) A[i,j]<=A[i,j+1], para 1<=i<=n e 1<=j<=n-1
a) Dado um elemento x, descreva um
procedimento eficiente para determinar se x
pertence a A ou no. Analise a complexidade
do algoritmo proposto.
b) Mostre que este problema (n)

Soluo
a) Considere o procedimento abaixo
Seja y o elemento do canto superior direito da
matriz. Compara y e x
Se x>y, descarte a primeira linha e aplique o
procedimento recursivamente para matriz
restante.
Se x<y, descarte a ltima coluna e aplique o
procedimento recursivamente para matriz
restante.
Se x=y devolva a posio de y

Soluo
Anlise
A cada passo o nmero de linhas ou de
colunas da matriz diminui de 1, portanto
o algoritmo executa no mximo 2n
passos.

Soluo
Lower Bound
Considere a seguinte entrada matriz:
A[i,j] =0 se i+j<n+1,
A[i,j] =n+1 se i+j>n+1
A[i,j] um inteiro entre 1 e n se i+j=n+1
Se x um nmero entre 1 e n que no
pertence a A, qualquer algoritmo tem que
examinar todas as entradas A[i,j], com i+j=n+1
para concluir que x no esta em A. Logo, o
problema (n)

Exerccio
Seja A={a(1) < .... < a(n)} uma lista de
nmeros reais. A proximidade entre a(i)
e a(j) definida como |a(i)-a(j)|.
a) Dados os inteiros j e k, encontre os k
elementos de A mais prximos de A[j]
em O(k).

Exerccio
Seja A[1..n] um vetor com n nmeros
positivos e seja S[i]=A[1]+...+A[i].

Encontre o ndice i que minimiza


Minimiza | S[i] (A[i+1] + ... +A[n]) |

Exerccio
Mostre que

i
i 1

( n

k 1

Soluo
n

k
k
k 1
i

nn

O
(
n
)

i 1

n
i n / 2

2
i n / 2
n

n k 1
k 1
k 1 (n )
2

Você também pode gostar