PUC-Rio
Departamento de Informática
Prof. Marcus Vinicius S. Poggi de Aragão
Período: 2009.2
1 de dezembro de 2009
Horário: 2as-feiras e 4as-feiras de 15 às 17 horas
ANÁLISE DE ALGORITMOS (INF 1721)
3a Lista de Exercícios
-
Exercícios Livro Algorithms, Dasgupta, Papadimitriou e Vazirani.
-
Cap. 5: 5.13, 5.14, 5.15;
- Cap. 6: 6.2, 6.3, 6.4, 6.13, 6.17, 6.19.
- Considere a multiplicação de n matrizes A1, ..., An.
Considere também que denota-se o produto das matrizes Ak.Ak+1..... Aq por Ak..q e que as dimensões das matrizes são dadas por dk × dk+1 para a matriz Ak. Assim, A1..n terá dimensão d1 × dn+1.
Aqui a multiplicação de pares consecutivos de matrizes
Ak.Ak+1 é feita calculando
| ai,jk..k+1 = |
|
ai,pk.ap,jk+1
|
para todo par
(i,j) que é elemento de Ak.Ak+1 e onde ai,jk representa o
elemento (i,j) da matriz Ak.
Observe que a multiplicação de 3 matrizes A1, A2 e A3, pode ser feita
de duas manieras: ((A1.A2). A3) e (A1.(A2.A3)). (De quantas maneiras
pode-se obter o produto de n matrizes ?)
Observe também que para cada maneira de se multiplicar n matrizes pode-se
ter que realizar um número diferente de multiplicações. Quantas são ?
Apresente um algoritmo para determinar a maneira de se multiplicar as n
matrizes que utiliza o menor número de multiplicações.
Analise a complexidade do algoritmo proposto. A complexidade é polinomial ?
Qual a complexidade menor possível que um algoritmo que resolve este
problema pode ter ?
- Um comerciante possui um armazém que utiliza para suprir seus clientes de um único produto. O seu armazém pode guardar até C unidades do produto. Para as próximas T semanas o comerciante TEM que atender às demandas dos seus clientes que somam dt para a semana t, onde t=1,2,...,T. Além disso, ele possui s0(£ C) unidades em estoque antes do início da primeira semana, e já negociou com os fornecedores os preços unitários pt (t=1,2,...,T). Ele deseja planejar o atendimento dos seus clientes de modo a gastar o mínimo possível com a compra do produto.
Ajude ao comerciante a definir a sua estratégia ótima de compra do produto
nas semanas t=1,..., T.
-
Apresente o algoritmo que obtém a estratégia de compra de menor custo e atende às demandas dos seus clientes.
- Analise a complexidade do algoritmo proposto. A complexidade é polinomial ?
Qual a complexidade menor possível que um algoritmo que resolve este
problema pode ter ?
- Execute o seu algoritmo sobre a seguinte instância: C=12, T=5,s0 = 3, d1 = 7, d2 = 4, d3 = 15, d4 = 10, d5 = 7 e
p1 = 3, p2 = 4, p3 = 7, p4 = 6, p5 = 8. Informe quanto o comerciante deve comprar em cada semana e o seu custo total.
- Considere um tabuleiro de xadrez e um rei que está inicialmente na posição (1,1) (as posições do tabuleiro são representadas por (i,j) onde
1 £ i £ 8 e 1 £ j £ 8). Para cada posição do tabuleiro estão associados um prêmio pij e um consumo qij (o prêmio pode ser em USD(!!) e o consumo em litros de gasolina, por exemplo). Os prêmios e os consumos assumem somente valores positivos. O rei tem inicialmente
Q unidades para consumir e pode passar quantas vezes quiser em cada posição do tabuleiro e a cada vez receber o prêmio e, naturalmente, consumir os seus recursos. Ao final (do passeio) o rei tem que estar de volta na posição (1,1).
-
Proponha um algoritmo para determinar o caminho que o rei deve fazer para obter o maior total possível em prêmios.
(Dica: Suponha que você conhece a solução que obtém o maior total em prêmios dado que o rei está em cada uma das posições do tabuleiro e para cada consumo possível.
Escreva agora o teorema do passo indutivo reforçando a hipótese indutiva. A prova por indução matemática (simples) de que você sabe resolver o problema do rei leva ao algoritmo).
- Analise a complexidade do algoritmo proposto. A complexidade é polinomial ?
Qual a complexidade menor possível que um algoritmo que resolve este
problema pode ter ? Qual a complexidade deste problema ?
- Suponha que Q = 7 e que qij = 1 e
pij = 2*i + 3*j para todo (i,j). Determine o caminho em que o rei acumula o maior total possível de prêmios. Repita o cálculo modificando apenas
p22 = 100 e mantendo os demais valores.
- Sejam T = { t1, ..., tn } e P = { p1, ..., pk } duas sequências de caracteres on k £ n.
-
Proponha um algoritmo linear para determinar se P é uma subsequência de T, isto é, se os elementos de P aparecem em T na mesma ordem que em
P, mas não necessariamente consecutivos.
- Suponha que a resposta do item anterior é negativa. Proponha um algoritmo para encontrar a maior subsequência de P que está em T.
- Considere que para cada elemento de T é associado um custo positivo
ci, i=1,...,n. Proponha um algoritmo para encontrar a subsequência de
P que é subsequência de T onde a soma dos custos dos elementos de T é maximizada.
- Analise a complexidade dos algoritmos propostos.
Qual a complexidade menor possível de um algoritmo que resolve estes
problemas ?
- Sejam P1, P2 e P3 três problemas tais que
P1 an P2 an3logn P3 (i.e.,
P1 é redutível a P2 em tempo
linear e P2 a P3 em tempo n3 log n). Assuma a hipótese
de que P1 é W(n log n). Assuma também que você conhece um
algoritmo O (n3) para resolver P3.
Discuta as afirmações abaixo.
-
O que você pode dizer sobre a complexidade de resolução de
P2 ? Qual a complexidade do melhor algoritmo que você conhece
para P2 ?
- Todo algoritmo que resolve P2 tem que gastar pelo menos
tempo quadrático (P2 é W(n2)).
- W(n log n) é um limite inferior para a
complexidade de P3.
- Todo algoritmo que resolve P1 pode ser usado para resolver P2.
- Todo algoritmo que resolve P3 pode ser usado para resolver
P2.
- P2 pode ser resolvido no pior caso em tempo O(n log n).
- Defina as classes de problemas P, NP e NP-completo
Relacione estas classes e dê um exemplo de problema para cada classe.
- Seja P o conjunto dos problemas para os quais existem
algoritmos determinísticos polinomias para a sua resolução.
Seja NP o conjunto dos problemas para os quais existem
algoritmos não-determinísticos polinomias para a sua
resolução. Naturalmente P está contido em NP. Considere os
problemas P1 Î P e P2 Î NP-completo.
Indique se cada afirmação abaixo é verdadeira, falsa ou se não se
sabe.
-
Conhece-se uma redução de P1 para P2 que toma tempo
polinomial (O(nk)).
- Se existe um algoritmo determinístico polinomial para a
resolução de P2 então podemos afirmar que P1 Î NP-completo
assim como P2 Î P.
- P2 é pelo menos tão difícil quanto 3-SAT.
- 3-SAT é pelo menos tão difícil quanto P2.
- Existe uma redução de P2 para P1 que toma tempo polinomial.
- Dado que você conhece um algoritmo determinístico
polinomial para a resolução do problema (CMC) abaixo, USE ESTE
CONHECIMENTO para provar que você também conhece um algoritmo
determinístico polinomial para a resolução do problema (VMC)
apresentado em seguida.
(CMC) Dado um grafo orientado G=(V,A) com comprimentos positivos
associados aos arcos (i,j) Î A, dois vértices i,j Î V e
uma constante K. Pergunta-se se existe uma caminho do vértice i ao
vértice j que possua comprimento menor ou igual à K.
(VMC) Dado um grafo orientado G=(V,A), com comprimentos positivos
associados aos arcos (i,j) Î A, e uma constante K. Pergunta-se se
existe um par de vértices (i,j) para o qual exista um caminho de i a
j e de j a i que tenha comprimento menor ou igual à K.
- Prove que os problemas (de decisão) abaixo pertencem à NP.
-
Árvore Geradora Mínima com restrição de Grau (AGG) - Dado um
grafo não-orientado G=(V,E), pesos we Î E e constantes K e C.
Pergunta-se se este grafo G possui uma árvore geradora cujo grau
em nenhum dos vértices seja superior a K e cuja soma dos pesos das
arestas nesta árvore seja no máximo C.
(minimize C)
- Clique-Máximo (MC) - Dado um grafo não-orientado G=(V,A) e
uma constante K.
Pergunta-se se este grafo G possui um clique (isto é um sub-grafo
completo) de cardinalidade maior ou igual à K.
(maximize K)
- (MS): Dados um conjunto de máquinas M={ m1, m2, ...,
mp} e um conjunto de tarefas T={ t1, t2, ...,tq} cada uma
com uma duração di Î Z, i=1,...,q onde di
associada e uma constante
K. Considerando-se que as
tarefas podem ser atribuídas à qualquer máquina
indistintamente. Pergunta-se se existe uma atribuição das tarefas às
p máquinas tal que o instante em que a última tarefa é
terminada é menor ou igual que K (Isto é, a duração total é
inferior ou igual a K).
(minimize K)
- Sabe-se que o problema (MC), abaixo, pertence a NP-completo.
Use este conhecimento para provar que (MS) também pertence a
NP-completo.
Clique-Máximo (MC) - Dado um grafo não-orientado G=(V,A) e
uma constante K.
Pergunta-se se este grafo G possui um clique (isto é um sub-grafo
completo) de cardinalidade maior ou igual à K.
Estável-Máximo (MS) - Dado um grafo não-orientado G=(V,A)
e uma constante K.
Pergunta-se se este grafo G possui um conjunto de vértices
independentes (isto é, um conjunto de vértices onde não existe
aresta entre nenhum par do conjunto) de cardinalidade maior ou igual
à K.
(Dica: Siga os passos para provar que um problema é NP-completo.
A redução pedida aqui é muito, mas muito simples. Leia com cuidado e
desenhe exemplos dos problemas).
- Considere o problema abaixo:
(MS): Dados um conjunto de máquinas M={ m1, m2, ...,
mp} e um conjunto de tarefas T={ t1, t2, ...,tq} cada uma
com uma duração di, i=1,...,q associada e uma constante
K. Considerando-se que as
tarefas podem ser atribuídas à qualquer máquina
indistintamente. Pergunta-se se existe uma atribuição das tarefas às
p máquinas tal que o instante em que a última tarefa é
terminada é menor ou igual que K (Isto é, a duração total é
inferior ou igual a K).
Dado que este problema pertence a NP-completo responda:
-
Quando temos um algoritmo polinomial determinístico para
resolvê-lo ?
- Proponha um algoritmo para resolver este problema em tempo
polinomial.
- Em que casos a solução obtida pelo seu algoritmo é correta ?
- Descreva um algoritmo que encontre sempre a resposta correta
para este problema.
- Sabe-se que o problema (CH), abaixo, pertence a NP-completo.
Use este conhecimento para provar que (AGG) também pertence a
NP-completo.
Caminho Hamiltoniano (CH) - Dado um grafo não-orientado
G=(V,A).
Pergunta-se se este grafo G possui um caminho Hamiltoniano (isto é
um caminho que começa em algum vértice, e passa exatamente uma
vez em cada vértice do grafo, terminando em algum outro vértice
qualquer).
Árvore Geradora com restrição de Grau (AGG)
- Dado um grafo não-orientado G=(V,A) e uma constante K.
Pergunta-se se este grafo G possui uma árvore geradora (uma
árvore que conecta todos os vértices do grafo) cujo grau (na
árvore) em nenhum dos vértices seja superior a K.
(Dica: Siga os passos para provar que um problema é NP-completo.
Prove que (AGG) pertence a NP e em seguida use (CH) para mostrar que
todos os problemas em NP se transformam em (AGG).
Na transformação você deve mostrar que a resposta sim para o problema
(CH) acontece se e somente se acontece a resposta sim na instância
obtida pela transformação do problema (AGG). Não esqueça de explicitar
as complexidades dos algoritmos de verificação e de transformação).
- Seja G=(V,E) um grafo não-orientado. Considere a seguinte função que leva um subconjunto
S de V em um valor real: f(S) = |S| - 2 |E(S)|, onde E(S) é o conjunto das arestas de G=(V,E)
que tem as duas extremidades em S. Podemos agora enunciar o problema:
Conjunto Independente Máximo (MAXSS) - Dado um grafo não-orientado
G=(V,E).
Encontrar S* tal que " S Í V,
f(S*) ³ f(S), onde f(S) = |S| - 2 |E(S)|.
Algoritmo Constroi I
-
Passo 0: Inicialização
S ¬ Ø
- Passo 1: Iteração
-
Para v=1 até |V| e v Î V - S faça
-
Se f(S È { v }) > f(S) entao
S ¬ S È { v };
Algoritmo Constroi II
-
Passo 0: Inicialização
S ¬ Ø
- Passo 1: Iteração
-
mingrau = |V|; vmin = -1
- Para v=1 até |V| e v Î V - S faça
-
Se grau( v ) < mingrau entao
mingrau = grau(v); vmin = v ;
- Passo 2: Atualização
- Se vmin ¹ -1 e f(S È { vmin }) > f(S) entao
S ¬ S È { vmin}; Volte ao Passo 1;
-
Escreva um algoritmo que enumere todos os subconjuntos S de V e encontre S*. Analise sua complexidade.
- Escreva um algoritmo que enumere todos os subconjuntos S de V que não possuem arestas
ligando dois dos seus elementos, e encontre S*. Analise sua complexidade.
- Analise a complexidade do algoritmos I e II acima.
- Aplique os 4 algoritmos acima no grafo G=(V,E) onde V={ 1, 2, 3, 4, 5, 6, 7, 8 } e E={ (1,2), (1,3), (1,4),
(2,4), (2,5), (2,7), (3,4), (3,6), (4,6), (4,8), (5,6), (5,7) }.
- Explicite no algoritmo I o cálculo do valor da função f(S). Descreva as estruturas de dados utilizadas e
analise a complexidade do algoritmo resultante. Repita a análise para o algoritmo II.
- Seria interessante o algoritmo I gerar soluções tomando decisões aleatorizadas ? Como isso seria feito ?
E para o algoritmo II ?
- O que é busca local ? Proponha um algoritmo de busca local para melhorar a solução S obtida pelos algoritmos I e II.
Analise sua complexidade e aplique nas soluções obtidas para o grafo acima.
- Compare as soluções obtidas pelos algoritmos enumerativos e os algoritmos I e II.
- Seja o Problema do Caixeiro Viajante(TSP):
(TSP): Dado um grafo completo G=(V, E), custos c(i,j) ³ 0 associadas às arestas (i,j) em E.
Deseja-se encontrar uma sequência de visitação dos vértices de G iniciando e terminando em um mesmo vértice (1),
e passando exatamente uma vez por todos os demais vértices onde a soma dos custos das arestas usadas na visitação
seja mínima.
Seja Z* o custo de uma visitação de custo mínimo.
-
O custo da árvore geradora de G é maior, menor ou igual a Z* ?
- Dado que um conjunto de arestas E1 tem que ser todo usado na visitação e que um conjunto
de arestas E0 não pode ser usado, sugira uma forma de estimar o menor custo que essa visitação
pode ter.
- O custo da visitação 1 ® 2 ® ... ® n ® 1 é maior, menor ou igual a Z* ?
- Seja o Problema da Árvore Geradora com Restrições de Capacidade:
(CAP-MST): Dado um grafo G=(V È { r }, E), custos c(i,j) ³ 0 associadas às arestas (i,j) em E,
demandas q(v) associados aos vértices v em V, e uma capacidade Q. Deseja-se encontrar
uma árvore geradora de G, cujas sub-árvores enraizadas no vértice r possuam a soma das demandas
dos seus vértices inferiores ou iguais à Q, cujo custo total de suas arestas seja mínimo.
Considere a seguinte estrutura de dados para representar uma solução:
-
Un vetor com n=|V| posições que indica em que árvore o vértice v está. Isto é,
A[v]=k significa que o vértice v está na árvore k.
-
Escreva um algoritmo para determinar se uma solução representada por um vetor A
é viável. Analise sua complexidade.
- Escreva um algoritmo para determinar o valor da solução representada por A.
Analise a sua complexidade.
- Considere que um vértice pode pertencer à n árvores diferentes, logo A[v] Î {1, ..., n }
para v=1, ..., n. Supondo que uma vizinhança de uma solução arbitrária A é definida como
todas as soluções em que somente um vértice troca de árvore, investigar a vizinhança de A é
equivalente à avaliar o valor da solução representada por A onde modifica-se somente o valor do
elemento A[v] onde este assume os valores k=1, ..., n, k ¹ v, para v=1, ..., n.
-
Qual é a complexidade do algoritmo para encontrar a solução vizinha de menor valor,
caso seja calculada o valor da solução de casa solução vizinha ?
- Esta complexidade pode ser reduzida ? No caso afirmativo, proponha um algoritmo com complexidade menor.
This document was translated from LATEX by HEVEA.