Você está na página 1de 10

Y Editado em 19 de abril de 2018 Z

U NIVERSIDADE F EDERAL RURAL DE P ERNAMBUCO


B ACHARELADO EM C IÊNCIA DA C OMPUTAÇÃO

Projeto e Análise de Algoritmos


Lista de Exercícios

Prof. Rian Gabriel Pinheiro

2018.1

Instruções
(a) As listas podem ser resolvidas em dupla, neste caso deve-se entregar apenas um trabalho!
(b) Mencione os teoremas e propriedade usadas para justificar usas afirmações.
(c) Algoritmos devem ser escritos em pseudocódigo bem comentado, ou informalmente, mas com precisão.
(d) Cada Parte do trabalho deve ser entregue até o dia da respectiva VA.
(e) Qualquer modificação das duplas deve ser informada.
(f ) As resoluções devem ser entregues (impressas ou escritas à mão) no meu escaninho no Prédio II ou pesso-
almente. Para um retorno mais rápido, a entrega pode ser parcelada.
(g) Qualquer tentativa de fraude implicará em nota zero na parte correspondente.
(h) A nota de cada VA (1ª e 2ª) será formada de uma Parte deste trabalho juntamente com uma Prova, e será
computada da seguinte forma:
Ni + P i
i -ésima VA = ,
2
em que Ni corresponde à nota da Prova i e P t à nota da Parte i do trabalho.
(i) Cada parte contém 60 questões, e cada questão valerá 0,2 ponto, assim, para se obter 10 pontos, deve-se
acertar 50 questões.
Parte I.
1ª VA
1. Corretude de Algortimos 1.7 . A sequencia de Fibonacci é definida da seguinte
forma: f 0 = 0; f 1 = 1 e f i +2 = f i +1 + f i , ∀i ≥ 0. Prove
1.1 . Prove por indução que: que para todo n ≥ 1 temos:
• ni=1 i = n(n+1)
P
2 para n ≥ 0.
Pn 2 n(n+1)(2n+1) µ ¶n µ ¶
• i =1 i = para n ≥ 0. 1 1 f n+1 fn
6 = ,
Pn 3 n 2 (n+1)2 1 0 fn f n−1
• i =1 i = 4 para n ≥ 0.

1.2 . Prove que:


• n 3 + 2n é divisível por 3 para todo n ≥ 0, por in- em que o lado esquerdo representa a n-ésima potên-
dução. cia de uma matriz 2 × 2.
• Se 2 | 3m (2 divide 3m) então 2 | m, por contra-
posição.
1.8 . Para cada n ≥ 1, considere um tabuleiro (de xadrez)
• A soma de 3 números consecutivos é múltiplo quadrado de tamanho 2n × 2n em que uma única
de 3, use prova direta. casa está faltando. Prove que o tabuleiro pode ser
1.3 . Considere um hexagono regular cujos vértices são preenchido com peças em formato de “L”. Cada peça
v 1 , v 2 , . . . , v 6 . Mostre que toda maneira de colorir ocupa três casas do tabuleiro.
os segmentos de retas que unem dois vértices, uti-
lizando as cores azul ou branca, produz pelo menos
um triângulo cujos lados tem a mesma cor. 1.9 . O B IN PACKING é um problema cuja entrada con-
siste em: n itens com tamanhos s 1 , s 2 , . . . , s n em que
1.4 . Considere o seguinte algoritmo: s i ∈ [0, 1]. O objetivo é encontrar o menor número de
“bins” (caixas) unitárias para armazenar os n itens.
1: procedure A LGORITMO X(vetor A[1, . . . , n], inicio, fim) Dado os algoritmos a seguir, mostre que eles não en-
2: if inicio = last then contram a solução ótima do problema, ou seja, en-
3: return A[inicio]
contre contraexemplos para cada um dos seguinte
4: end if
5: meio ← inicio + (fim − incio)/2 algoritmos para o problema.
6: a ← X(A, inicio, meio)
7: b ← X(A, meio +1, fim) • Coloque na bins os elementos em ordem da es-
8: if a < b then querda para a direita, se ele couber, caso con-
9: return b
10: else trário tente na próxima bin;
11: return a
12: end if • Coloque na bin mais livre o maior elemento;
13: end procedure

• Coloque o menor elemento na bin mais livre.


Explique o que ele faz e prove sua corretude.

1.5 . Prove a corretude do algoritmo bubblesort: 1.10 . Considere o algoritmo de Ulam, ele termina? De fato,
conjectura-se que seguindo o algoritmo, sempre será
1: procedure A LGORITMO B UBBLESORT(vetor A[1, . . . , n]) obtida a sequencia 4, 2, 1 (Conjectura de Collatz). Ex:
2: for i ← n − 1 → 1 do Para o valor a = 22, será obtida a seguinte sequencia:
3: for j ← 0 → i − 1 do 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. Como
4: if A[ j ] > A[ j + 1] then
5: troca(A[ j ], A[ j + 1])]
a prova do término do algoritmo consiste em um di-
6: end if fícil problema matemático em aberto. Implemente
7: end for um teste exaustivo mostrando que para qualquer
8: end for unsigned shot int (1 a 65535) de entrada o algo-
9: end procedure
ritmo para. Escreva um pequeno relato informando
o tamanho da maior sequência encontrada, o valor
1.6 . Prove a corretude do algoritmo Conversor Decimal- na qual a maior sequência foi obtida, a média dos ta-
Binário. manhos das sequências e o tempo de execução.

1: procedure C ONVERSOR D-B(inteiro n)


