Você está na página 1de 8

9 Editado em 23 de novembro de 2023 :

U NIVERSIDADE F EDERAL DE A LAGOAS


I NSTITUTO DE C OMPUTAÇÃO

Projeto e Análise de Algoritmos


Lista de Exercícios

Prof. Rian Gabriel Pinheiro

2023.2

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 entrega corresponde a 2 seções (20 questões) do trabalho.
(e) Qualquer modificação das duplas deve ser informada.
(f ) As resoluções devem ser entregues escritas à mão (com exceção questões que pedem explicitamente uma
implementação ou gráficos) nos dias de prova.
(g) Qualquer tentativa de fraude implicará em nota zero na parte correspondente.
(h) Cada questão correta irá incrementar 0,10 ponto na respectiva prova.
Parte I.
1ª VA
1. Corretude de Algoritmos 3 . -
4 . ---
1.1 . Faça uma pesquisa (escreva pelo menos 10 lin- 5 . -
has) sobre al-Khorezmi (também al-Khwarizmi), o 6 . --
homem de cujo nome deriva a palavra “algoritmo”. 7 . -
Mostre o que as origens das palavras “algoritmo” e 8 . ----
“álgebra” têm em comum. 9 . -
10 . --
1.2 . Prove que:
11 . -
• n 3 + 2n é divisível por 3 para todo n ≥ 0, por in- 12 . ---
dução. 13 . -
• Se 2 | 3m (2 divide 3m) então 2 | m, por contra- 14 . --
posição. 15 . -
16 .
• A soma de 3 números consecutivos é múltiplo
de 3, use prova direta.
1.7 . Prove a corretude do algoritmo Conversor Decimal-
1.3 . Considere um hexágono regular cujos vértices são Binário.
v 1 , v 2 , . . . , v 6 . Mostre que toda maneira de colorir
os segmentos de retas que unem dois vértices, uti-
1: procedure C ONVERSOR D-B(inteiro n)
lizando as cores azul ou branca, produz pelo menos 2: t ←n
um triângulo cujos lados tem a mesma cor. 3: k ←0
4: zere todos os bits de b
1.4 . Considere o seguinte algoritmo: 5: while t > 0 do
6: k ← k +1
7: b[k] ← t mod 2
1: procedure A LGORITMO X(vetor A[1, . . . , n], inicio, fim) 8: t ← t ÷2
2: if inicio = last then Cria um vetor X, se início for igual o fim 9: end while
3: return A[inicio] então retorna o valor do início 10: return b
4: end if 11: end procedure
5: meio ← inicio + (fim − incio)/2 Se não então dividimos a
6: a ← X(A, inicio, meio) lista em dois a e b
7: b ← X(A, meio +1, fim)
8: if a < b then Então encontramos qual lado é maior a ou b 1.8 . O P ROBLEMA DA M OCHILA é definido da seguinte
9: return b forma: Suponha que tenha uma mochila com ca-
10: else
Portanto temos um algoritmo de divisão e pacidade total de W e n itens distintos, cada um com
11: return a
conquista que encontra o máximo em um um respectivo peso w 1 , . . . , w n e valor v 1 , . . . , v n . O
12: end if
vetor
13: end procedure objetivo do problema consiste em maximizar o valor
dos objetos colocados na mochila, respeitando sua
capacidade total W .
Explique o que ele faz e prove sua corretude.
Dado os três algoritmos a seguir, mostre que eles não
1.5 . Prove a corretude do algoritmo de Horner para a encontram a solução ótima do problema, ou seja,
avaliação de polinômios. P (x) = a n x n + a n−1 x n−1 + encontre contraexemplos para cada um dos seguinte
· · · + a1 x + a0 . algoritmos para o problema.
• Coloque na mochila os elementos em ordem da
1: procedure A LGORITMO DE H ORNER(vetor A[0, . . . , n], real x) esquerda para a direita, se eles couberem;
2: p ← A[n]
3: for i ← n − 1 → 0 do • Considerando a razão valor por peso, ou seja,
4: p ← p ∗ x + A[i ] r i = v i /w i , coloque na mochila os algoritmos
5: end for
6: return p
de maior para menor razão;
7: end procedure
• Coloque na mochila os algoritmos de maior
para menor valor;
1.6 . Escreva uma função recursiva que imprima uma • Coloque na mochila os algoritmos de menor
régua de ordem n no intervalo [0..2n ] e prove sua para maior peso.
corretude. O “traço” no ponto médio da régua deve
ter comprimento n, os traços nos pontos médios dos 1.9 . O B IN PACKING é um problema cuja entrada con-
subintervalos superior e inferior devem ter compri- siste em: n itens com tamanhos s 1 , s 2 , . . . , s n em que
mento n − 1, e assim por diante. Abaixo um exemplo s i ∈ [0, 1]. O objetivo é encontrar o menor número de
de régua de ordem 4. “bins” (caixas) unitárias para armazenar os n itens.
Dado os algoritmos a seguir, mostre que eles não en-
0 . contram a solução ótima do problema, ou seja, en-
1 . - contre contraexemplos para cada um dos seguinte
2 . -- algoritmos para o problema.
• Coloque na bins os elementos em ordem da es-
querda para a direita, se ele couber, caso con-
f (n) g (n)
trário tente na próxima bin;
(1) n − 10 n − 200
1/2
• Coloque na bin mais livre o maior elemento; (2) n n 2/3
(3) 100n + log n n + (log n)2
• Coloque o menor elemento na bin mais livre. (4) log 2n log 3n
(5) 10 log n log(n 2 )
(6) n 1,01 n log2 n
1.10 . Considere o algoritmo de Ulam, ele termina? De fato, (7) n 2 / log n n(log n)2
conjectura-se que seguindo o algoritmo, sempre será
(8) n 0,1 (log n)10
obtida a sequencia 4, 2, 1 (Conjectura de Collatz). Ex:
Para o valor a = 22, será obtida a seguinte sequencia: (9) (log n)log n n/ log n
p
22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. Como (10) n (log n)3
a prova do término do algoritmo consiste em um
difícil problema matemático em aberto. Imple- (11) n 1/2 5log2 n
mente um teste exaustivo mostrando que para qual- (12) n2n 3n
quer unsigned shot int (1 a 65535) de entrada o (13) 2n 2n+1
algoritmo para. Escreva um pequeno relato infor-
(14) n! 2n
mando o tamanho da maior sequência encontrada,
2
o valor na qual a maior sequência foi obtida, a mé- (15) (log n)log n 2(log2 n)
dia dos tamanhos das sequências e o tempo de exe- n
ik n k+1
X
cução. (16)
i =1

