Escolar Documentos
Profissional Documentos
Cultura Documentos
20
A[j] = V1[i1]
21
i1 = i1 + 1
22
23
A[j] = V2[i2]
24
i2 = i2 + 1
i3 = i3 + 1
c) (0,7 ponto)
Complete o algoritmo Mergesort-3-Partes. Chame o algoritmo Intercala-3 para intercalar os 3 vetores.
Use a varivel umTero, a qual contm aproximadamente 1/3 do tamanho do vetor (por exemplo, para um
subvetor de tamanho 8, umTero conter 3).
Mergesort-3-Partes(A, inicio, fim)
1 if inicio < fim
2
umTero = (fim inicio + 1) / 3 // teto, para evitar 0
3
Mergesort-3-Partes(A, inicio, inicio + umTero - 1)
4
Mergesort-3-Partes(A, inicio + umTerco, inicio + 2*umTero - 1)
5
Mergesort-3-Partes(A, inicio + 2*umTero, fim)
6
Intercala(A, inicio, inicio + umTerco - 1, inicio + 2*umTero - 1, fim)
d) (0,3 ponto)
Escreva a equao de recorrncia para Mergesort-3-Partes (no se preocupe com o piso e/ou teto da
diviso).
T(n) = (1) se n =1
T(n) = 3*T(n/3) + (n)
e) (0,7 ponto)
Calcule a complexidade de Mergesort-3-Partes, considerando um vetor com tamanho que potncia de 3.
Apresente a rvore de recurso e a altura da rvore.
c*n
c*(n/3)
c*(n/3)
c*(n/3)
c*(n/9)
c*(n/9)
c*(n/9)
c*(n/9)
c*(n/9)
c*(n/9)
c*(n/9)
c*(n/9)
c*(n/9)
...
...
...
...
...
...
...
...
...
h = log3n
Complexidade = c*n*(log3n + 1) = (n*lgn)
b) (0,9 pontos) Complete o algoritmo insere(F, cliente) que permite inserir um cliente na fila de
prioridade, considerando a sua prioridade e a prxima chave (que uma varivel global). No crie uma outra
contagem de prxima chave.
Considere que j existe as funes pai(i), filhoEsquerdo(i), filhoDireito(i).
insere(F, cliente)// insere o elemento cliente, com atributos chave(gerado
// pela funo)e atendimento(N ou P)
1
2
if F.heap-size == F.tamanho
erro overflow
F.heap-size = F.heap-size + 1
F[F.heap-size] = cliente
cliente.chave = proximaChave
proximaChave = proximaChave + 1
i = F.heap-size
temp = F[pai(i)]
10
F[pai(i)] = F[i]
11
F[i] = temp
12
i = pai(i)
if F.heap-size < 1
erro underflow
proximoCliente = F[1]
F[1] = F[F.heap-size]
F.heap-size = F. heap-size 1
corrigeMinHeap(F, 1)
return proximoCliente
corrigeMinHeap(F, i)
esquerdo = filhoEsquerdo(i)
direito = filhoDireito(i)
menor = i
F[esquerdo].atendimento == P) or
7
8
9
10
F[direito].atendimento == P) or
11
12
13
menor = direito
14 if menor != i
15
temp = F[i]
16
F[i] = F[menor]
17
F[menor] = F[i]
18
corrigeMinHeap(menor)
(ANULADA) T1. Assinale a alternativa que indica como devem ser as condies nas linhas 2 e 6 para
que a verso do algoritmo SelectionSort ordene em ordem crescente uma lista duplamente ligada.
Selection-Sort-Linked-List(L)
1 novoInicio = NIL
2 while ___________________
3
x = L.inicio
4
atual = L.inicio.proximo
5
while atual NIL
6
if ___________________
7
x = atual
8
atual = atual.proximo;
9
10
11
12
13
14
// Removendo o x de L
if x.anterior NIL
x.anterior.proximo = x.proximo
else L.inicio = x.proximo
if x.proximo NIL
x.proximo.anterior = x.anterior
15
// Inserindo o x na nova lista
16
x.proximo = novoInicio
17
if novoInicio NIL
18
novoInicio.anterior = x
19
novoInicio = x
20
x.anterior = NIL
21 L.inicio = novoInicio
a)
b)
c)
d)
e)
Linha
Linha
Linha
Linha
Linha
2:
2:
2:
2:
2:
L.inicio.proximo
L.inicio.proximo
L.inicio NIL ;
L.inicio NIL ;
L.inicio.proximo
NIL
NIL
Linha
Linha
NIL
; Linha 6:
; Linha 6:
6: x.chave
6: x.chave
; Linha 6:
Alternativa c
T2 Assinale a alternativa incorreta sobre o algoritmo Quicksort:
a) A complexidade (n2) no pior caso e (n*lgn) no melhor caso.
b) Um pior caso do algoritmo acontece quando o vetor de entrada est em ordem crescente e o ltimo
elemento for escolhido como piv.
c) O melhor caso do algoritmo acontece quando o piv divide o vetor em duas partes de mesmo tamanho.
d) Uma forma de diminuir a chance de ocorrncia do pior caso usar o algoritmo de insero para vetores
pequenos.
e) As chamadas recursivas ao algoritmo acontecem aps se particionar o vetor.
T3. Um aluno escreveu a seguinte verso do algoritmo de ordenao por insero. O que ela faz?
Insertion-Sort(A)
1 for j = A.tamanho - 1 downto 1
2
chave = A[j]
i = j + 1
3
4
while i <= A.tamanho and A[i] < chave
5
A[i - 1] = A[i] //shift de A[i]
i = i + 1
6
7
A[i - 1] = chave
a) Ordena em ordem decrescente.
b) Ordena em ordem crescente.
c) Coloca o mesmo valor em todo o vetor.
d) Mantm o vetor na mesma ordem original.
e) Fica em loop infinito.
Alternativa b
T4. Quais dos seguintes arranjos so Max-Heaps?
I. [17, 6, 9, 5, 4, 7, 6, 4, 5]
a) I e II, apenas.
II. [8, 3, 7, 2, 1, 6, 6, 1]
b) II e III, apenas.
III. [10, 8, 9, 4, 5, 6, 7, 0, 1, 2, 3]
c) I e III, apenas.
d) I, II e III.
e) Nenhum deles.
Alternativa d
T5. Analise o algoritmo a seguir e assinale a alternativa correta. Para a anlise, considere que n seja
potncia de 2.
j = n
while j <= (n*n)
for i = 1 to n
Imprime (passei aqui)
j = j*2
O algoritmo :
a) (n2)
b) (n)
Alternativa c
c) (n * lg(n))
1
lg(n) +
(n + 1)
n*(lg n
lg(n) +
d) (n2 * lg(n))
1 + 1
* (lg(n) + 1)
+ 1)
1
T7. Considere uma tabela hash de tamanho 7, inicialmente vazia, e uma funo de hash h(x) = x mod 7.
Assinale a alternativa que mostra corretamente o contedo resultante da tabela aps a insero dos valores
{17, 27, 39, 31, 22, 12, 14} na ordem dada, considerando as seguintes estratgias de tratamento de colises:
endereamento aberto com sondagem linear (open addressing with linear probing) e por encadeamento
(separate chaining). A resposta dada como <ndice do vetor> [contedo associado a este ndice]:
a)
b)
c)
d)
e)
Alternativa a.
a)
b)
c)
d)
e)
Alternativa b.