2: t ←n 1: procedure A LGORITMO DE U LAM(inteiro positivo a)
3: k ←0 2: x←a
4: zere todos os bits de b 3: while Os três últimos valores de x não for 4, 2, 1 do
5: while t > 0 do 4: if x for par then
6: k ← k +1 5: x ← x/2
7: b[k] ← t mod 2 6: else
8: t ← t ÷2 7: x ← 3x + 1
9: end while 8: end if
10: return b 9: end while
11: end procedure 10: end procedure
2. Complexidade de 2.7 . Mostre que
Algoritmos a) A solução de T (n) = T (n − 1) + n; T (1) = 1 é
O(n 2 ).
2.1 . Em cada caso, indique se f (n) = O(g (n)) ou f (n) =
b) A solução de T (n) = T (dn/2e) + 1; T (1) = 1 é
Ω(g (n)), ou ambos (neste caso f (n) = Θ(g (n))):
O(lg n).

c) A solução de 2T (bn/2c) + n; T (1) = 1 é O(n lg n).


f (n) g (n)
(1) n − 10 n − 200 2.8 . Qual a complexidade de execução do algoritmo
1/2 2/3 B UBBLESORT?
(2) n n
(3) 100n + log n n + (log n)2 2.9 . Qual é o tempo de execução do algoritmo QUICK -
(4) log 2n log 3n SORT quando todos os elementos do arranjo A têm

(5) 10 log n log(n 2 ) o mesmo valor? Considere que o pivô é o último ele-
meto do vetor.
(6) n 1,01 n log2 n
(7) n 2 / log n n(log n)2 2.10 . Mostre que o tempo de execução do algoritmo
(8) n 0,1 (log n)10 QUICKSORT é Θ(n 2 ) quando o arranjo A contém ele-
mentos distintos e está ordenado em ordem decres-
(9) (log n)log n n/ log n cente. Considere que o pivô é o primeiro elemeto do
p
(10) n (log n)3 vetor.
(11) n 1/2 5log2 n
(12) n2n 3n
(13) 2n 2n+1 3. Grafo e Subgrafo; Arvores e
(14) n! 2n Conectividade
2
(15) (log n)log n 2(log2 n)
n 3.1 . Prove que todo grafo conexo com um número mí-
ik n k+1
X
(16) nimo de arestas é uma árvore.
i =1

2.2 . Resolva a recorrência: 3.2 . Quantas arestas possui o grafo K n ?


(
2, se n = 2 3.3 . Mostre que há onze não-isomorfos grafos simples
T (n) =
2T (n/2) + n, se n = 2k , para k > 1. com quatro vértices.

2.3 . Escreva o pseudocódigo do algoritmo de busca biná- 3.4 . Seja G um grafo bipartido. Mostre que os vértice de
ria iterativo ou recursivo e demostre que o pior caso G podem ser enumerados de forma que a matriz de
da busca binária é Θ(lg n). adjacência de G tenha a forma:

2.4 . Resolva a recorrência: a n = a 0 + a 1 + · · · + a n−1 , em µ ¶


0 A 12
que a 0 = 1.
A 21 0
2.5 . Considere o seguinte trecho de código:
em que A 21 é a transposta de A 12 .
1: procedure P ROG 1(inteiro positivo k)
2: if k == 1 then 3.5 . Prove que em todo grafo, o número de vértices com
3: Print(“Oi”) return grau ímpar é par.
4: else
5: for i ← 1 → k do
6: Print(“Oi”) 3.6 . Prove que se δ ≥ 2 então G contém um ciclo.
7: end for
8: Print(“Oi”)
9: end if 3.7 . Sejam u e v dois vértices distintos de uma árvore T .
10: end procedure Prove que só exite um único caminho entre u e v em
T.

Seja T (n) o número de vezes que a palavra OI é im- 3.8 . Mostre que se G é uma árvore com ∆ ≥ k, então G
pressa quando Prog1 é chamado com parâmetro n. tem pelo menos k vértices com grau um.
Calcule T (1) e determine uma relação entre T (n) e
T (n − 1) para n > 1. Com base na relação encon-
3.9 . Prove que κ ≤ κ0 ≤ δ. Em que, κ é conexidade do
trada, utilize indução para mostrar que T (n) ≥ n 2 ,
grafo, κ0 é conexidade por aresta e δ o grau mínimo.
para todo n maior ou igual a 1.

2.6 . Sejam f (n) e g (n) funções assintoticamente não ne- 3.10 . Encontre um grafo com 5 vértice na qual a clique má-
gativas. Usando a definição básica da notação Θ, xima e o conjunto independente máximo são meno-
prove que max( f (n), g (n)) = Θ( f (n) + g (n)). res que 3.
4. Euleriano e Hamiltoniano; a) G é bipartido.
Emparelhamento; Coloração b) G pode ser 2-colorido.
por Aresta c) G não tem ciclo ímpar.

4.1 . Mostre que é impossível cobrir um tabuleiro de xa- 5.6 . Seja ∆ o grau máximo de qualquer vértice em um
drez 8×8 usando peças retangulares 1×2 se duas ca- grafo G . Prove que podemos colorir G com ∆ + 1 co-
sas quinas opostas forem removidas. res.

4.2 . Mostre que, se uma grafo G não orientado for euleri- 5.7 . Seja C uma clique e I um conjunto independente em
ano, seu conjunto de arestas poderá ser particionado um grafo G. Prove que |C ∩ I | ≤ 1.
em ciclos disjuntos.