2.3 . Encontre o número de maneiras diferentes de subir


1: procedure A LGORITMO DE U LAM(inteiro positivo a) uma escada com n degraus se cada passo pode ter
2: x←a um ou dois degraus. Por exemplo, uma escada de
3: while Os três últimos valores de x não for 4, 2, 1 do três degraus pode ser escalada de três maneiras: 1–
4: if x for par then
5: x ← x/2
1–1, 1–2 e 2–1.
6: else
7: x ← 3x + 1
2.4 . Na linguagem de sua escolha, implemente dois al-
8: end if goritmos para calcular o enésimo número de Fi-
9: end while bonacci: (a) o algoritmo baseado na definição recur-
10: end procedure siva e (b) o algoritmo iterativo. Plote um gráfico com
o tempo de ambos os algoritmos para cada valor de
n = 1, . . . , n max . Em que n max é o maior valor de n
para o qual ambos programas executam em menos
de 1 minuto em seu computador.

2.5 . Resolva a recorrência:


2. Complexidade de
(
2, se n = 2
T (n) =
Algoritmos 2T (n/2) + n, se n = 2k , para k > 1.

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


que a 0 = 1.
2.1 . Qual a provável complexidade de um algoritmo que
2.7 . Considere o seguinte trecho de código:
possui as seguintes observações empíricas da con-
tagem de sua operação básica:
size count 1: procedure C ONT(inteiro positivo n)
2: c ←0
1000 11.966 3: for l ∈ [1, n] do
2000 24.303 4: for i ∈ [1, n − l ] do
3000 39.992 5: for k ∈ [1, i + l ] do
4000 53.010 6: c ← c +1
7: end for
5000 67.272 8: end for
6000 78.692 9: end for
7000 91.274 10: return c
11: end procedure
8000 113.063
9000 129.799
10000 140.538 Dado um valor n, qual será o valor da variável c?
Mostre as contas.

2.8 . Sejam f (n) e g (n) funções assintoticamente não


2.2 . Em cada caso, indique se f (n) = O(g (n)) ou f (n) = negativas. Usando a definição básica da notação Θ,
Ω(g (n)), ou ambos (neste caso f (n) = Θ(g (n))): prove que max( f (n), g (n)) = Θ( f (n) + g (n)).
2.9 . Mostre que • Algoritmo C soluciona problemas de tamanho
n dividindo-os em nove subproblemas de
a) A solução de T (n) = T (n − 1) + n; T (1) = 1 é
tamanho n/3, resolvendo recursivamente cada
O(n 2 ).
subproblema e, então, combinando as re-
b) A solução de T (n) = T (⌈n/2⌉) + 1; T (1) = 1 é spostas em tempo O(n 2 ) .
O(lg n).
Qual o tempo de execução de cada um desses algo-
c) A solução de 2T (⌊n/2⌋) + n; T (1) = 1 é O(n lg n). ritmos (em notação O) e qual você escolheria?

