N = 7* 3 = 21

Propaganda
Universidade do Estado Rio de Janeiro
Análise de Algoritmos
Prova 2 (2010/2)
NOME: ____________GABARITO____________________________________
NOTA: _________
RUBRICA DO PROFESSOR: ______________
1a QUESTÃO (VALOR 3,0 PONTOS)
Calcule a árvore binária de busca ótima para as entradas dadas a seguir:
j
fj
f´j
0
1
1
3
9
2
2
1
3
12
7
RESPOSTA:
F[i,j]
1+3+9=13
9+2+1=12
1+12+7=20
d=1
c[i,j]
13+0+0=13
12+0+0=12
20+0+0=20
i
0
1
2
j
1
2
3
i
0
j
2
F[i,j]
13+2+1=16
d=2
c[i,j]
16+12+0=28
1
3
12+12+7=31
31+12+0=43
i
j
F[i,j]
d=3
c[i,j]
0
3
16+12+7=35
35+28+0=63
1 13 16 35

9 12 31

F= 
1 20 c =


7

c[i,k-1]
0
0
0
s1
s2
k
1
2
3
c[i,k-1]
0
13
0
12
c[k,j]
12
0
20
0
k
1*
2
2
3*
c[i,k-1]
0
13
28
c[k,j]
43
20
0
k
1
2
3*
0 13 28 63

0 12 43


0 20


0

s3
c[k,j]
0
0
0
K=






1 1 3
2 3
3


2a QUESTÃO (VALOR 2,0 PONTOS)
Dizer se as afirmativas abaixo são verdadeiras ou falsas, justificando as falsas.
1. O custo total de uma árvore binária de busca de partilha ótima é sempre menor do que o custo de uma árvore
binária de busca de ótima.
RESPOSTA:
Não necessariamente, pois depende das frequências de acesso às chaves nas árvores, em particular, se as
frequências forem iguais para todas as chaves, teremos as duas árvores com o custo igual. Logo, a afirmação é
FALSA!
2. Para se escolher a chave de partilha de uma determinada raiz de uma sub-árvore, é necessário analisar vários
subproblemas possíveis de tal forma a encontrar o de menor custo.
RESPOSTA:
VERDADEIRA.
3a QUESTÃO (VALOR 2,0 PONTOS)
Para a árvore binária de busca de partilha abaixo, calcule os valores de x, y e z dos alcances. Justifique os cálculos.
[1,1]
[z,4]
[x,y]
RESPOSTA:
O alcance da raiz é [1,5], pois existem 5 nós na árvore. Sendo assim, de acordo com o alcance dado do filho
esquerdo da raiz, conclui-se que a chave de partilha da raiz é 1 e, logo, o alcance do filho direito da raiz será [2,5].
A partir daí, infere-se que o valor de z = 2 e a chave de partilha de seu pai será 4 o que nos leva finalmente, ao
valor de x = 5 e ao valor de y = 5.
4a QUESTÃO (VALOR 2,0 PONTOS)
Seja uma árvore binária apontada por ptraiz cujos nós possuem como informação um número inteiro. Faça um
algoritmo para criar uma lista do tipo pilha com os nós de valores inteiros ímpares e outra pilha com os valores
inteiros pares. Não deve ser alocada região de memória para criar as pilhas, pois as mesmas deverão ser
implementadas com ponteiros para seus topos pLpar e pLimpar, além de um campo prox dos nós da pilha,
conforme pode ser visto pelo esquema abaixo.
esq
RESPOSTA:
função par-ou-ímpar (pt)
dir
info
prox
INÍCIO
se pt^.esq  nil então par-ou-ímpar (pt^.esq); fimse;
se pt^.dir  nil então par-ou-ímpar (pt^.dir); fimse;
se resto (pt^.info/2) = 0
então pt^.prox := pLpar;
senão pt^.prox := pLimpar;
fimse;
FIM Par-ou-ímpar;
pLpar := pt;
pLimpar := pt;
função principal
INÍCIO
pLpar := nil;
pLimpar := nil;
se ptraiz  nil então par-ou-ímpar (ptraiz); fimse;
FIM.
5a QUESTÃO (VALOR 1,0 PONTO)
Qual é a complexidade do algoritmo da questão anterior? E qual seria essa mesma complexidade se tivéssemos
listas de números pares e ímpares ordenadas ao invés de pilhas?
RESPOSTA:
Supondo que a árvore do problema anterior tenha n nós, uma vez que é necessário visitar todos os nós para inserilos em uma das duas pilhas (pLpar ou pLimpar) e, levando-se em conta que a inserção nas pilhas tem
complexidade O(1), conclui-se que a complexidade do algoritmo da questão anterior é O(n), ou seja, apenas o custo
de se visitar todos os nós da árvore.
Na questão anterior, se tivéssemos listas ordenadas ao invés de pilhas, haveria um custo adicional para se adicionar
um nó na posição correta da sua lista (na ordem correta) para cada nó visitado. Como não existe a possibilidade de
se acessar um elemento da lista de forma aleatória, é necessário percorrer todos os seus elementos desde o início (a
partir de pLpar ou pLimpar) para se localizar a posição correta do nó inserido, então, no pior caso, teremos que
percorrer toda a lista que, por sua vez, no pior caso, conterá todos os elementos da árvore, visto que os nós podem
ter dados somente de um tipo (par ou ímpar). Sendo assim, a complexidade nesse caso seria O(n2).
Download