4.3 . Mostre que K i j somente possui um ciclo hamiltoni- 5.8 . Prove que o conjunto S ⊆ V é um conjunto indepen-
ano se i = j . dente de G se e somente se V \ S é uma cobertura de
G.
4.4 . Prove que uma árvore T tem um emparelhamento
perfeito se e somente se o(T − v) = 1 para todo v ∈ V . 5.9 . Mostre que toda grade é bicolorável.
Em que o(G) é o número de componentes conexas
com um número ímpar de vértices. 5.10 . Se G não possui uma clique grande, então deve-
se esperar que G tenha um conjunto independente
4.5 . Mostre que χ0 ≥ ∆. Em que χ0 é o número cromático grande. De fato, isto foi provado por Ramsey em
de aresta e ∆ é o grau máximo do grafo. 1930. Ele mostrou que, dado dois inteiros positivos,
4.6 . Mostre que o grafo de Petersen é 4-cromático de k e l , existe um menor inteiro r (k, l ) na qual todo
aresta. grafo com r (k, l ) vértices contém uma clique com k
vértices ou um conjunto independente com l vér-
4.7 . Em uma escola há m professores X 1 , X 2 , . . . , X m e n tice. Os números r (k, l ) são conhecidos como núme-
classes Y1 , Y2 , . . . , Yn . Dado que um professor X i é re- ros de Ramsey. Mostre que r (2, l ) = l e r (k, 2) = k.
quisitado por uma classe Y j por p i j períodos. Mo-
dele o problema usando grafos para obter o menor
número de períodos.
6. Grafos Planares; Grafos
4.8 . Seja G um grafo ponderado completo na qual seus
pesos satisfazem a desigualdade triangula: w(x y) +
Direcionados e Fluxo
w(y z) ≥ w(xz) para todos os vértices x, y, z ∈ V .
Mostra que o ciclo Hamiltoniano de menor custo C 6.1 . Mostre que o grafo de Petersen não é planar.
possui custo w(C ) ≤ 2×w(T ), em que T é uma árvore
geradora mínima de G. 6.2 . Três casas devem ser interligadas às companhias de
luz, água e gaz. No entanto, as tubulações não po-
4.9 . Prove que, em um grafo G em que todos os vértices dem se cruzar. Solucione o problema.
possuem grau par, não existe ponte em G.

4.10 . Seja G um grafo não Euleriano, mostre que é possivel 6.3 . Mostre que um grafo é planar se e somente se cada
adicionar um único vértice em G, juntamente com uma de suas componentes conexas são planares.
algumas aresta ligadas a este novo vértice, de modo
a tornar G Euleriano. 6.4 . Seja e uma ponte de um grafo G. Mostre que G é pla-
nar se e somente se G − e é planar.

5. Cliques e Conjuntos 6.5 . Seja G o grafo dos estados do Brasil. Mostre que
χ(G) = 4, em que χ(G) é o número cromático de G.
Independentes; e Coloração por
Vértice d − (v) = |E | = d + (v).
P P
6.6 . Mostre que v∈V v∈V

5.1 . Mostre que qualquer grafo com no mínimo dois vér- 6.7 . Dê um exemplo mostrando que o fluxo máximo é
tice contém no mínimo dois vértices com o mesmo igual ao corte mínimo.
grau.
6.8 . Sejam a e b dois vértices de um grafo sem pesos. Su-
5.2 . Prove que todo grafo com mais que seis vértices con- ponha que existe um fluxo de cardinalidade k entre a
tém no mínimo ou uma clique com no mínimo três e b. Mostre que todo conjunto de arestas que separa
vértice ou um conjunto independente com no mí- a de b tem pelo menos k arestas.
nimo três vértices.
6.9 . Seja G um grafo planar com n vértices, m arestas, c
5.3 . Encontre um conjunto independente máximo na componentes conexas e f faces. Mostre que n − m +
grade p-por-q. f − c = 1.
5.4 . Mostre que toda árvore pode ser 2-colorida.
6.10 . Seja G um grafo com 11 vértice, mostre que G ou G
5.5 . Mostre que os itens são equivalentes: não é planar.
Parte II. 8. Algoritmos Gulosos

2ª VA 8.1 . Considere um grafo não-direcionado G = (V, E ) com


pesos de aresta não-negativos w e ≥ 0. Suponha que
você computou uma árvore geradora mínima de G e
que também computou os caminhos mínimos para
7. Divisão e Conquista todos os nós partindo de um particular nó s ∈ V .
Agora suponha que cada peso de aresta seja aumen-
7.1 . Dado A[1, . . . , n], um vetor ordenado de inteiros dis- tado em uma unidade: os novos pesos são w e0 =
tintos, você quer saber se existe um índice i para w e + 1.
o qual A[i ] = i . Dê um algoritmo de divisão-e-
conquista que execute em tempo O(log n). a) Será que a árvore geradora mínima muda? Dê
um exemplo para o qual ela muda ou prove que
7.2 . Dado um conjunto de n elementos, selecione encon- ela não pode mudar.
tre o k-ésimo elemento desta lista utilizando divisão-
b) Será que os caminhos mínimos mudam? Dê
e-conquista.
um exemplo para o qual eles mudam ou prove
que isso não pode ocorrer.
7.3 . São dadas duas listas ordenadas de tamanho m e
n. Dê um algoritmo de tempo O(log m + log n) para
8.2 . Seja G uma grafo não-direcionado. Prove que se to-
computar o k-ésimo menor elemento da união das
das as arestas são distintas, então ele tem uma única
duas listas.
árvore geradora mínima.
7.4 . Descreva o algoritmo de Torre de Hanói e calcule sua 8.3 . As sentenças seguintes podem ou não estar corretas.
complexidade. Em cada caso, prove a sentença (se ela for correta)
ou forneça um contraexemplo (se não for correta).
7.5 . Resolver o problema da Torre de Hanói quando se
Sempre considere o grafo G = (V, E ) não-direcionado
dispõe de 4 torres, em vez de 3. Determinar o nú-
e conexo. Não considere que os pesos nas arestas se-
mero de movimentos de disco.
jam distintos, a menos que isso seja explicitamente
afirmado.
7.6 . Generalizar a solução do item anterior para o caso de
m ≥ 3 torres. a) Se um grafo G tem mais do que |V | − 1 arestas
e existe uma única aresta de maior peso, então
7.7 . Explique a relação da técnica Divisão-e-Conquista esta aresta não pode ser parte da árvore gera-
com paralelismo. dora mínima.

