PUC-Rio
Departamento de Informática
Prof. Marcus Vinicius S. Poggi de Aragão
Período: 2005.2
16 de novembro de 2005
Horário: 2as-feiras e 4as-feiras de 9 às 11 horas
ANÁLISE DE ALGORITMOS (INF 1721)
3a Lista de Exercícios
  1. 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.
    1. O que você pode dizer sobre a complexidade de resolução de P2 ? Qual a complexidade do melhor algoritmo que você conhece para P2 ?
    2. Todo algoritmo que resolve P2 tem que gastar pelo menos tempo quadrático (P2 é W(n2)).
    3. W(n log n) é um limite inferior para a complexidade de P3.
    4. Todo algoritmo que resolve P1 pode ser usado para resolver P2.
    5. Todo algoritmo que resolve P3 pode ser usado para resolver P2.
    6. P2 pode ser resolvido no pior caso em tempo O(n log n).

  2. Defina as classes de problemas P, NP e NP-completo Relacione estas classes e dê um exemplo de problema para cada classe.

  3. 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.
    1. Conhece-se uma redução de P1 para P2 que toma tempo polinomial (O(nk)).
    2. 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.
    3. P2 é pelo menos tão difícil quanto 3-SAT.
    4. 3-SAT é pelo menos tão difícil quanto P2.
    5. Existe uma redução de P2 para P1 que toma tempo polinomial.







  4. 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.

  5. 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).

  6. 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:
    1. Quando temos um algoritmo polinomial determinístico para resolvê-lo ?
    2. Proponha um algoritmo para resolver este problema em tempo polinomial.
    3. Em que casos a solução obtida pelo seu algoritmo é correta ?
    4. Descreva um algoritmo que encontre sempre a resposta correta para este problema.

  7. 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).

  8. 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
    Algoritmo Constroi II
    1. Escreva um algoritmo que enumere todos os subconjuntos S de V e encontre S*. Analise sua complexidade.
    2. 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.
    3. Analise a complexidade do algoritmos I e II acima.
    4. 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) }.
    5. 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.
    6. Seria interessante o algoritmo I gerar soluções tomando decisões aleatorizadas ? Como isso seria feito ? E para o algoritmo II ?
    7. 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.
    8. Compare as soluções obtidas pelos algoritmos enumerativos e os algoritmos I e II.

  9. 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.

    1. O custo da árvore geradora de G é maior, menor ou igual a Z* ?
    2. 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.
    3. O custo da visitação 1 ® 2 ® ... ® n ® 1 é maior, menor ou igual a Z* ?

  10. 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:


    1. Escreva um algoritmo para determinar se uma solução representada por um vetor A é viável. Analise sua complexidade.
    2. Escreva um algoritmo para determinar o valor da solução representada por A. Analise a sua complexidade.
    3. 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.
      1. 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 ?
      2. Esta complexidade pode ser reduzida ? No caso afirmativo, proponha um algoritmo com complexidade menor.

This document was translated from LATEX by HEVEA.