Test1a Sol
Test1a Sol
Test1a Sol
RESOLUÇÃO
I. (2,0 + 2,0 + 2,0 + 2,0 + 2,0 = 10,0 val.)
I.a) Considere o seguinte conjunto de operações sobre conjuntos disjuntos:
1 for i = 0 to 9 do
2 Make-Set (xi )
3 for i = 0 to 2 do
4 Union (x2i , x2i+1 )
5 for i = 0 to 2 do
6 Union (x3∗i , x3∗(i+1) )
7 Union (x5 , x7 )
8 Union (x 1 , x 6 )
9 Union (x 1 , x 5 )
10 return Find-Set(x 4 )
Use a estrutura em árvore para representação de conjuntos disjuntos com a aplicação das
heuristicas de união por categoria e compressão de caminhos. Para cada elemento xi (0 ≤ i ≤
9) indique os valores de categoria (rank[xi ]) e o valor do seu pai na árvore que representa os
conjuntos (p[xi ]).
Nota: Na operação Make-Set(x), o valor da categoria de x é inicializado a 0. Na operação
de U nion(x, y), em caso de empate, considere que o representante de y é que fica na raı́z.
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
rank[xi ] 0 0 1 2 0 0 0 1 0 0
p[xi ] x3 x3 x3 x3 x3 x7 x3 x3 x2 x3
I.b)
1 2 3
4 5 6
Considere o grafo dirigido e acı́clico da figura. Aplique o algoritmo de Tarjan para identificar
os componentes fortemente ligados, considerando o vértice 5comoinicial.
Durante a aplicação do algoritmo considere que tanto a escolha dos vértices a visitar, como a
pesquisa dos vértices adjacentes são feitas por ordem lexicográfica (ou seja, 1, 2, 3, ...).
Indique os componentes fortemente ligados pela ordem segundo a qual são identificados
pelo algoritmo e o valor low calculado para cada vértice.
1 2 3 4 5 6
low() 3 3 1 6 1 1
SCCs : 1,2 4 3 ,5 ,6
I.c) Considere o grafo não dirigido e pesado da figura.
1 6 2 5 3
8 5 2 5 5
4 2 5 2 6
Para cada vértice, indique qual o valor da sua chave (k) e o de seu antecessor (π), quando o
vértice é removido da fila de prioridade. Em caso de empate, considere os vértices por ordem
lexicográfica.
Indique ainda o peso da árvore abrangente de menor custo encontrada.
Ordem vértices 1 2 6 4 3 5
v 1 2 3 4 5 6
key[v] 0 6 5 2 2 2
π[v] NIL 1 2 5 2 5
Peso MST: 17
A 6 B
2 3
-2 C -1 D
1 4
F -2 E
Calcule os valores de h(u) para todos os vértices u ∈ V do grafo. Calcule também os pesos
de todos os arcos após a repesagem.
A B C D E F
h() -4 0 -2 -3 0 -2
b B)
w(A, b A)
w(F, b
w(A,C) b D)
w(C, b D)
w(B, b E)
w(D, b
w(F,C) b F)
w(E,
2 0 0 0 6 1 1 0
I.e) Considere a rede de fluxo da figura onde s e t são respectivamente os vértices fonte e destino
na rede. Aplique o algoritmo Relabel-To-Front na rede de fluxo. Considere que que as listas
de vizinhos dos vértices intermédios são as seguintes: N[A] =< B, D, s > N[B] =< t,C, A >
N[C] =< B, D, s > N[D] =< t, A,C >, e que a lista de vértices inicial é L =< A, B,C, D >.
A 5 B
10 10
3
s t
7 3 8
C 4 D
Indique a altura final de cada vértice. Indique ainda um corte mı́nimo da rede, o valor do fluxo
máximo, e a sequência de diferentes configurações de L.
s A B C D t
h() 6 7 1 2 1 0
Corte : {s, A,C}/{B, D,t} f(S,T) = 15
L: < A, B,C, D > < B, A,C, D > < C, B, A, D > < D,C, B, A >
int f(int n) {
int i = 0, j = 0;
if (n > 0)
i = 2*f(n/2) + f(n/2) + f(n/2)
return j;
}
II.a) Determine um upper bound medido em função do parâmetro n para o número de iterações
dos loops 1 e 2 da função f .
III.b) Verificou-se que afinal a afirmação original do Presidente da Câmara não é verdadeira:
existem pares de cruzamentos que não cumprem o critério definido. O Presidente da Câmara
restringiu então a asserção original; afirma agora que: quem chegar a um cruzamento a partir
da câmara municipal, consegue regressar à câmara municipal sem sair da cidade. Proponha
um algoritmo eficiente para verificar a veracidade da nova asserção do Presidente da Câmara.
Indique a complexidade do algoritmo proposto.
Solução:
s 7 A 4 B 9 t
2
6 5
2
C 3 D
IV.a) Liste os arcos limitantes da rede de fluxo apresentada em cima.
IV.b) Nem todas as redes de fluxo têm arcos limitantes. Dê um exemplo com no máximo quatro
vértices.
Solução:
s 1 A 1 t
IV.c) Dado um fluxo máximo f ∗ numa rede de fluxo G e a respectiva rede residual G f ∗ , propo-
nha um algoritmo eficiente para determinar os arcos limitantes de G e identifique a complexi-
dade do mesmo.
Solução: Começamos por notar que a rede residual G f ∗ induz um corte s-t dos vértices de G;
seja (S, T ) esse corte. O algoritmo procede como descrito em baixo.
• Percorrer todos os arcos de G, verificando se cada um deles é, ou não, limitante; um arco
(u, v) ∈ E é limitante se u ∈ S′ e v ∈ T ′ . Complexidade: O(E).
V. (1,0 + 1,0 = 2,0 val.) Considere a rede de fluxo da figura em baixo cuja topologia (número
de nós e de arestas e respectivas capacidades) depende de um dado parâmetro k.
V.a) Calcule o fluxo máximo do grafo da figura em função de k. (Pista: o fluxo deve ser
n
n(n+1)
calculado por inspecção da figura e não aplicando um algoritmo de fluxo). Nota: ∑ i = 2
i=1
Solução: f ∗ = k2 /2.
V.b) Considere a aplicação de um algoritmo para o cálculo do fluxo máximo ao grafo acima;
determine o menor majorante assimptótico medido em função do parâmetro k para:
Solução:
• O(k2 )
2
• O(k )
7/7