PUC-Rio
Departamento de Informática
Prof. Marcus Vinicius S. Poggi de Aragão
Período: 2004.2
Horário: 3as-feiras e 5as-feiras de 13 às 15 horas - Sala 422L
PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)
Lista 2
-
Considere uma heap com n inteiros e um valor x. A heap possui o seu maior elemento no topo e está organizada em um vetor (de n posições). Proponha um algoritmo para decidir se o valor x é maior ou igual ao k-ésimo maior elemento na heap ou não. O algoritmo deve executar em O(k).
Dica: Observe que você não precisa necessariamente encontrar o k-ésimo maior elemento da heap.
- Considere o seguinte problema:
[ELE] Dados um conjunto de n inteiros distintos X={ x1, ..., xn} e pesos positivos w(xj), j=1,...,n, associados aos elementos de X, e um inteiro positivo V tal que 0 £ V £ W = åj=1n w(xj); encontrar o elemento xk tal que åxj < xk w(xj) < V e
w(xk) + åxj < xk w(xj) ³ V.
-
Projete um algoritmo O(n log n) para resolver esse problema.
- Utilize divisão e conquista para projetar um algoritmo O(n) para resolver esse problema.
- Apresente detalhadamente a análise da complexidade do item anterior.
- Sejam u e v dois números de n bits (considere que n é
potência de 2). A multiplição tradicional de u por v utiliza
O(n2) operações. Um algoritmo baseado em divisão e conquista
divide os números em duas partes iguais, calculando o produto
como: uv = (a2n/2+b)(c2n/2+d) = ac2n + (ad + bc)2n/2 +
bd. As multiplicações ac, ad, bc e bd são feitas usando
este mesmo algoritmo recursivamente.
-
Escreva este algoritmo
- Determine a complexidade
- Qual é a complexidade se ad + bc é calculado como (a + b)(c + d) - ac -
bd?
- Prove que os problemas abaixo pertencem a NP, ou explique porque não se sabe, ou porque não pertence a NP. Para provar que pertence à NP, apresente o certificado e justifique porque a verificação do SIM é feita em tempo polinomial.
-
Hemisfério Aberto
Instância: Um conjunto finito de n m-tuplas X={ x1=<x11, x12, ... x1m>, x2, ..., xn } e um inteiro K £ n.
Pergunta: Existe uma m-tupla y=<y1, y2, ... ym> tal que o produto interno entre y e x é maior que zero, isto é y.x >0, para pelo menos K m-tuplas x Î X ?
- K Caminhos mais curtos.
Instância: Um grafo orientado G=(V,E), as distâncias positivas dos arcos e, e, para e Î E, um par de vértices de V, s e t, e inteiros positivos L e K.
Pergunta: Existem K caminhos de s a t em G tais que sua distância total não ultrapassa L ?
- Equações Diofantinas Quadráticas.
Instância: Inteiros positivos a, b e c.
Pergunta: Existem inteiros positivos x e y tais que a.x2 + b.y = c ?
- Atribuição Sequencial V/F
Considere o seguinte jogo entre dois jogadores. Dada um instância do problema 3-SAT, os jogadores atribuem V ou F às variáveis em um sequência pré-fixada.
Na primeira rodada o jogador 1 atribui V ou F à variável u1 e o jogador 2 à variável u2, na segunda, 1 à u3 e 2 à u4. Na i-ésima jogada, 1 à u2i-1 e o jogador 2 à u2i. O jogador 1 vence se todas as cláusulas forem satisfeitas. Considere agora o seguinte problema:
Instância: Uma sequencia de variáveis lógicas U={ u1, u2, ..., un } e uma coleção de cláusulas de tamanho 3, C={ c1(u), c2(u), ..., cn(u) }
Pergunta: O jogador 1 vence o jogo ? Ou seja, existe um sequência de decisões para o jogador 1 em que ele vence o jogo independente das ações do jogador 2 ?
- Considere os seguintes problemas:
-
Vertex Cover (VC): Dados um grafo (não orientado) G=(V,E) e
um inteiro positivo K £ |V|; determinar se existe S Ì
V, |S| £ K, tal que para toda aresta (u,v) Î E, pelo menos
um entre u e v, pertence a S.
- Dominating Set (DS): Dados um grafo (não orientado) H=(N,A) e
um inteiro positivo L £ |N|; determinar se existe U Ì
N, |U| £ L, tal que para todo vértice w Î N \ U
existe um vértice u Î U tal que (u,w) Î A.
- Uncapacitated Facility Location (UFL): Dados conjuntos M e N, inteiros cij para i Î M e j Î N, inteiros fj para j Î N e um inteiro T; determinar se existe um conjunto J Í N tal que
åi Î M minj Î J cij + åj Î J fj £ T.
-
Sabendo que (VC) é NP-comleto (foi provado em aula!), prove que (DS) também é NP-completo.
Dicas: Observe que todo VC é um DS. Pense em formas de obrigar que
um DS também seja um VC, ou seja se cobrir todos os vértices no grafo
do problema (DS) (o grafo H) então cobre todas a arestas da
instância (o grafo G) do problema VC.
- Sabendo que (VC) é NP-comleto (foi provado em aula!), prove que (UFL) também é NP-completo.
Dicas: Observe que, se for interpretado que o (UFL) é definido sobre um grafo, este grafo tem dois tipos de vértices.
- Considere a seguinte instância do (VC): G=(V,E) onde V={1, 2, 3, 4, 5},
e E = { (1,2), (1,4), (2,3), (3,4), (1,5), (2,5), (3,5), (4,5) } e seja K = 3. Utilize as transformações que você propôs nos itens anteriores para obter instâncias equivalentes do (DS) e do (UFL).
- Considere o problema (VC) Vertex Cover definido na questão anterior.
Seja o algoritmo abaixo para resolvê-lo.
-
Algoritmo RVC
- P0 Faça RESPOSTA igual a NÃO.
- P1 Para cada subconjunto S de K vértices dos vértices em V faça:
-
P1.1 Teste se S é um Vertex Cover.
No caso afirmativo faça RESPOSTA igual a SIM, retorne RESPOSTA.
No caso negativo, vá para o próximo subconjunto.
- P3 Retorne RESPOSTA.
-
Demonstre que a complexidade do algoritmo RVC acima é O(nK) onde n=|V|.
- Esta complexidade é polinomial ? (Se é, por que não implica que P = NP ?)
This document was translated from LATEX by HEVEA.