2.10 . Qual é o tempo de execução do algoritmo QUICK - 3.7 . Dado A[1, . . . , n], um vetor ordenado de inteiros dis-
SORT quando todos os elementos do arranjo A têm tintos, você quer saber se existe um índice i para
o mesmo valor? Considere que o pivô é o último ele- o qual A[i ] = i . Dê um algoritmo de divisão-e-
mento do vetor. conquista que execute em tempo O(log n).

3.8 . Mostre que qualquer vetor de inteiros x[1 . . . n] pode


ser ordenado em tempo O(n + M ), onde
3. Divisão e Conquista M = max x i − min x i .
i i

3.1 . Explique a relação da técnica Divisão-e-Conquista


3.9 . Dado um vetor A com n entradas, com cada entrada
com paralelismo. Como utilizar o paralelismo em
um número distinto. Sabe-se que a sequência de val-
um algoritmo divisão-e-conquista? Por que elas fun-
ores A[1], A[2], . . . , A[n] é unimodal: ou seja, existe
cionam bem em conjunto?
índice p entre 1 e n, os valores nas entradas do vetor
3.2 . Existem n panquecas, todas de tamanhos diferentes, aumentam até a posição p e, em seguida, reduzem,
empilhadas umas sobre as outras. Você pode colo- o resto do caminho, até que a posição n. Deseja-se
car uma espátula sob uma das panquecas e virar a encontrar o “ponto de máximo” p. Mostre como en-
pilha inteira acima da espátula. O objetivo é arran- contrar p através de um algoritmo O(log n).
jar as panquecas de acordo com o tamanho, com a 3.10 . Mostre como remover todos os elementos duplica-
maior na parte inferior. A Figura mostra uma in- dos de um vetor em O(n log n). Você pode modificar
stância do quebra-cabeça para n = 7. Projete um al- um algoritmo de ordenação, mas não pode ordenar
goritmo para resolver este problema e determine o e depois remover.
número de operações feitas pelo algoritmo no pior
caso.
4. Algoritmos Gulosos
4.1 . As sentenças seguintes podem ou não estar corretas.
Em cada caso, prove a sentença (se ela for correta)
ou forneça um contraexemplo (se não for correta).
Sempre considere o grafo G = (V, E ) não-direcionado
3.3 . Suponha que você tenha os resultados de um torneio e conexo. Não considere que os pesos nas arestas se-
concluído no qual n equipes jogaram entre si uma jam distintos, a menos que isso seja explicitamente
vez. Assumindo que não houve empate, mostre um afirmado.
algoritmo que liste os times em uma sequência de
a) Se um grafo G tem mais do que |V | − 1 arestas
forma que todos ganhem o jogo com o time listado
e existe uma única aresta de maior peso, então
imediatamente após?
esta aresta não pode ser parte da árvore ger-
adora mínima.
3.4 . Escreva um algoritmo de divisão-e-conquista
O(log n) para computar a n em que n é um inteiro b) Se G tem um ciclo com uma aresta de maior
positivo. peso única e, então e não pode ser parte de
nenhuma AGM.
3.5 . São dadas duas listas ordenadas de tamanho m e c) Seja e qualquer aresta de peso mínimo em G.
n. Dê um algoritmo de tempo O(log m + log n) para Então e tem de ser parte de alguma AGM.
computar o k-ésimo menor elemento da união das
d) Se a aresta de menor peso em um grafo é única,
duas listas.
então ela tem de ser parte da todas as AGMs.
3.6 . Suponha que esteja escolhendo entre os seguintes e) Se e é parte de alguma AGM de G, então ela tem
três algoritmos: de ser a aresta de menor peso através de algum
corte de G.
• Algoritmo A resolve problemas dividindo-
os em cinco subproblemas de metade do f) Se G tem um ciclo com uma aresta mais leve
tamanho, solucionando cada subproblema única e, então e tem de ser parte de todas as
recursivamente e, então, combinando as AGM.
soluções em tempo linear. g) A árvore de caminhos mínimos computada
• Algoritmo B resolve problemas de tamanho n pelo algoritmo de Dijkstra é necessariamente
resolvendo recursivamente dois subproblemas uma AGM.
de tamanho n − 1 e, então, combinando as h) O caminho mínimo entre dois nós é necessari-
soluções em tempo constante. amente parte de alguma AGM.
i) O algoritmo de Prim funciona corretamente i . Portanto se, por exemplo, os usuários são servidos
quando existem arestas negativas. em ordem crescente de i , então o i -ésimo usuário
tem de esperar a ij =1 t j minutos. Queremos mini-
P
j) (Para qualquer r > 0, defina um r -caminho
cujas arestas tenham todas peso < r .) Se G mizar o tempo total de espera
contém um r -caminho do nó s até t , então n
X
toda AGM de G tem de conter também um r - T= (tempo gasto pelo usuário i na espera).
n=1
caminho do nó s até o nó t .

