Buscar

aa22-P2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Prova 2 – Análise de Algoritmos 2022.2 – UFABC
Aritanan Gruber
aritanan.gruber@ufabc.edu.br
http://professor.ufabc.edu.br/∼aritanan.gruber
Entrega via Moodle até 28/08/2022 às 23h59
(120/100 pontos)
A prova é individual, sem consulta a colegas e internet. Você pode tirar dúvidas de enunciados com o professor e monitor.
Você pode ainda consultar suas anotações, a bibliografia indicada e os vídeos fornecidos. Caso o faça, indique clara e
sucintamente no início das questões o material consultado. Exemplos: seções X e Y de Cormen et al.; anotações/vídeo
sobre o tópico Z.
1. (15) Sejam A[1..n] e B[1..n] vetores com inteiros positivos que você pode ordená-los como desejar. No que segue,
considere A[i] e B[i] como os i-ésimos elementos de A e B após as ordenações. Descreva um algoritmo guloso com
consumo de tempo polinomial em n que maximiza a função prêmio f(A,B) =
∏n
i=1A[i]
B[i]. Prove que seu algoritmo
é correto (naturalmente, você deve explicitar quais ordens foram usadas em A e B).
2. (20) Seja S = {a1, a2, . . . , an} um conjunto de tarefas, em que a tarefa ai requer pi unidades de tempo de processa-
mento ininterrupto. Denote por fi o tempo de término de ai, que é o instante em que ai tem seu processamento
finalizado – observe que fi é uma variável que depende da ordem em que as tarefas são escalonadas.
Defina o tempo médio de término de um escalonamento σ para S como σ(S) = 1n
∑n
i=1 fi. Descreva um algoritmo
guloso que determina um escalonamento σ para as tarefas em S tal que σ(S) seja o menor possível. Prove a correção
e analise o consumo de tempo de seu algoritmo.
Exemplo: Para S = {a1, a2} com p1 = 5 e p2 = 3, o escalonamento σ1 = 〈a1, a2〉 tem f1 = 5, f2 = 8 e σ1(S) =
(5+8)/2 = 6.5. Já o escalonamento σ2 = 〈a2, a1〉 tem f2 = 3, f1 = 8 e σ2(S) = (3+8)/2 = 5.5 e, portanto, é melhor
que o primeiro.
3. (15) Seja D = (V,A) um digrafo acíclico (sem ciclos dirigidos) e suponha que os vértices de D estão ordenados como
v1, v2, . . . , vn tal que se (vi, vj) ∈ A, então i < j – uma tal ordenação é chamada de linear ou topológica e é uma
ordem total: quaisquer dois elementos são comparáveis, é reflexiva, assimétrica e transitiva.
Sejam ainda w : A → R uma função de pesos reais nos arcos de D e s, t ∈ V dois vértices distintos. Descreva um
algoritmo guloso ou baseado em programação dinâmica que recebe (D,w, s, t) e determina, em tempo polinomial em
n = |V | e m = |A|, um (s, t)-caminho P = 〈s = u0, u1, . . . , uk = t〉 em D cujo peso w(P ) =
∑k
i=1 w(ui−1, ui) seja o
maior possível e analise seu consumo de tempo.
Exemplo de um grafo dirigido acíclico (sem os pesos) ordenado topologicamente: v1 = j, v2 = m, . . . , v16 = b.
Nota: a simplicidade estrutural do problema permite que ele seja interpretado e resolvido eficientemente das duas
formas, com uma clara relação entre elas – mas isto não faz parte da questão e fica como um bom exercício para
passar o tempo.
4. (15+20+20+15) Lembre-se que:
• o problema da mochila binária (KP) consiste em, dados inteiros positivos n e W e vetores de inteiros
positivos v[1..n] e w[1..n], determinar x[1..n] ∈ {0, 1}n com
∑n
i=1 w[i] · x[i] ≤W e tal que
∑n
i=1 v[i] · x[i] seja o
maior possível; sem perda de generalidade, max{w[i] : i ∈ [n]} ≤W ≤
∑n
i=1 w[i];
• o problema da mochila fracionária (FKP) relaxa a integralidade de x de forma que queremos determinar
x[1..n] ∈ [0, 1]n satisfazendo a mesma restrição e o mesmo objetivo.
Nesta questão, vamos explorar algumas variações.
mailto:aritanan.gruber@ufabc.edu.br
http://professor.ufabc.edu.br/~aritanan.gruber
(a) Sejam x∗b e x
∗
f as respectivas soluções ótimas de (KP) e (FKP) para uma mesma instância (n, v, w,W ) e seja
k = min
{
j ∈ [n] :
∑j
i=1 w[i] > W
}
o índice do elemento crítico para (FKP) – tal que x∗f [i] = 1 se i < k,
x∗f [k] ∈ [0, 1], x∗f [i] = 0 se i > k. Denote o valor ótimo associado a x∗b por v∗b e tome
v∗a = max
{
v[k],
k−1∑
i=1
v[i]
}
.
Mostre que v∗b ≤ 2v∗a ≤ 2v∗b .
Nota: isso mostra que a estratégia gulosa de (FKP) possibilita obtermos uma aproximação de fator 2 para
(KP), sendo a solução x∗a a que obtém v∗a dentre os vetores característicos dos conjuntos {1, 2, . . . , k− 1} e {k}.
(b) Fizemos um algoritmo baseado em programação dinâmica que resolve (KP) em tempo O(nW ). A recorrência
em pesos não é a única forma de resolvermos (KP).
Seja V ≥ 0 um limitante superior ao valor de uma solução ótima – por exemplo, podemos ter V = d2v∗ae, do
item anterior. Determine (com prova) uma recorrência para (KP) em valores e forneça um algoritmo baseado
em programação dinâmica que a avalie em tempo O(nV ).
Nota: o fato dos valores serem inteiros é crucial aqui, como o foi o fato dos pesos inteiros na solução O(nW ).
Dica: defina c[j, k] como o peso de um subconjunto S ⊆ {1, 2, . . . , j} o mais leve possível tal que
∑
i∈S w[i] ≤W
e
∑
i∈S v[i] = k.
(c) O problema da mochila inteira (IKP) consiste na substituição da restrição x[1..n] ∈ {0, 1}n em (KP) por
x[1..n] ∈ Zn≥0. De outra forma, temos acesso a um número ilimitado de cada um dos itens para colocar-mos
na mochila. Determine (e prove) uma recorrência em pesos para (IKP) e forneça um algoritmo baseado em
programação dinâmica que a avalie em tempo O(nW ).
Nota: a recorrência de (KP) claramente não funciona aqui, mas uma modificação simples e judiciosa dela sim.
(d) O problema da mochila inteira com limitantes (BKP) consiste na adição de um vetor b[1..n] de inteiros
positivos à instância de (IKP) e na substituição da restrição x[1..n] ∈ Zn≥0 pelo conjunto de restrições x[i] ∈
{0, 1, . . . , b[i]} para i ∈ [n]. De outra forma, agora temos um número limitado de cada um dos ítens para
colocar-mos na mochila. Reduza (BKP) a (KP), mostrando como resolver (BKP) utilizando uma solução para
(KP) como subrotina, argumente a correção e analise precisamente o consumo de tempo da sua solução. O
tempo de sua redução é polinomial?

Continue navegando