7.8 . Dado um vetor A com n entradas, com cada entrada b) Se G tem um ciclo com uma aresta de maior
um número distinto. Sabe-se que a sequência de va- peso única e, então e não pode ser parte de ne-
lores A[1], A[2], . . . , A[n] é unimodal: ou seja, existe nhuma AGM.
índice p entre 1 e n, os valores nas entradas do vetor c) Seja e qualquer aresta de peso mínimo em G.
aumentam até a posição p e, em seguida, reduzem, Então e tem de ser parte de alguma AGM.
o resto do caminho, até que a posição n. Deseja-se
d) Se a aresta de menor peso em um grafo é única,
encontrar o “ponto de máximo” p. Mostre como en-
então ela tem de ser parte da todas as AGMs.
contrar p através de um algoritmo O(log n).
e) Se e é parte de alguma AGM de G, então ela tem
7.9 . Você está consultando para uma pequena empresa de ser a aresta de menor peso através de algum
de investimentos. Eles estão fazendo uma simulação corte de G.
em que eles olham para n dias consecutivos de uma
f ) Se G tem um ciclo com uma aresta mais leve
determinada ação, em algum momento no passado.
única e, então e tem de ser parte de todas as
Cara cada dia i = 1, 2, . . . , n; eles têm o preço p i da
AGM.
ação neste dia. Suponha que durante este período de
tempo, eles queriam comprar 1.000 ações em alguns g) A árvore de caminhos mínimos computada
dias e vender todas essas ações em algum dia (mais pelo algoritmo de Dijkstra é necessariamente
tarde). Eles querem saber: Quando eles deveria ter uma AGM.
comprado e quando eles deveriam ter vendido, a fim h) O caminho mínimo entre dois nós é necessari-
de maximizar os lucros? Por exemplo, suponha que amente parte de alguma AGM.
n = 3, p 1 = 9, p 2 = 1, p 3 = 5. Veja que deveria retor-
nar "comprar em 2, vender em 3"(compra no dia 2 e i) O algoritmo de Prim funciona corretamente
vender no dia 3 significa que eles teria feito $4 por quando existem arestas negativas.
ação, o máximo possível para esse período). Cla- j) (Para qualquer r > 0, defina um r -caminho
ramente, há um algoritmo simples que leva tempo cujas arestas tenham todas peso < r .) Se G
O(n 2 ): tentar todos os possíveis pares compra/venda contém um r -caminho do nó s até t , então
e ver qual deles faz mais dinheiro. Elabore um algo- toda AGM de G tem de conter também um r -
ritmo para encontrar os dias de compra e venda com caminho do nó s até o nó t .
tempo O(n log n).
8.4 . Considere o problema de agendamento de inter-
7.10 . Mostre como remover todos os elementos duplica- valos. Nós temos um conjunto de atividades
dos de um vetor em O(n log n). {1, 2, . . . , n}; cada atividade i possui um intervalo de
tempo a partir de s i e termina em f i . Um agenda- Descreva um algoritmo que determina uma sequên-
mento — conjunto de atividades — é dito compatí- cia de execução das tarefas em que o lucro total é
vel, se nenhuma atividade se sobrepõem no tempo. maximizado.
O objetivo é determinar um agendamento compatí-
vel com o maior número possível de atividades. Pro-
jete uma algoritmo para este problema.
9. Programação Dinâmica
8.5 . Seja T uma AGM de um grafo G. Dado um subgrafo
conexo H de G, mostre que T ∩ H está contido em 9.1 . Uma subsequência contígua de uma lista S é uma
alguma AGM de H . subsequência feita de elementos consecutivos de S.
Por exemplo, se S é
8.6 . Este é um problema que ocorre em análise automá-
tica de programas. Para um conjunto de variáveis
5, 15, −30, 10, −5, 40, 10,
x 1 , . . . , x n , são dadas algumas restrições de igualdade,
da forma “x i = x j ” e algumas restrições de desigual-
então 15, −30, 10 é uma subsequência contígua, mas
dade, da forma “x i 6= x j ”. Será que é possível satisfa-
5, 15, 40 não é. Forneça um algoritmo de tempo li-
zer todas elas? Por exemplo, as restrições
near para a seguinte tarefa:
Entrada: Uma lista de números a 1 , a 2 , . . . , a n .
x 1 = x 2 , x 2 = x 3 , x 3 = x 4 , x 1 6= x 4 ,
Saída: A subsequência contígua de soma máxima (a
não podem ser satisfeitas. Forneça um algoritmo efi- subsequência de tamanho zero tem soma zero). Para
ciente que tome como entrada m restrições sobre n o exemplo anterior, a resposta seria 10, −5, 40, 10,
variáveis e decida se as restrições podem ser satisfei- com uma soma de 55. (Dica: Para cada j ∈ {1, 2, . . . , n}
tas. considere subsequências contíguas terminando exa-
tamente na posição j .)
8.7 . Alice quer dar uma festa e está decidindo quem cha-
mar. Ela tem n pessoas as quais escolher, e ela fez 9.2 . Você vai sair em uma viagem longa, que começa na
uma lista de quais pares dessas pessoas conhecem estrada no quilômetro 0. Ao longo do caminho exis-
uma a outra. Ela quer selecionar o maior número de tem n hotéis, nos quilômetros a 1 , a 2 , . . . , a n , onde
pessoas possível, sujeito a duas restrições: na festa, cada a i é medido partindo do ponto inicial. Os úni-
cada pessoa deve ter pelo menos outras cinco pes- cos lugares onde você pode parar são esses hotéis,
soas que ela conhece e outras cinco pessoas que ela mas pode escolher dentre eles em qual parar. Você
não conhece. Forneça um algoritmo eficiente que tem de parar no hotel final (no quilômetro a n ), que
tome como entrada a lista das n pessoas e a lista de é o seu destino. Você gostaria, idealmente, de via-
pares de quem conhece quem e calcule a melhor es- jar 200 quilômetros por dia, mas isso pode não ser
colha de convidados para a festa. Dê o tempo de exe- possível (dependendo do espaçamento dos hotéis).
cução em termos de n. Se você viaja x quilômetros durante um dia, a pena-
lização para aquele dia é (200 − x)2 . Você quer pla-
8.8 . Um servidor tem n usuários esperando para serem nejar a sua viagem para minimizar a penalização to-
servidos. O tempo de serviço requerido por usuário é tal — ou seja, a soma das penalizações em todos os
conhecido previamente: é t i minutos para o usuário dias. Forneça um algoritmo eficiente que determine
i . Portanto se, por exemplo, os usuários são servidos a sequência ótima de hotéis nos quais parar.
em ordem crescente de i , então o i -ésimo usuário
tem de esperar a ij =1 t j minutos. Queremos mini-
P
9.3 . A rede de restaurantes Bod’s está considerando abrir
mizar o tempo total de espera uma série de restaurantes ao longo da BR-101. Os
n
n possíveis lugares estão ao longo de uma linha reta
e as distâncias desses lugares partindo do começo
X
T= (tempo gasto pelo usuário i na espera).
n=1 da BR são, em quilômetros e em ordem crescente,
m 1 , m 2 , . . . , m n . As restrições são as seguintes:
Forneça um algoritmo eficiente para computar a or-
• Em cada lugar, Bod’s pode abrir no máximo
dem ótima na qual processar os usuários.
um restaurante. O lucro esperado de abrir um
8.9 . Considere o seguinte problema. restaurante no lugar i é p i ,onde p i > 0 e i =
Entrada: Grafo não direcionado G = (V, E ); pesos de 1, 2, . . . , n.
arestas w e ; subconjunto de vértices U ⊂ V . • Quaisquer dois restaurantes devem estar a,
Saída: A Árvore Geradora mais leve na qual os nós pelo menos, k quilômetros um do outro, onde
de U são folhas (pode haver outras folhas na árvore k é um inteiro positivo.
também).
Forneça um algoritmo eficiente para computar o lu-
8.10 . Seja J = {J 1 , . . . , J n } um conjunto de tarefas que de- cro total esperado máximo sujeito às dadas restri-
vem ser executadas sequencialmente em um mesmo ções.
processador. Cada tarefa J i consome uma unidade
de tempo do processador e produz um lucro r i > 0 9.4 . Dadas duas strings x = x 1 x 2 · · · x n e y = y 1 y 2 · · · y m „
caso seja concluída até o tempo limite t i , i = 1, . . . , n. desejamos encontrar o comprimento da maior subs-
Se J i for concluída após t i , nenhum lucro é obtido tring comum delas, isto é, o maior k para o
desta tarefa. O lucro total de uma sequência de exe- qual existem índices i e j com x i x i +1 · · · x i +k−1 =
cução das tarefas é a soma dos lucros obtidos pe- y j y j +1 · · · y j +k−1 . Mostre como fazer isso em tempo
las tarefas que foram concluídas até o tempo limite. O(mn)
9.5 . Uma certa linguagem de processamento e strings • Analise cada par: se os dois elementos forem
oferece uma operação primitiva que divide uma diferentes, descarte ambos; se forem iguais,
string em dois pedaços. Como essa operação en- mantenha apenas um deles
volve copiar a string original, ela toma n unidades • Mostre que depois desse procedimento restam
de tempo para uma string de tamanho n, não im- no máximo n/2 elementos e que eles têm um
porta a posição do corte. Suponha, agora, que você elemento majoritário se A também tem.)
queira quebrar a string em muitos pedaços. A ordem
na qual os cortes são feitos pode afetar o tempo de 9.10 . Uma cobertura de vértices de um grafo G = (V, E ) é
execução total. Por exemplo, se você quiser cortar um subconjunto de vértices S ⊆ V que inclui ao me-
uma string de 20 caracteres nas posições 3 e 10, fazer nos uma extremidade de cada aresta de E . Forneça
o primeiro corte na posição 3 incorrerá em um custo um algoritmo de tempo linear para a seguinte tarefa.
total de 20+17 = 37, enquanto fazer a posição 10 pri- Entrada: Uma árvore não-direcionada T = (V, E ) .
meiro terá um custo melhor de 20 + 10 = 30. Forneça Saída: O tamanho da menor cobertura de vértices de
um algoritmo de programação dinâmica que, dadas T.
as posições de m cortes em uma string de compri- Por exemplo, na árvore abaixo, as possíveis co-
mento n, encontre o custo mínimo de dividir a string berturas de vértice incluem {A, B,C , D, E , F,G} e
nos m + 1 pedaços. {A,C , D, F }, mas não {C , E , F }. A menor cobertura de
9.6 . Suponha que dois times, A e B , estejam jogando uma vértice tem tamanho 3: {B, E ,G}.
partida para ver quem é o primeiro a ganhar n jogos
(para algum particular n). Podemos supor que A e B A D
sejam igualmente competentes, tal que cada um tem B E G
uma chance de 50% de ganhar cada particular jogo. C F
Suponha que eles já jogaram i + j jogos, dos quais A
ganhou i e B ganhou j . Forneça um algoritmo efici-
ente para computar a probabilidade de que A virá a
vencer a partida. Por exemplo, se i = n −1 e j = n −3, 10. Programação Matemática
então, a probabilidade de que A ganhe a partida é
7/8, pois ele tem de ganhar um dos próximos três jo- 10.1 . Considere o seguinte programa linear.
gos.
max 5x + 3y
9.7 . Dado um estoque ilimitado de moedas de valores s.a 5x + 2y ≥ 0
x 1 , x 2 , . . . , x n , queremos dar um troco de v usando no
x+y ≤7
máximo k moedas; isto é, queremos encontrar um
conjunto de ≤ k moedas cujo valor total é v. Isso x ≤5
pode não ser possível: por exemplo, se os valores são x ≥0
5 e 10 e k = 6, então podemos dar um troco de 55, y ≥0
mas não de 65. Forneça um algoritmo de programa-
ção dinâmica eficiente para o seguinte problema. Desenhe a região factível e identifique a solução
ótima.
Entrada: x 1 , . . . , x n ; k; v.
Questão: Será que é possível dar um troco de v 10.2 . A macaxeira é produzida em Garanhuns e em Caru-
usando no máximo k moedas, de valores x 1 , . . . , x n ? aru e é consumido em Recife e Olinda. Garanhuns
9.8 . Diz-se que um vetor A[1 . . . n] possui um elemento produz 15 mil toneladas de macaxeira e Caruaru,
majoritário se mais do que a metade de seus elemen- 8. Por sua vez, Recife consome 10 mil toneladas e
tos são iguais. Dado um vetor, a tarefa é projetar Olinda, 13. O custo de transporte por mil toneladas
um algoritmo eficiente para dizer se o vetor possui são $4 de Caruaru para Recife, $1 de Caruaru para
um elemento majoritário e, se afirmativo, encontrar Olinda, $2 de Garanhuns para Recife, e $3 de Ga-
esse elemento. Os elementos do vetor não são ne- ranhuns para Olinda. Escreva um programa linear
cessariamente de algum domínio ordenado como os que decida as quantidades de macaxeira (em milha-
inteiros e, portanto, não podem existir comparações res de toneladas e frações de milhares de toneladas)
do tipo “A[i ] > A[ j ]”, (Pense nos elementos do ve- a serem transportados de cada produtor para cada
tor como, digamos, arquivos GIF). Entretanto, você consumidor, de modo que minimize o custo total de
pode responder questões da forma: “A[i ] = A[ j ]” em transporte.
tempo constante. Mostre como resolver este pro- 10.3 . Um avião cargueiro pode carregar um peso máximo
blema em tempo O(n log n). (Dica: Divida o vetor A de 100 toneladas e um volume máximo de 60 metros
em dois vetores A 1 e A 2 de metade do tamanho. Será cúbicos. Há três materiais a serem transportados e
que conhecer o elemento majoritário de A 1 e de A 2 a companhia cargueira pode escolher carregar qual-
ajuda a descobrir o elemento majoritário de A? Se quer quantidade de cada, até os limites máximos dis-
afirmativo, você pode usar a abordagem divisão-e- poníveis dados a seguir.
conquista).
• Material 1 tem densidade 2 ton/metro cúbico,
9.9 . Considerando a questão anterior. Você pode forne- quantidade máxima disponível 40 metros cúbi-
cer um algoritmo linear? (Dica: Aqui está uma outra cos, e receita de $1.000 por metro cúbico.
abordagem de divisão-e-conquista: • Material 2 tem densidade 1 ton/metro cúbico,
• Emparelhe os elementos de A arbitrariamente, quantidade máxima disponível 30 metros cúbi-
para obter n/2 pares. cos, e receita de $1.200 por metro cúbico.
• Material 3 tem densidade 3 ton/metro cúbico, 10.8 . Escreva o dual do seguinte programa linear.
quantidade máxima disponível 20 metros cúbi-
cos, e receita de $12.000 por metro cúbico. max x + y
s.a 2x + y ≤ 3
Escreva um programa linear que otimize a receita
x + 3y ≤ 5
dentro das restrições.
x, y ≥ 0

10.4 . Moe está decidindo quanta cerveja Duff regular e Encontre as soluções ótimas do PL primal e do dual.
quanta cerveja Duff forte encomendar a cada se-
mana. Duff regular custa a Moe $1 por caneco e ele a 10.9 . P ROBLEMA DE C OBERTURA. O governo planeja cons-
vende por $2 por caneco; Duff Forte custa $1, 50 por truir escolas de modo a satisfazer a demanda em
caneco e ele vende por $3 por caneco. Entretanto, uma cidade. Ainda não se sabe quantas escolas são
como parte de uma complicada fraude de marke- necessárias, mas a lei demanda que todo bairro deve
ting, a companhia Duff somente vende um caneco estar próximo a uma escoa. Dado o grafo de proximi-
de Duff Forte para cada dois canecos ou mais de Duff dade G = (V, E ) e C v o custo de se instalar a escola no
regular que Moe compra. Além disso, devido a even- bairro j . Em que bairro deve ser construídas escolas
tos passados sobre os quais é melhor nem comen- de modo a respeitar a lei sem desperdiçar dinheiro
tar, Duff não venderá a Moe mais do que 3.000 ca- publico? Modelo o problema por Programação Li-
necos por semana. Moe sabe que ele pode vender near Inteira.
tanta cerveja quanto tiver. Formule um programa li-
10.10 . P ROBLEMA DE F REQUÊNCIA. Quando o raio de duas
near para decidir quanto de Duff regular e quanto de
antenas se interceptam, haverá interferências caso
Duff Forte comprar, para maximizar o lucro de Moe.
as antenas utilizem a mesma frequência. Estabeleça
Resolva o problema geometricamente.
frequências para a antenas de modo que não haja
interferência e que o número de frequências utiliza-
10.5 . A companhia de produtos caninos oferece duas co- das seja minimizada. A entrada do problema é um
midas para cachorro: Viralata’s e Ração do Sucesso, conjunto de frequências F = {1, 2, . . . , f } e um grafo
que são feitas de uma mistura de cereais e carne. G = (V, E ) em que o vértices representam as ante-
Um pacote de Viralata’s requer 1 quilo de cereal e 1, 5 nas e existe aresta entre dois vértices se as respecti-
quilo de carne, e é vendido por $7. Um pacote de vas antenas se interceptam. Modele o problema por
Ração do Sucesso usa 2 quilos de cereal e 1 quilo de Programação Linear Inteira.
carne, e é vendido por $6. O cereal bruto custa $1
por quilo e a carne bruta, $2 por quilo. Há também
o custo de $1, 40 para empacotar o Viralata’s e $0, 60 11. NP-completude
para o Ração do Sucesso. Um total de 240.000 qui-
los de cereal e 180.000 quilos de carne estão dispo- 11.1 . Responda cada um dos itens abaixo e dê uma justifi-
níveis a cada mês. O único gargalo de produção está cativa para as respostas.
no fato de a fábrica poder empacotar apenas 110.000
• O que significa dizer que um problema Π pode
pacotes de Viralata’s por mês. Desnecessário dizer, a
ser polinomialmente reduzido a um problema
gerência gostaria de maximizar o lucro.
Π0 ?
a) Formule o problema como um programa linear • Defina as classes P e N P e problema N P -
em duas variáveis. completo.