4.2 . Considere um grafo não-direcionado G = (V, E ) com Forneça um algoritmo eficiente para computar a or-
pesos de aresta não-negativos w e ≥ 0. Suponha que dem ótima na qual processar os usuários.
você computou uma árvore geradora mínima de G e 4.8 . Um conjunto feedback de arestas de um grafo não-
que também computou os caminhos mínimos para direcionado G = (V, E ) é um subconjunto de arestas
todos os nós partindo de um particular nó s ∈ V . E ′ ⊆ E que intercepta todos os ciclos do grafo. As-
Agora suponha que cada peso de aresta seja aumen- sim, remover as arestas E ′ tornará o grafo acíclico.
tado em uma unidade: os novos pesos são w e′ = Forneça um algoritmo eficiente para o seguinte
w e + 1. problema:
a) Será que a árvore geradora mínima muda? Dê Entrada: Grafo não-direcionado G = (V, E ) com pe-
um exemplo para o qual ela muda ou prove que sos de aresta positivos w e .
ela não pode mudar. Saída: Um conjunto feedback de arestas definida
E ′ ⊆ E de peso total mínimo e∈E ′ w e .
P
b) Será que os caminhos mínimos mudam? Dê
um exemplo para o qual eles mudam ou prove 4.9 . Forneça um algoritmo de tempo linear que tome
que isso não pode ocorrer. como entrada uma árvore e determine se ela tem um
4.3 . Seja G uma grafo não-direcionado. Prove que se to- emparelhamento perfeito: um conjunto de arestas
das as arestas são distintas, então ele tem uma única que tocam cada vértice exatamente uma vez.
árvore geradora mínima. 4.10 . Prove que o problema da mochila pode ser resolvido
em tempo polinomial por um algoritmo guloso, se o
4.4 . Considere o problema de agendamento de inter-
peso w i de cada item i for unitário.
valos. Nós temos um conjunto de atividades
{1, 2, . . . , n}; cada atividade i possui um intervalo de
tempo a partir de s i e termina em f i . Um agen-
damento — conjunto de atividades — é dito com-
patível, se nenhuma atividade se sobrepõem no
Parte II.
tempo. O objetivo é determinar um agendamento
compatível com o maior número possível de ativi- 2ª VA
dades. Projete uma algoritmo para este problema.