b) Desenhe a região factível, dê as coordenadas de • Se um problema Π pode ser polinomialmente


cada vértice, e circule o vértice que maximiza o reduzido a um problema Π0 e Π0 está em P en-
lucro. Qual o lucro máximo possível? tão Π está em P ?
• Se um problema Π pode ser polinomialmente
reduzido a um problema Π0 e Π0 é N P -
10.6 . Um produtor de filmes está procurando atores e in-
completo então Π0 é N P -completo?
vestidores para seu novo filme. Existem n atores dis-
poníveis; o ator i cobra s i dólares. Para financia- • Há problemas em N P que não são N P -
mento, existem m investidores disponíveis. O inves- completos?
tidor j dará p j reais, mas somente com a condição • P ∩ N P = ;?
de que certos atores L j ⊆ {1, 2, . . . , n} estejam incluí-
• Existem problemas N P -completos em P ?
dos no elenco (todos esses atores L j têm de ser esco-
lhidos para que seja recebido financiamento do in- 11.2 . Considere os problemas a seguir.
vestidor j ). O lucro do produtor é a soma dos pa-
P ROBLEMA PARTIÇÃO(A, n):
gamentos dos investidores menos o pagamento dos
Dado um vetor A[1, . . . , n] de números inteiros posi-
atores. O objetivo é maximizar este lucro. Expresse
tivos, decidir se existe um subconjunto I de {1, . . . , n}
este problema como um programa linear inteiro no
tal que
qual as variáveis tomam valores {0, 1}. X X
A[i ] = A[i ].
i ∈I i ∉I

10.7 . Mostre que o problema do troco (Exercício 9.7 ) pode P ROBLEMA T RI -PARTIÇÃO(A, n):
ser formulado como um programa linear inteiro. Mi- Dado um vetor A[1, . . . , n] de números inteiros posi-
nimize o número de moedas. tivos, decidir se existem subconjuntos disjuntos I e J
de {1, . . . , n} tais que c) Existe algoritmo polinomial para exatamente
X X X um desses problemas.
A[i ] = A[i ] = A[i ].
d) Existe algoritmo polinomial para ambos pro-
i ∈I i ∈J i ∉I ∪J
blemas.
Sabe-se que o P ROBLEMA PARTIÇÃO é N P -completo. Quais dessas afirmativas são verdadeiras ou falsas
Um aluno alega que o P ROBLEMA T RI -PARTIÇÃO com certeza? Se o problema P = N P for resolvido,
também é N P -completo. O aluno está certo? Jus- no que isso afeta a resposta à pergunta anterior?
tifique cuidadosamente a sua resposta.
11.9 . I SOMORFISMO DE S UBGRAFO: dados como entrada
11.3 . Busca versus decisão. Suponha que você tenha um dois grafos não-direcionados G e H , determine se G
procedimento que execute em tempo polinomial e é um subgrafo de H . Prove que o problema é N P -
que informe se um grafo tem ou não um caminho completo.
Hamiltoniano. Mostre que você pode usá-lo para de-
11.10 . S UBGRAFO D ENSO: dados um grafo G e dois inteiros
senvolver um algoritmo de tempo polinomial para
a e b, encontre um conjunto de a vértices de G tal
o P ROBLEMA DO C AMINHO H AMILTONIANO em sua
que exista pelo menos b arestas entre eles. Prove que
versão de busca (que retorna o caminho propria-
o problema é N P -completo.
mente, se ele existe).