4.5 . Este é um problema que ocorre em análise au- 5. Programação Dinâmica


tomática de programas. Para um conjunto de var-
iáveis x 1 , . . . , x n , são dadas algumas restrições de 5.1 . Inteiros positivos são arranjados em um triângulo
igualdade, da forma “x i = x j ” e algumas restrições equilátero com n números em sua base, como o
de desigualdade, da forma “x i ̸= x j ”. Será que é pos- mostrado na figura abaixo para n = 4. O problema
sível satisfazer todas elas? Por exemplo, as restrições é encontrar a menor soma em uma descida do ápice
do triângulo até sua base por meio de uma sequên-
x 1 = x 2 , x 2 = x 3 , x 3 = x 4 , x 1 ̸= x 4 ,
cia de números adjacentes (mostrados na figura pe-
los círculos). Projete um algoritmo de programação
não podem ser satisfeitas. Forneça um algoritmo efi-
dinâmico para este problema.
ciente que tome como entrada m restrições sobre n
variáveis e decida se as restrições podem ser satis-
feitas.

4.6 . Alice quer dar uma festa e está decidindo quem


chamar. Ela tem n pessoas as quais escolher, e ela fez
uma lista de quais pares dessas pessoas conhecem
uma a outra. Ela quer selecionar o maior número de
pessoas possível, sujeito a duas restrições: na festa, 5.2 . Algumas moedas são espalhadas nas células de um
cada pessoa deve ter pelo menos outras cinco pes- tabuleiro n × m, uma moeda por célula. Um robô,
soas que ela conhece e outras cinco pessoas que ela localizado na célula superior esquerda do tabuleiro,
não conhece. Forneça um algoritmo eficiente que precisa coletar o máximo de moedas possível e trazê-
tome como entrada a lista das n pessoas e a lista de las para a célula inferior direita. Em cada etapa, o
pares de quem conhece quem e calcule a melhor es- robô pode mover uma célula para a direita ou uma
colha de convidados para a festa. Dê o tempo de ex- célula para baixo de sua localização atual. Quando
ecução em termos de n. o robô visita uma célula com uma moeda, ele pega
a moeda. Elabore um algoritmo para encontrar o
4.7 . Um servidor tem n usuários esperando para serem número máximo de moedas que o robô pode cole-
servidos. O tempo de serviço requerido por usuário é tar e um caminho que ele precisa seguir para fazer
conhecido previamente: é t i minutos para o usuário isso.
5.3 . Apresente o pseudocódigo do algoritmo de Floyd- 5.10 . Mostre uma algoritmo de programação dinâmica
Warshall para o problema dos caminhos mínimos para o problema do C AMINHO MÁXIMO entre dois
entre todos os pares de vértices. Apresente a recor- vértices s e t (caminho simples). Qual a complexi-
rência para o cálculo da distância. dade do algoritmo (tempo e memória)?

5.4 . Projete um algoritmo eficiente para encontrar o


comprimento do caminho mais longo em um DAG.
(Este problema é importante como um protótipo de 6. Transformação de
muitos outros aplicativos de programação dinâmica, problemas
pois determina o tempo mínimo necessário para
concluir um projeto que compreende tarefas de pre-
6.1 . Maria aposta com João que ela pode fazer o seguinte
cedência restrita.)
truque. João recitará n − 1 números diferentes de
5.5 . Uma subsequência contígua de uma lista S é uma 1 a n em uma ordem aleatória e ela será capaz de
subsequência feita de elementos consecutivos de S. nomear o único número nesse intervalo que ele terá
Por exemplo, se S é perdido. Claro, ela terá que realizar a tarefa em sua
cabeça, sem fazer anotações. Como ela deve fazer
5, 15, −30, 10, −5, 40, 10, esse truque? Em outras palavras, projete um al-
goritmo que descubra o número faltante utilizando
então 15, −30, 10 é uma subsequência contígua, mas O(1) de espaço em memória.
5, 15, 40 não é. Forneça um algoritmo de tempo lin-
ear para a seguinte tarefa: 6.2 . O Rei Arthur espera n cavaleiros para um jantar
Entrada: Uma lista de números a 1 , a 2 , . . . , a n . anual em Camelot. Infelizmente, alguns dos cav-
Saída: A subsequência contígua de soma máxima (a aleiros brigam entre si, e Arthur sabe quem briga
subsequência de tamanho zero tem soma zero). Para com quem. Arthur quer sentar seus convidados ao
o exemplo anterior, a resposta seria 10, −5, 40, 10, redor de uma mesa para que dois cavaleiros briguen-
com uma soma de 55. (Dica: Para cada j ∈ {1, 2, . . . , n} tos não se sentem próximos um do outro. Qual prob-
considere subsequências contíguas terminando ex- lema pode ser usado para modelar a tarefa do Rei
atamente na posição j .) Arthur?

5.6 . Dadas duas strings x = x 1 x 2 · · · x n e y = y 1 y 2 · · · y m , 6.3 . Várias famílias saem para jantar juntas. Para aumen-
desejamos encontrar o comprimento da maior sub- tar sua interação social, eles gostariam de sentar-se à
string comum delas, isto é, o maior k para o mesa, de modo que dois membros da mesma família
qual existem índices i e j com x i x i +1 · · · x i +k−1 = não estivessem na mesma mesa. Mostre como en-
y j y j +1 · · · y j +k−1 . Mostre como fazer isso em tempo contrar uma disposição dos assentos que atenda a
O(mn) esse objetivo (ou prove que não existe tal disposição)
usando o problema de fluxo máximo. Suponha que
5.7 . Uma cobertura de vértices de um grafo G = (V, E )
o jantar tenha p famílias e que a i -ésima família
é um subconjunto de vértices S ⊆ V que inclui
tenha a i os membros. Suponha que q mesas são
ao menos uma extremidade de cada aresta de
disponíveis e que a meja j -ésima mesa possui ca-
E . Forneça um algoritmo de tempo linear para a
pacidade b j .
seguinte tarefa.
Entrada: Uma árvore não-direcionada T = (V, E ) . 6.4 . O problema da coloração em grafos é geralmente
Saída: O tamanho da menor cobertura de vértices de declarado como o problema da coloração do vér-
T. tice: atribua o menor número de cores aos vértices
Por exemplo, na árvore abaixo, as possíveis de um dado grafo de forma que não haja dois vér-
coberturas de vértice incluem {A, B,C , D, E , F,G} e tices adjacentes da mesma cor. Considere agora o
{A,C , D, F }, mas não {C , E , F }. A menor cobertura de problema da coloração das arestas: atribua o menor
vértice tem tamanho 3: {B, E ,G}. número possível de cores às arestas de um determi-
nado grafo, de modo que duas arestas com o mesmo
A D vértices não tenham a mesma cor. Explique como o
problema de coloração de arestas pode ser reduzido
B E G
a um problema de coloração de vértices.
C F
6.5 . Considere o seguinte problema de programação lin-
ear.
5.8 . Forneça um algoritmo de programação dinâmica
(note que será pseudo-polinomial) para o problema
max 5x + 3y
S UBSET S UM.
Entrada: Um conjunto A com valores inteiros posi- s.a 5x + 2y ≥ 0
tivos, e um inteiro t . x+y ≤7
Questão: Existe um subconjunto A ′ ⊆ A cuja soma x ≤5
dos valores seja exatamente t ?
x ≥0
5.9 . Dado um DAG G(V, E ) e dois vértices s, t ∈ V , projete y ≥0
um algoritmo de programação dinâmica que encon-
tre a quantidade de caminhos simples distintos entre Desenhe a região factível e identifique a solução
s e t. ótima.
6.6 . A companhia de produtos caninos oferece duas co- 7.4 . Considere o seguinte algoritmo força bruta para re-
midas para cachorro: Viralata’s e Ração do Sucesso, solver o problema do número C OMPOSTO: Verifique
que são feitas de uma mistura de cereais e carne. inteiros sucessivos de 2 a ⌊n/2⌋ como possíveis di-
Um pacote de Viralata’s requer 1 quilo de cereal e 1, 5 visores de n. Se um deles divide n , retorna SIM (ou
quilo de carne, e é vendido por $7. Um pacote de seja, o número é composto); se nenhum deles o fizer,
Ração do Sucesso usa 2 quilos de cereal e 1 quilo de retorne NÃO. Por que esse algoritmo não coloca o
carne, e é vendido por $6. O cereal bruto custa $1 problema na classe P ?
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 7.5 . Considere os problemas a seguir. P ROBLEMA PAR-
para o Ração do Sucesso. Um total de 240.000 quilos TIÇÃO (A, n):
de cereal e 180.000 quilos de carne estão disponíveis Dado um vetor A[1, . . . , n] de números inteiros posi-
a cada mês. O único gargalo de produção está no tivos, decidir se existe um subconjunto I de {1, . . . , n}
fato de a fábrica poder empacotar apenas 110.000 tal que
pacotes de Viralata’s por mês. Desnecessário dizer, X X
A[i ] = A[i ].
a gerência gostaria de maximizar o lucro. i ∈I i ∉I
a) Formule o problema como um programa linear
P ROBLEMA T RI -PARTIÇÃO(A, n):
em duas variáveis.
Dado um vetor A[1, . . . , n] de números inteiros posi-
b) Desenhe a região factível, dê as coordenadas de tivos, decidir se existem subconjuntos disjuntos I e J
cada vértice, e circule o vértice que maximiza o de {1, . . . , n} tais que
lucro. Qual o lucro máximo possível?
X X X
6.7 . O problema das 8 D AMAS consistem em colocar 8 A[i ] = A[i ] = A[i ].
i ∈I i ∈J i ∉I ∪J
damas em um tabuleiro de xadrez. Modele este
problema utilizando Programação por Restrição. Sabe-se que o P ROBLEMA PARTIÇÃO é N P -completo.
6.8 . Leia o artigo da wikipedia sobre o puzzle Kakuro Um aluno alega que o P ROBLEMA T RI -PARTIÇÃO
https://en.wikipedia.org/wiki/Kakuro e também é N P -completo. O aluno está certo? Jus-
modele exemplo dado utilizando Programação por tifique cuidadosamente a sua resposta.
Restrição.
7.6 . Busca versus decisão. Suponha que você tenha um
6.9 . Modele o problema da M OCHILA utilizando progra- procedimento que execute em tempo polinomial e
mação linear inteira. que informe se um grafo tem ou não um caminho
Hamiltoniano. Mostre que você pode usá-lo para de-
6.10 . Modelo o problema da C LIQUE M ÁXIMA utilizando
senvolver um algoritmo de tempo polinomial para
programação linear inteira.
o P ROBLEMA DO C AMINHO H AMILTONIANO em sua
versão de busca (que retorna o caminho propria-
mente, se ele existe).
7. NP-completude
7.7 . O P ROBLEMA DA Á RVORE G ERADORA COM R ESTRIÇÃO
7.1 . Responda cada um dos itens abaixo e dê uma justi-
DE G RAU é o seguinte. Entrada: Um grafo não-
ficativa para as respostas.
direcionado G(V, E ).
• O que significa dizer que um problema Π pode Saída: Uma árvore geradora de G na qual cada nó
ser polinomialmente reduzido a um problema tem grau ≤ k, se uma árvore desse tipo existe.
Π′ ?
Mostre que para todo k ≥ 2 o problema é N P -difícil.
• Defina as classes P , N P e problema N P -
completo.
7.8 . Uma pipa é um grafo sobre um número par de vér-
• P ∩ N P = ;? tices, digamos 2n, nos quais n dos vértices formam
7.2 . Responda cada um dos itens abaixo e dê uma justi- uma clique e os restantes n vértices são conectados
ficativa para as respostas. em um “rabo” que consiste em um caminho inci-
dente a um dos vértices da clique. Dado um grafo
• Se um problema Π pode ser polinomialmente e um objetivo g , o P ROBLEMA DA P IPA pede que se
reduzido a um problema Π′ e Π′ está em P en- encontre um subgrafo que seja uma pipa e que con-
tão Π está em P ? tenha 2g nós. Prove que P IPA é N P -completo.
• Se um problema Π pode ser polinomialmente
reduzido a um problema Π′ e Π′ é N P - 7.9 . No P ROBLEMA C ONJUNTO I NCIDENTE, é dada uma
completo então Π é N P -completo? família de conjuntos {S 1 , S 2 , . . . , S n } e um inteiro b,
• Há problemas em N P que não são N P - e desejamos encontrar um conjunto H de tamanho
completos? ≤ b que intercepte todos os S i , se um tal H existir.
Em outras palavras, queremos H ∩ S i ̸= ; para todo
• Existem problemas N P -completos em P ?
i . Mostre que Conjunto Incidente é NP-completo.
7.3 . Encontre 5 problemas N P -completos não estuda-
dos na disciplina (aula e lista). Para cada um de- 7.10 . S UBGRAFO D ENSO: dados um grafo G e dois inteiros
les, descreva-o formalmente (entrada e questão) e a e b, encontre um conjunto de a vértices de G tal
apresente uma ilustração de uma instância e uma que exista pelo menos b arestas entre eles. Prove que
solução. o problema é N P -completo.
8. Lidando com que inclua os vértices V . Essa árvore pode ou não
incluir nós em V \ V ′ . Sabe-se que este problema
NP-Completude é N P -difícil, proponha uma heurística construtiva
para gerar uma solução viável para o problema (note
8.1 . Um quadrado mágico de ordem 3 é uma tabela 3 × 3 que a solução pode não ser ótima).
preenchida com nove números inteiros distintos de
1 a 9, de modo que a soma dos números em cada 8.7 . Apresente o algoritmo de busca local 2-opt para o
linha, coluna e duas diagonais de ponta a ponta seja TSP, dê um exemplo de execução e mostre que ele
a mesma. Implemente um algoritmo backtracking e não é exato.
encontre todos os quadrados mágicos de ordem 3.
8.8 . Escolha um problema de otimização N P -difícil e ap-
8.2 . Implemente um algoritmo backtracking para o resente um estrutura de vizinhança para tal prob-
P ROBLEMA DO PASSEIO DO C AVALO, iniciando de lema.
uma das quinas. Informe o tempo em segundos e
apresente a solução. 8.9 . Escolha 5 meta-heurístias do livro “Handbook
of Metaheuristics” (https://www.springer.com/
8.3 . Projete um algoritmo para o P ROBLEMA DO C AM - gp/book/9783319910857, cada capítulo fala de
INHO H AMILTONIANO de um vértice fixo s. uma meta-heurística). Para cada uma das 5, de-
screva o algoritmo e explique quais os mecanismos
8.4 . Escolha um problema de otimização e dê um exem-
de intensificação e diversificação da busca.
plo de uma execução de um algoritmo branch-and-
bound sobre o problema escolhido. Escolha um in- 8.10 . No problema do B IN PACKING, a entrada consiste
stância pequena. Isso implica decidir: em: n itens com tamanhos s 1 , s 2 , . . . , s n em que s i ∈
a) Como calcular um limitante para o problema? [0, 1]. O objetivo é encontrar o menor número de
“bins” (caixas) unitárias para armazenar os n itens.
b) Como você expandir um nó em subproblemas?
O algoritmo First Fit consiste em:
c) Qual subproblema escolher?

8.5 . De forma similar à questão anterior (responda 1: procedure A LGORITMO F IRST F IT(vetor s[1, . . . , n])
2: for i ← 1 → n do
as perguntas!), projete um algoritmo branch-and-
3: Coloque o item i no bin de menor índice que tenha espaço
bound para o problema da C OBERTURA DE C ON - disponível ≥ s i
JUNTO . 4: end for
5: end procedure
8.6 . No problema da Á RVORE DE S TEINER M ÍNIMA, a en-
trada consiste em: um grafo completo G = (V, E ) com
distâncias d uv entre todos os pares de nós; e um de- Mostre que o algoritmo é 2-aproximado. Dica: O FF
terminado conjunto de vértices terminais V ′ ⊆ V . O não deixa, ao final, dois bins com espaço utilizado
objetivo é encontrar uma árvore de custo mínimo ≤ 0,5.

Você também pode gostar