11.4 . Otimização versus busca. Consulte o P ROBLEMA DO


C AIXEIRO -V IAJANTE: 12. Lidando com
PCV Entrada: Uma matriz de distâncias; um orça-
NP-Completude
mento b Saída: Um circuito que passe por todas as
cidades e que tenha comprimento ≤ b, se um tal cir-
12.1 . Apresente um algoritmo backtracking para o P RO -
cuito existir.
BLEMA DAS O ITO D AMAS .
A versão de otimização deste problema pergunta di-
retamente pelo menor circuito. PCV-OPT Entrada: 12.2 . Implemente um algoritmo backtracking para o P RO -
Uma matriz de distâncias Saída: O menor circuito BLEMA DO PASSEIO DO C AVALO , iniciando de uma das

que passe por todas as cidades. Mostre que se PCV quinas. Informe o tempo em segundos e apresente a
pode ser resolvido em tempo polinomial, então PCV- solução.
OPT também pode. 12.3 . Projete um algoritmo para o P ROBLEMA DO C AMI -
NHO H AMILTONIANO de um vértice fixo s.
11.5 . O P ROBLEMA DA Á RVORE G ERADORA COM R ESTRI -
ÇÃO DE G RAU é o seguinte. Entrada: Um grafo não- 12.4 . Escolha um problema e dê um exemplo de uma exe-
direcionado G(V, E ). cução de um algoritmo branch-and-bound sobre o
Saída: Uma árvore geradora de G na qual cada nó problema escolhido. Escolha um instância pequena.
tem grau ≤ k, se uma árvore desse tipo existe.
12.5 . Projete um algoritmo de branch-and-bound para o
Mostre que para todo k ≥ 2 o problema é N P -difícil. problema da C OBERTURA DE C ONJUNTO. Isso im-
plica decidir:
11.6 . Uma pipa é um grafo sobre um número par de vér-
tices, digamos 2n, nos quais n dos vértices formam a) O que é um subproblema?
uma clique e os restantes n vértices são conectados b) Como você escolhe um subproblema para ex-
em um “rabo” que consiste em um caminho inci- pandir?
dente a um dos vértices da clique. Dado um grafo
c) Como você expande um subproblema?
e um objetivo g , o P ROBLEMA DA P IPA pede que se
encontre um subgrafo que seja uma pipa e que con- d) O que é uma cota inferior apropriada?
tenha 2g nós. Prove que P IPA é N P -completo. 12.6 . Mostre que o algoritmo de busca local de 2-opt para
o TSP não é exato.
11.7 . No P ROBLEMA C ONJUNTO I NCIDENTE, é dada uma
família de conjuntos {S 1 , S 2 , . . . , S n } e um inteiro b, 12.7 . Mostre que o algoritmo de busca local de (n − 1)-opt
e desejamos encontrar um conjunto H de tamanho é exato. E calcule sua complexidade
≤ b que intercepte todos os S i , se um tal H existir.
12.8 . No problema da Á RVORE DE S TEINER M ÍNIMA, a en-
Em outras palavras, queremos H ∩ S i 6= ; para todo
trada consiste em: um grafo completo G = (V, E ) com
i . Mostre que Conjunto Incidente é NP-completo.
distâncias d uv entre todos os pares de nós; e um de-
11.8 . Considere esses dois problemas, em que é dado um terminado conjunto de vértices terminais V 0 ⊆ V . O
grafo G (com n vértices) e dois vértices s e t : objetivo é encontrar uma árvore de custo mínimo
que inclua os vértices V . Essa árvore pode ou não in-
(Π1 ) Determinar se existe um caminho de s a t que
cluir nós em V \V 0 . Sabe-se que este problema é N P -
passa por no máximo n/2 vértices.
difícil, proponha uma heurística construtiva para ge-
(Π2 ) Determinar se existe um caminho de s a t que
rar uma solução viável para o problema
passa por no mínimo n/2 vértices.
Considere as seguintes afirmativas: 12.9 . Projete uma meta-heurística para o P ROBLEMA DA k -
Á RVORE G ERADORA M ÍNIMA. A entrada do problema
a) Não existe algoritmo polinomial para nenhum consiste em um grafo com peso e um número posi-
desses problemas. tivo k. A saída é a árvore de custo mínimo com k
b) Existe algoritmo polinomial para pelo menos vértices e k − 1 arestas pertencentes ao grafo de en-
um desses problemas. trada.
12.10 . No problema do B IN PACKING, a entrada consiste 1: procedure A LGORITMO F IRST F IT(vetor s[1, . . . , n])
em: n itens com tamanhos s 1 , s 2 , . . . , s n em que s i ∈ 2: for i ← 1 → n do
[0, 1]. O objetivo é encontrar o menor número de 3: Coloque o item i no bin de menor índice que tenha espaço dis-
ponível ≥ s i
“bins” (caixas) unitárias para armazenar os n itens.
4: end for
O algoritmo First Fit consiste em: 5: end procedure

Mostre que o algoritmo é 2-aproximado. Dica: O FF


não deixa, ao final, dois bins com espaço utilizado
≤ 0,5.

Você também pode gostar