np completude - loiane

42
FUNDAÇÃO DE ASSISTÊNCIA E EDUCAÇÃO - FAESA FACULDADES INTEGRADAS ESPÍRITO-SANTENSES CURSO DE CIÊNCIA DA COMPUTAÇÃO LOIANE GRONER NP - COMPLETUDE VITÓRIA 2006

Upload: loiane-groner

Post on 18-Jun-2015

6.914 views

Category:

Technology


2 download

DESCRIPTION

Trabalho sobre NP-Completude, Problemas PxNP da disciplina de Teoria da Computação - Ciência da Computação

TRANSCRIPT

Page 1: NP Completude - Loiane

FUNDAÇÃO DE ASSISTÊNCIA E EDUCAÇÃO - FAESA FACULDADES INTEGRADAS ESPÍRITO-SANTENSES

CURSO DE CIÊNCIA DA COMPUTAÇÃO

LOIANE GRONER

NP - COMPLETUDE

VITÓRIA 2006

Page 2: NP Completude - Loiane

LOIANE GRONER

NP - COMPLETUDE

Trabalho do Curso de Graduação em Ciência da Computação, apresentado às Faculdades Integradas Espírito-santenses, como requisito parcial para avaliação da disciplina de Teoria da Computação, sob a orientação da prof. Elvira Pádua Lovatte.

VITÓRIA 2006

Page 3: NP Completude - Loiane

VITÓRIA, 01 DE DEZEMBRO DE 2006

SUMÁRIO 1 INTRODUÇÃO .................................................................................................. 3

2 IMPORTÂNCIA DA TEORIA NP - COMPLETUDE ......................................... 4

3 CLASSE DE PROBLEMAS ALGORÍTMICOS ................................................. 7

3.1 PROBLEMA DE DECISÃO ............................................................................ 7

3.2 PROBLEMA DE LOCALIZAÇÃO .................................................................. 8

3.3 PROBLEMA DE OTIMIZAÇÃO ...................................................................... 8

4 CLASSE DE PROBLEMAS P .......................................................................... 10

5 CLASSE DE PROBLEMAS NP ........................................................................ 11

6 CARÁTER NP - COMPLETO ......................................................................... 14

6.1 REDUTIBILIDADE.......................................................................................... 14

6.2 IMPORTÂNCIA DO CARÁTER NP - COMPLETO ........................................ 16

7 HIERARQUIA DAS COMPLEXIDADES........................................................... 17

7.1 OUTRAS CLASSES DE COMPLEXIDADE.................................................... 18

8 PROBLEMAS P E NP...................................................................................... 19

8.1 PROBLEMAS FAMOSOS .............................................................................. 19

8.1.1 Caminho em um Grafo .............................................................................. 20

8.1.2 Coloração de um Grafo............................................................................. 20

8.1.3 Ciclo de Hamilton ...................................................................................... 22

8.1.4 Cobertura de Arestas e Vértices (Vertex Cover)..................................... 23

8.1.5 Problema da Satisfabilidade (SAT) .......................................................... 24

8.1.6 Clique de um Grafo ................................................................................... 25

8.1.7 Problema da Parada.................................................................................. 26

9 PROVAS ........................................................................................................... 28

Page 4: NP Completude - Loiane

9.1 TEOREMA DE COOK ................................................................................... 28

9.2 PROVA DE QUE UM PROBLEMA É NP - COMPLETOO ............................. 28

9.3 OUTRAS PROVAS ........................................................................................ 29

9.3.1 Clique ∈∈∈∈ NP? ............................................................................................. 29

9.3.2 Ciclo Hamiltoniano ∈∈∈∈ NP?........................................................................ 29

9.3.3 Clique é NP – Completo?.......................................................................... 30

9.3.4 Problema de Decisão do Caixeiro Viajante é NP – Completo? ............. 31

9.3.5 Problema de Otimização do Caixeiro Viajante é NP – Difícil?............... 32

9.3.6 Halting Problem é NP – Difícil? ................................................................ 33

10 PROBLEMAS EXPONENCIAIS .................................................................... 34

10.1 ALGORITMOS APROXIMADOS PARA PROBLEMAS NP-COMPLETOS 35

11 CONCLUSÃO ............................................................................................... 36

12 REFERÊNCIAS ............................................................................................. 37

ANEXOS .............................................................................................................. 39

ANEXO A – LISTA DE EXERCÍCIOS .................................................................. 40

Page 5: NP Completude - Loiane

3

1 INTRODUÇÃO

Alguns problemas computacionais são difíceis. Tenta-se achar algoritmos eficientes

para resolvê-los, mas às vezes acaba-se falhando. Seria interessante se pudesse

provar que achar um algoritmo eficiente para certos casos é impossível, assim como

seria de grande relevância quando não se consegue achar um algoritmo eficiente , e

pudesse conforta-se para o fato deste não existir para esse problema em questão.

Infelizmente, tais provas são mais difíceis que achar eficientes algoritmos.

Este trabalho discute que alguns problemas são realmente difíceis. A prova consiste

em um conceito conhecido como NP - Completude. Este conceito permite mostrar

rigorosamente que achar um algoritmo eficiente para um certo problema é tão difícil

quanto achar algoritmos eficientes para todos os problemas que encontram-se na

classe chamada NP.

Neste trabalho será definida formalmente a classe NP e a classe relacionada P,

assim como provar que um dado problema é NP – Completo. Também serão

discutidos alguns exemplos de problemas NP – Completos.

Muitos desses problemas são muito importantes, uma vez que estão relacionados a

problemas de otimização, que na prática podem gerar economia de dinheiro, tempo

e outros recursos. Um dos métodos mais efetivos é construir um algoritmo de

aproximação de tempo polinomial para problemas NP – Completos. Embora tais

algoritmos não produzam uma solução ótima, geralmente chegam perto da solução

ótima. Em fato, em alguns casos pode-se garantir a quão perto essa solução

aproximada será da solução ótima.

Page 6: NP Completude - Loiane

4

2 IMPORTÂNCIA DA TEORIA NP – COMPLETUDE

A teoria da complexidade computacional estuda a complexidade de problemas (e

não a complexidade de algoritmos). A complexidade de um problema é o consumo

de tempo de um algoritmo ótimo ideal para o problema. Não se trata

necessariamente do melhor algoritmo conhecido para o problema, pois um algoritmo

ótimo pode não ter sido descoberto ainda.

Nos anos 60 e 70 foi desenvolvido um conceito designado classes da hierarquia de

complexidade para problemas finitos. E enquanto forem usados computadores

digitais com memória finita onde são armazenados objetos discretos para resolver

problemas computacionais, é relevante para designar qualquer algoritmo não trivial.

Obviamente, todos os problemas P estão em NP, mas se o inverso é verdade não se

pode afirmar. Este é um dos problemas teóricos mais importantes hoje, e qualquer

pessoa que mostrar habilidade para resolvê-lo, estará apta a ganhar $ 1 milhão de

dólares como prêmio do Clay Mathematics Institute.

A maioria do algoritmos vistos neste curso até agora, são no máximo de tempo

polinomial. De acordo com Cormen, Leiserson, e Rivest, algoritmos de tempo

polinomial são considerados tratáveis pelas seguintes razões:

1. Embora um problema que seja da ordem O(n20) ou O(n100) possa ser

chamado intratável, existem muitos poucos problemas práticos com tais

ordens de tempo polinomial.

2. Para razões de modelos matemáticos, um problema que pode ser resolvido

em tempo polinomial em um modelo também pode ser resolvido por outro

modelo, também de tempo polinomial.

3. A classe de problemas de tempo polinomial é solvível porque a adição e a

multiplicação de polinômios são operações próximas, o que é conveniente

para algoritmos na máquina de Turing.

Page 7: NP Completude - Loiane

5

A classe de problemas NP – Completo é muito importante e uma classe muito

importante para a Ciência da Computação. O interessante fato que abrange essa

classe de problemas pode ser atribuído pelas seguintes razões:

1. Nenhum algoritmo de tempo polinomial foi descoberto para qualquer

problema NP – Completo. Ao mesmo tempo nenhum problema NP –

Completo mostrou ter um tempo menor que o super-polinomial (por exemplo,

tempo exponencial).

2. Se um algoritmo de tempo polinomial for descoberto para qualquer problema

NP – Completo, então todos os problemas NP – Completos poderão ser

resolvidos em tempo polinomial.

Acredita-se (mas não há provas) que problemas NP – Completos não possuem

algoritmos de tempo polinomial e são intratáveis. A base para essa convicção é

explicada pela segunda razão citada acima, prevendo que se qualquer problema NP

– Completo pode ser resolvido em tempo polinomial, então todos problemas NP –

Completos terão um algoritmo de tempo polinomial.

Figura 1: gráfico das funções de complexidade

Page 8: NP Completude - Loiane

6

Com base nessas observações, pode-se classificar os problemas em dois tipos:

• Tratável: se ele apresenta uma solução polinomial

• Intratável: se ele for tão difícil que nenhum algoritmo polinomial pode

resolvê-lo.

Figura 2: tabela de funções de complexidade vs. tempo

Page 9: NP Completude - Loiane

7

3 CLASSES DE PROBLEMAS ALGORÍTMICOS

Um problema algorítmico é caracterizado por um conjunto de dados, pelo objetivo do

problema e por uma solução.

Aborda-se aqui o problema da existência de algoritmos eficientes do ponto de vista

mais geral. Deseja-se avaliar a dificuldade à natureza do problema, ou seja, dado

determinado problema para o qual se pode construir uma família de algoritmos que o

resolvem, existirá dentre eles algum que seja polinomial?

Para melhor abordar a questão da complexidade, bem como caracterizar as classes

P e NP, é conveniente classificar os problemas algorítmicos nas seguintes

categorias:

• Problemas de Decisão

• Problemas de Localização

• Problemas de Otimização

3.1 PROBLEMAS DE DECISÃO

Para os problemas de decisão, o objetivo consiste sempre em responder sim ou não

à determinada indagação.

Por exemplo, em um problema chamado Shortest Path, tem-se um grafo não

orientado G e vértices u e v, e deseja-se encontrar o caminho de u até v que utiliza o

menor número de arestas. Em outras palavras, Shortest Path é o problema de

caminho mais curto de um único par em um grafo não orientado e não ponderado.

Um outro exemplo: dados um grafo G e um inteiro k > 0, existe um clique de

tamanho k? Caso exista um subgrafo completo maximal em G com k ou mais

vértices, a resposta será sim; caso contrário, não.

Page 10: NP Completude - Loiane

8

3.2 PROBLEMAS DE LOCALIZAÇÃO

Para problemas de localização, o objetivo é encontrar, caso exista, determinada

estrutura satisfazendo requisitos especificados por uma questão.

Por exemplo, dados um grafo G e um inteiro k > 0, encontrar, se existir, um clique

em G de tamanho k. No exemplo da figura, para k = 3, a resposta para este

problema de localização é o clique {3, 4, 5, 6}.

3.3 PROBLEMAS DE OTIMIZAÇÃO

Em problemas de otimização, o objetivo será obter determinada estrutura

satisfazendo critério de otimização pré-definido

Neste ponto é fácil observar que os três problemas guardam em geral relação muito

próxima, isto é, para obter um clique de tamanho mínimo, três problemas devem ser

resolvidos em seqüência:

a) Passo 0

Problema de Decisão:

Entrada: Grafo G e um inteiro k > 0

Questão: E um clique em G do tamanho k?

Se a resposta for sim, resolve-se o segundo problema.

b) Passo 1

Resolver o Passo 1 consiste basicamente em obter algum clique em G, ou

mostrar que não existe estrutura com esta propriedade. Portanto, foi resolvido o

seguinte problema:

Problema de Localização:

Entrada: Grafo G e um inteiro k > 0

Questão: Encontrar um clique em G de tamanho k.

Page 11: NP Completude - Loiane

9

c) Passo 2

Resolvidos os problemas da existência e localização de cliques em G, deve-se

obter dentre todos os cliques deste grafo aquele de tamanho mínimo. Ou seja, o

menor k para o qual a resposta ao Problema de Decisão seja sim.

Problema de Otimização

Entrada: Grafo G

Questão: Obter um clique de tamanho mínimo.

Conclui-se então que o Problema de Decisão apresenta dificuldade não maior que a

do Problema de Localização, e este, por sua vez, apresenta dificuldade não maior

que a do Problema de Otimização associado Em diversas situações, porém, os

Problemas de Localização e Otimização apresentarão grau de dificuldade não maior

que o Problema de Decisão associado. Sendo a obtenção de resposta para o

Problema de Decisão em geral mais fácil, utiliza-se este problema para obter alguma

indicação quanto à possível intratabilidade. Outra razão significativa para utilizarmos

Problemas de Decisão é que o tamanho de sua saída é constante (resposta sim ou

não), podendo ser ignorada na análise da complexidade de determinado algoritmo.

O relacionamento entre um problema de otimização e sue problema de decisão

relacionada atua a favor quanto se tenta mostrar que o problema de otimização é

difícil, ou seja, se um problema de otimização é fácil, seu problema de decisão

relacionado também é fácil. Declarado de um modo que tem maior relevância para o

caráter NP – Completo, se puder fornecer evidências de que um problema de

decisão é difícil, também se pode fornecer evidências de que o problema de

otimização relacionada é difícil Deste modo, embora restrinja a atenção a problemas

de decisão, a teoria de problemas NP – Completos freqüentemente também tem

implicações para problemas de otimização.

Figura 3: Ordem de Dificuldade

Page 12: NP Completude - Loiane

10

4 CLASSE DE PROBLEMAS P

Definição: a classe de complexidade P é o conjunto de todos os problemas de

decisão (ou linguagens) que aceitam o tempo polinomial no pior caso. Isto é, existe

um algoritmo A que, se x L, então ao inputar x, A tem como resultado “sim” em um

tempo p(n), onde n é o tamanho de x e p(n) é polinomial. Note que a definição de P

não diz nada a respeito sobre o tempo de execução de uma rejeição da entrada de

dados, ou seja, quando o algoritmo tem como solução “não”. Alguns casos se

referem ao complemento da linguagem L, que consiste de todas as strings binárias

que não estão em L.

Dado um algoritmo A que aceite a linguagem L em tempo polinomial, p(n), pode-se

construir um algoritmo de tempo polinomial que aceite o complemento de L. Em

particular, dada uma entrada de dados x, pode-se construir um algoritmo

complemento B que simplesmente executa A em p(n) passos, onde n é o tamanho

de x, terminando sua execução se A tentar executar mais de p(n) passos. Se A tiver

como solução “sim” então B tem como solução “não”; se A tem como solução “não”

ou se A executar ao mínimo p(n) passos sem nenhuma solução, então B tem como

solução “sim”. Nos dois casos, o algoritmo complemento B é executado em tempo

polinomial. Isso significa que, se uma linguagem L, representando um problema de

decisão está em P, então o complemento de L também está em P.

O algoritmo da eliminação de Gauss, ou método do escalonamento, usado para

resolver sistemas lineares, é um procedimento da classe P. De fato, para resolver

um sistema linear n×n são necessárias (4n3+9n2-7n)/6 operações aritméticas, um

custo aproximado de n3.

Por outro lado, o método de Cramer, também utilizado para resolver sistemas

lineares, tem custo exponencial. Para um sistema linear n×n esse método executa

aproximadamente (n+1)!(e-1) multiplicações. Para se ter uma idéia desse custo, se

for usado um computador que realiza 100 milhões de multiplicações por segundo,

para resolver um sistema linear 20×20 seriam necessários mais de 32000 anos.

Page 13: NP Completude - Loiane

11

5 A CLASSE DE PROBLEMAS NP

Os problemas NP não se referem a problemas não polinomiais (na verdade isto é

uma conjectura). A leitura correta para procedimentos NP é dizer que se referem a

problemas "não-determinísticos polinomiais" no tempo.

No início dos anos sessenta foram encontrados muitos algoritmos que resistiam a

uma simplificação polinomial, isto é, algoritmos que não admitiam procedimentos

análogos na classe P. Nesta época Steve Cook observou um fato simples e ao

mesmo tempo surpreendente: se um problema pudesse ser resolvido em tempo

polinomial, poderia-se também verificar se uma dada possível solução é correta em

tempo polinomial (dize-se que o algoritmo pode ser certificado em tempo polinomial).

Um exemplo simples de como esta certificação pode ser feita é o problema de

descobrir se um dado número é composto, ou seja, se ele não é primo. Suponha

que se queira descobrir se 4294967297 é um número composto. Não existe uma

maneira eficiente (rápida) de fazer isto. De fato tal tarefa pode ser realizada pela

utilização do crivo de Eratóstenes, testando os possíveis divisores do número, o que

pode demandar um tempo excessivo de computação. Entretanto existe uma maneira

sucinta de certificar que aquele número é composto: basta verificar que o produto de

6700417 por 641 é exatamente 4294967297. Assim, se puder achar uma

certificação, pode-se exibir efetivamente sua validade. Achá-la pode ser

extremamente difícil, no entanto. A fatoração de 4294967297 foi encontrada por

Leonard Euler em 1732, noventa e dois anos após Pierre de Fermat ter conjeturado

erroneamente que tal número era primo.

Definição: A classe dos problemas NP é aquela para as quais se pode verificar, em

tempo polinomial, se uma possível solução é correta.

Evidentemente P NP. De fato, se um algoritmo pode ser executado em tempo

polinomial e tiver em mãos um possível candidato S à solução, é possível executar o

programa, obter uma solução correta C e comparar C com S para certificar que S é

de fato solução, tudo em tempo polinomial.

Page 14: NP Completude - Loiane

12

A classe NP consiste dos algoritmos não-determinísticos polinomiais, e recebe este

nome devido a uma formulação equivalente que não usa o conceito de certificação,

mas o de decisão de linguagens. A categoria de linguagens a que refere-se são as

reconhecidas por computadores teóricos chamados de Máquinas de Turing. Tais

máquinas parecem capturar completamente o sentido do termo computação.

Uma máquina de Turing pode ser pensada como uma fita infinita de papel, dividida

em pequenas casas, e um lápis/borracha especial que pode seguir instruções. Essas

instruções são bastante simples: o lápis pode ler um símbolo na fita e, analisando-o,

pode apagá-lo e escrever por cima do símbolo lido e, mudando de estado, pode se

mover para a direita ou para a esquerda para analisar um novo símbolo, ou

simplesmente parar.

Existe uma afirmação heurística, conhecida como Tese de Church, que diz que tudo

o que pode ser programado algoritmicamente pode também ser realizado por uma

máquina de Turing.

Existem máquinas de Turing determinísticas e não-determinísticas. As

determinísticas são aquelas que quando estão em certo estado, lendo certo dado,

podem se movimentar de um único modo rumo à próxima configuração; já as não-

determinísticas podem se mover para diversas configurações, a partir do dado lido e

da configuração interna atual. Evidentemente as máquinas determinísticas formam

uma subclasse das não-determinísticas.

Figura 4: Fita representando uma Máquina de Turing

Page 15: NP Completude - Loiane

13

Que ligação afinal existe entre máquinas de Turing e linguagens? Em termos breves,

se L é uma linguagem sobre um alfabeto S, isto é, se L é um subconjunto finito de

seqüências de letras de S, dizemos que uma máquina de Turing M aceita a

linguagem L se para toda palavra construída com as letras de S colocada como

entrada (input), após o processamento M entra em um estado de aceitação

(respondendo de algum modo sim) se a palavra pertencer à linguagem. A palavra é

recusada por M se, após o processamento M entra num estado de rejeição

(respondendo não de algum modo) ou se ela falhar em completar seu processo

computacional.

Neste contexto, o problema P versus NP assume a seguinte forma:

É verdade que toda linguagem aceita em tempo polinomial por uma máquina de

Turing não-determinística é também aceita, em tempo polinomial, por uma máquina

determinística?

Quais conseqüências a resolução positiva desta conjectura pode trazer? Destacam-

se três:

• A existência de algoritmos úteis para uma série de problemas computacionais

práticos nas indústrias;

• A destruição da segurança nas transações financeiras feitas eletronicamente;

• A quebra no sigilo de trocas de informações diplomáticas, Internet, etc.

A possível destruição dos códigos de segurança se deve ao fato de que a maioria

dos algoritmos criptográficos são construídos sobre a hipótese da impossibilidade de

uma criptoanálise em tempo polinomial.

Page 16: NP Completude - Loiane

14

6 CARÁTER NP-COMPLETO

Talvez a razão mais forte pela qual os cientistas da computação teoria acreditam

que P NP seja a existência da classe de problemas “NP - Completos”. Essa

classe tem a surpreendente propriedade de que, se qualquer problema NP -

Completo pode ser resolvido em tempo polinomial, então todo problema em NP tem

uma solução polinomial, isto é, P = NP. Entretanto, apesar de anos de estudo,

nenhum algoritmo de tempo polinomial jamais foi descoberto para qualquer

problema NP - Completo.

6.1 REDUTIBILIDADE

Considere as seguintes suposições:

Suposição 1: Tem-se um problema de decisão A que se deseja resolver em tempo

polinomial. Chama-se de instância a entrada para um determinado problema.

Suposição 2:Existe um problema de decisão diferente B, que já se sabe como

resolver em tempo polinomial.

Suposição 3:Tem-se um procedimento que transforma qualquer instância α de A em

alguma instância β de B com as seguintes características:

• A transformação demora tempo polinomial.

• As respostas são as mesmas, isto é, a resposta para α é “sim” se e somente

se a resposta para β também é sim.

Chama-se tal procedimento de algoritmo de redução de tempo polinomial e este

oferece um meio para resolver o problema A em tempo polinomial (pode ser

observado na figura 5):

1 Dada uma instância α do problema A, use o algoritmo de redução de

tempo polinomial para transformá-la em uma instância β do problema

B.

2 Execute o algoritmo de decisão de tempo polinomial para B sobre a

instância β.

Page 17: NP Completude - Loiane

15

3 Use a resposta de β como a resposta para α.

Exemplo: o problema de resolver equações lineares em um x indeterminado se

reduz ao problema de resolver equações quadráticas. Dada uma instância ax + b =

0, transforma-se essa instância em 0x2 + ax + b = 0, cuja solução fornece uma

solução para ax + b = 0 Desse modo, se um problema A se reduz a outro problema

B, então A não é, em certo sentido, “mais difícil de resolver” que B.

O caráter NP - Completo consiste em mostrar o quanto um problema é difícil, em vez

de mostrar o quanto ele é fácil. Para isso, usam-se reduções de tempo polinomial da

maneira oposta.

As reduções de tempo polinomial proporcionam um meio formal de mostrar que um

problema é pelo menos tão difícil quanto outro, até dentro de um fator de tempo

polinomial isto é, se , então L1 não é mais que um fato polinomial mais difícil

que L2, e esse é o motivo pelo qual a notação “menor que ou igual a” para redução é

mnemônica.

Uma linguagem é NP – Completa se

Se uma linguagem L satisfaz à propriedade 2, mas não necessariamente à

propriedade 1, diz-se que L é NP – Difícil (ou NP - Árduo).

Figura 5: redução de problemas

Page 18: NP Completude - Loiane

16

6.2 IMPORTÂNICA DO CARÁTER NP – COMPLETO

Teorema: se qualquer problema NP – Completo pode ser resolvido em tempo

polinomial, então P = NP. Se qualquer problema em NP não pode ser resolvido

em tempo polinomial, então nenhum problema NP – Completo pode ser resolvido

em tempo polinomial.

Prova: suponha que L P e também que L NPC. Para qualquer NP, temos

L pela propriedade 2 do caráter NP – Completo citada no tópico anterior.

Desse modo, pelo Lema abaixo, também se tem que P, o que prova o primeiro

enunciado do teorema. A prova do segundo enunciado é contra positivo do primeiro

enunciado.

Page 19: NP Completude - Loiane

17

7 HIERARQUIA DAS COMPLEXIDADES

Não se sabe se P = NP, mas a maioria dos pesquisadores acredita que P e NP não

são a mesma classe. Intuitivamente, a classe P consiste em problemas que podem

ser resolvidos com rapidez a classe NP consiste em problemas para os quais uma

solução pode ser verificada rapidamente. Logicamente, é mais difícil resolver um

problema a partir do início que verificar uma solução apresentada com clareza, em

especial quando se trabalha sob restrições de tempo.

Muitas outras perguntas fundamentais além da pergunta de P NP permanecem

não resolvidas. Apesar de muitas pesquisas, não se sabe ao certo se a classe NP é

fechada sob o complemento, ou seja, L NP implica NP?

Pode-se definir a classe de complexidade co – NP como o conjunto de linguagens L

tais que NP. A questão de saber se NP é fechada sob o complemento pode ser

redefinida como se NP = co – NP. Tendo em vista que P é fechada sob o

complemento, ou seja, se L P, então P, decorre que P NP co – NP

porém, não se sabe se P = NP co – NP ou se existe alguma linguagem em NP

co- NP – P. A figura abaixo mostra as possíveis relações:

Page 20: NP Completude - Loiane

18

7.1 OUTRAS CLASSES DE COMPLEXIDADE

Assim como a classe co – NP, outras classes surgiram ao redor de P e NP. Por

exemplo, as classes Dlog - Espaço e P-Espaço. Todos os problemas que podem ser

resolvidos em tempo polinomial utilizam requisitos polinomiais de espaço e memória.

A veracidade da recíproca, porém, é ainda uma questão em aberto, ou seja,

estabelecer a existência de problemas cuja solução pode ser obtida com requisito de

espaço polinomial.

A classe Dlog – Espaço é formada pelos problemas que, para sua solução,

adicionalmente ao espaço utilizado para os dados da instância, têm requisitos

limitados por uma função logarítmica nos dados de entrada, enquanto os problemas

da classe P – Espaço, têm requisitos de espaço polinomial. É trivial notar que Dlog –

Espaço P NP P – Espaço e conjectura - se que cada uma destas inclusões é

própria.

Figura 9: Hierarquia de Problemas

Page 21: NP Completude - Loiane

19

8 PROBLEMAS P E NP

Divisão dos problemas:

• Problemas Fáceis são resolvidos por algoritmos polinomiais

• Problemas Difíceis somente possuem algoritmos exponenciais para resolvê-

los.

8.1 PROBLEMAS FAMOSOS

• Algoritmos Polinomiais: função de complexidade é O(p(n)), onde p(n) é um

polinômio.

Exemplos:

1 Algoritmos com pesquisa binária (O(log n));

2 Pesquisa seqüencial (O(n));

3 Ordenação por inserção (O(n2));

4 Multiplicação de matrizes (O(n3)).

• Algoritmos exponenciais: função de complexidade é O(cn), c > 1.

Exemplos:

1 Problema do caixeiro viajante (O(n!));

2 Torres de Hanói (O(2n)).

Page 22: NP Completude - Loiane

20

8.1.1 Caminho em um Grafo

Considere um grafo com peso nas arestas, dois vértices i, j e um inteiro k > 0, como

mostra a figura 9:

• Fácil: Existe um caminho de i até j com peso k?

Existe um algoritmo eficiente com complexidade de tempo O (A log V), sendo A o

número de arestas e V o número de vértices (algoritmo de Dijkstra)

• Difícil: Existe um caminho de i até j com peso k?

Não existe algoritmo eficiente. É equivalente ao problema do caixeiro viajante em

termos de complexidade.

8.1.2 Coloração de um Grafo

Em um grafo G = (V, A), mapear , sendo S um conjunto finito de cores tal

que se então c(v) c(w), ou seja, vértices adjacentes possuem cores

distintas.

O número cromático X(G) de G é o menor número de cores necessário para colorir

G, isto é, o menor k para o qual existe uma coloração C para G e |C(V)| = k.

O problema é produzir uma coloração ótima, que é a que usa apenas X(G) cores.

Figura 10:

Page 23: NP Completude - Loiane

21

Formulação do tipo “sim/não”: dados G e um inteiro positivo k, existe uma coloração

de G usando k cores?

• Fácil: k = 2

• Difícil: k > 2

Uma aplicação para este problema na otimização de compiladores: escalonar o uso

de um número finito de registradores (idealmente o número mínimo). No trecho de

programa a ser otimizado, cada variável tem intervalos de tempo em que seu valor

tem de permanecer inalterado, como depois de inicializada e antes do uso final. As

variáveis com interseção nos tempos de vida útil não podem ocupar o mesmo

registrador.

Modelagem por grafo: os vértices representam variáveis e cada aresta liga duas

variáveis que possuem interseção nos tempos de vida. A coloração dos vértices

atribui cada variável a um agrupamento (ou classe). Duas variáveis com a mesma

cor não colidem, podendo assim ser atribuídas ao mesmo registrador.

Evidentemente, não existe conflito se cada vértice for colorido com uma cor distinta.

Porém, o objetivo é encontrar uma coloração usando o mínimo de cores, pois os

computadores têm um número limitado de registradores.

Uma outra aplicação do problema da coloração de grafos: suponha que os exames

finais de um curso tenham de ser realizados em uma única semana. As disciplinas

Figura 11: exemplo de coloração de um grafo

Page 24: NP Completude - Loiane

22

com alunos de cursos diferentes devem ter seus exames marcados em horários

diferentes. Dada uma lista de todos os cursos e outra lista de todas as disciplinas

cujos exames não podem ser marcados no mesmo horário, o problema em questão

pode ser modelado como um problema de coloração de grafos.

8.1.3 Ciclo de Hamilton

O ciclo de Hamilton é um ciclo simples, ou seja, passa por todos os vértices uma

única vez.

O caminho de Hamilton é um caminho simples, ou seja, passa por todos os vértices

uma única vez.

Exemplo de ciclo de Hamilton de acordo com a figura acima: 0 1 4 2 3 0.

Exemplo de caminho de Hamilton de acordo com a figura acima: 0 1 4 2 3.

Problema: Existe um ciclo de Hamilton no grafo G?

• Fácil: grafos com grau máximo = 2, ou seja, vértices com no máximo duas

arestas incidentes.

• Difícil: grafos com grau > 2.

Uma justificativa para a resposta SIM pode ser obtida exibindo-se um ciclo C de G e

reconhecendo-se que C é de fato hamiltoniano.

Figura 12: grafo hamiltoniano

Page 25: NP Completude - Loiane

23

Uma justificativa para a resposta NÃO (mais difícil) pode ser apresentada listando-se

todos os ciclos simples de G e verificando-se que nenhum deles é hamiltoniano.

8.1.4 Cobertura de Arestas e Vértices (Vertex - Cover)

Uma cobertura de arestas de um grafo G = (V,A) é um subconjunto de k

arestas tal modo que todo v V é parte de pelo menos uma aresta de A’.

O conjunto resposta para k = 4 é .

Uma cobertura de vértices é um subconjunto V’ V tal que se (u,v) A então

, isto é, cada aresta do grafo é incidente em um dos vértices de V’.

Na figura acima, o conjunto resposta é: , para k = 3.

Figura 13:

Figura 14:

Page 26: NP Completude - Loiane

24

Dados um grafo e um inteiro > 0

• Fácil: há uma cobertura de arestas k?

• Difícil: há uma cobertura de vértices k?

8.1.5 Problema da Satisfabilidade (SAT)

Considere um conjunto de variáveis booleanas x1, x2, ..., xn, que podem assumir

valores lógicos verdadeiro ou falso.

A negação de xi é representada por xi’.

Expressão booleana: variáveis booleanas e operações OU (v) e E(^), também

chamadas respectivamente de adição e multiplicação.

Uma expressão booleana E contendo um produto de adições de variáveis booleanas

é dita estar na forma normal conjuntiva.

Problema: Dada E na forma normal conjuntiva, com variáveis xi, 1 i n, existe

uma atribuição de valores verdadeiro ou falso ás variáveis que torne E verdadeira,

ou seja que satisfaça a expressão?

Exemplo: E1 = (x1 v x2) ∧ (x1 v x3’ v x2) ∧ (x3) é satisfatível se x1 = F, x2 = V, x3 = V.

Figura 15: exemplo de cobertura de vértices

Page 27: NP Completude - Loiane

25

E2 = x1 ∧ x1’ não é satisfatível.

Uma aplicação para esse problema é na definição de circuitos elétricos

combinatórios que produzam valores lógicos como saída e sejam constituídos de

portal lógicas E, OU e NÃO.

Neste caso, o mapeamento é direto, pois o circuito pode ser descrito por uma

expressão lógica na forma normal conjuntiva.

8.1.6 Clique de um Grafo

Clique de um grafo G = (V,A) é constituído do subconjunto V’ V, tal que

Todo par de vértices de V’ é adjacente (V’ é um subgrafo completo).

Exemplo de cardinalidade 3 para o grafo abaixo é: V’ = {3, 1, 4}.

Figura 16: Circuito

Page 28: NP Completude - Loiane

26

O problema de identificar agrupamentos de objetos relacionados freqüentemente se

reduz a encontrar grandes cliques em grafos.

Exemplo: uma empresa de fabricação de peças por meio de injeção plástica que

fornece para diversas outras empresas montadoras. Para reduzir o custo relativo ao

tempo de preparação das máquinas injetoras, pode-se aumentar o tamanho dos

lotes produzidos para cada peça encomendada. Para isso, é preciso identificar os

clientes que adquirem os mesmos produtos, para negociar prazos de entrega

comuns e assim aumentar o tamanho dos lotes produzidos.

Solução: construir um grafo com cada vértice representando um cliente e ligar com

uma aresta os que adquirem os mesmos produtos. Um clique do grafo representa o

conjunto de cliente que adquirem os mesmo produtos.

8.1.7 Problema da Parada

É um exemplo de problema Np – difícil que não é Np – Completo.

Consiste em determinar, para um algoritmo determinista qualquer A com entrada de

dados E, se o algoritmo A termina ou entra em loop infinito (muito útil para

compiladores).

É um problema indecidível, ou seja, não há algoritmo de qualquer complexidade

para resolvê-lo.

Figura 17: clique

Page 29: NP Completude - Loiane

27

Figura 18:

Page 30: NP Completude - Loiane

28

9 PROVAS

9.1 TEOREMA DE COOK

Existe algum problema em NP tal que se ele for mostrado estar em P, implicaria P =

NP?

Teorema de Cook: Satisfabilidade (SAT) está em P se e somente se P = NP, ou

seja, se existisse um algoritmo polinomial determinista para satisfabilidade, então

todos os problemas em NP poderiam ser resolvidos em tempo polinomial.

A prova considera dois sentidos:

1. SAT está em NP (basta apresentar um algoritmo não determinista que

execute em tempo polinomial). Logo, se P = NP, então SAT está em P.

2. Se SAT está em P, então P = NP. A prova descreve como obter de qualquer

algoritmo polinomial não determinista de decisão A, com entrada E, uma

fórmula Q(A,E) de modo que Q é satisfatível se e somente se A termina com

sucesso para E. O comprimento de tempo para construir Q é O(p3(n) log(n)),

onde n é o tamanho de E e p(n) é a complexidade de A.

9.2 PROVA DE QUE UM PROBLEMA É NP – COMPLETO

Para provar que um problema é NP - Completo são necessários os seguintes

passos:

1. Mostre que o problema está em NP.

2. Mostre que um problema NP – Completo conhecido pode ser polinomialmente

transformado para ele.

Essa prova é possível porque Cook apresentou uma prova direta de que SAT é

NP – Completo, além do fato de a redução polinomial ser transitiva.

Page 31: NP Completude - Loiane

29

Para ilustrar como um problema A pode ser provado ser NP - Completo, basta

considerar um problema já provado ser NP – Completo e apresentar uma redução

polinomial desse problema para A.

9.3 OUTRAS PROVAS

Aqui serão demonstradas algumas provas de alguns dos problemas mais famosos.

9.3.1 Clique ∈∈∈∈ NP?

(i) A justificativa para a solução SIM é um subconjunto V’ de vértices do grafo G.

(ii) Para verificar a justificativa SIM basta

- verificar o tamanho do subconjunto apresentado, O(|V’|) – contar os

vértices – e verificar se o tamanho é maior ou igual ao valor K de entrada.

O(1) – uma comparação simples

- verificar se existem arestas em G entre todos os pares de vértices de V’,

que pode ser feito em no máximo O(|V’|2) – para cada vértice de V’

verificar se existem arestas para os outros.

Como tudo pode ser feito em tempo polinomial, então Clique ∈ NP. Note que |V’| <

|V|, logo é polinomial na entrada do problema, não apenas no tamanho da

justificativa.

9.3.2 Ciclo Hamiltoniano ∈∈∈∈ NP ?

(i) A justificativa para a solução SIM é uma seqüência de vértices de G

(ii) Para verificar a justificativa SIM basta

- verificar se cada vértice aparece exatamente uma vez – contar quantos

existem, O(n) e verificar se não há repetido, O(n) – basta marcar enquanto

verifica e observar se não marcou mais de uma vez

- verificar se existem arestas ligando os vértices consecutivos, O(n) – à

medida que percorre a seqüência observar o valor em uma matriz de

adjacência

Tudo pode ser feito em tempo polinomial, logo Ciclo Hamiltoniano ∈ NP.

Page 32: NP Completude - Loiane

30

9.3.3 Clique é NP-Completo?

Os dados de entrada Clique são um grafo e um inteiro positivo k. Seja C um clique

do grafo. Pode-se reconhecer se C é um clique e computar seu tamanho em tempo

polinomial no tamanho da entrada de Clique, logo Clique ∈ NP. É necessário agora

mostrar que algum problema NP - Completo pode ser polinomialmente transformável

em Clique. Vamos usar o problema de Satisfabilidade. Seja E uma expressão

genérica de entrada para o problema de Satisfabilidade, contendo as cláusulas L1,

L2, ..., Lp. A questão de decidir se E pode ou não ser satisfeita será transformada

numa questão de decidir se um certo grafo G=(V.A) possui ou não um clique de

tamanho ≥ p. O grafo G é construído da seguinte maneira: existe um vértice

diferente em G para cada ocorrência de variável em E; existe uma aresta (vi, vj) em

G, para cada par de variáveis xi, xj de E, tais que xi ≠ xj’, e xi, xj ocorrem em

cláusulas diferentes de E. Desta forma, cada aresta (vi, vj) de G é tal que as

variáveis xi e xj, correspondentes em E, estão em cláusulas diferentes e podem

assumir o valor verdadeiro simultaneamente. Logo um clique em G com p vértices

corresponde em E a p variáveis, uma em cada cláusula (pois não há arestas entre

variáveis da mesma cláusula), que podem assumir o valor verdadeiro

simultaneamente (pois não há aresta ligando variáveis x1 a x1’, x2 a x2’...). A

recíproca é verdadeira. Portanto, decidir se E pode ser satisfeita é equivalente a

decidir se G possui um Clique de tamanho ≥ p. A construção de G pode ser feita a

partir de E em tempo polinomial com o tamanho de E. Assim, já que:

(i) Clique ∈ NP

(ii) Satisfabilidade é NP - Completo e Satisfabilidade ∝ Clique

então, Clique é NP - Completo.

E = (x1 ∨ x2’) ∧ (x1’ ∨ x2’ ∨ x3) ∧ (x1’ ∨ x2 ∨ x3’)

Page 33: NP Completude - Loiane

31

x1

x2’

x1’

x2’

x3

x1’

x2

x3’

Note que cada clique de tamanho 3 no grafo ao lado corresponde a uma atribuição

de Verdadeiro às variáveis correspondentes em E de tal forma que E seja satisfeita.

Em particular o clique mostrado diz que se x1 = V, x2’ = V e x3’ = V, então E = V. Ou

seja, uma solução é x1 = V, x2 = F e x3 = F.

9.3.4 Problema de decisão do Caixeiro Viajante é NP - Completo ?

Este problema de decisão consiste em se determinar se há um ciclo que passa por

todos os vértices apenas uma vez com peso total no máximo um valor k. Precisamos

mostrar que este problema é NP e que algum NP - Completo se reduz a ele. Para

isto usaremos o problema NP - Completo Ciclo Hamiltoniano.

(i) Decisão do Caixeiro Viajante é NP

A exibição da justificativa SIM pode ser dada por uma seqüência de vértices. A

verificação da justificativa apresentada consiste em se verificar que cada vértice

aparece na seqüência apenas uma vez, O(n) – percorrer a lista marcando os

vértices, observando se já não foram marcados, verificar se contém todos os

vértices, O(1) – durante a marcação contar os vértices, e verificar se o peso total não

ultrapassa o valor k, O(n) – percorrer a lista somando-se os pesos das arestas,

descobrir cada peso é O(1) se os dados estão em uma matriz de adjacência. Como

o algoritmo é polinomial, então o problema é da classe NP.

Figura 19:

Page 34: NP Completude - Loiane

32

(ii) Decisão do Ciclo Hamiltoniano ∝ Decisão do Caixeiro Viajante

Seja um grafo G com n vértices para o qual queremos decidir se existe ou não um

ciclo hamiltoniano. Construímos um grafo G’ a partir de G contendo todos os vértices

e arestas de G. Atribuímos peso 1 a todas estas arestas. Criamos todas as demais

arestas não existentes em G’ com peso 2. É fácil notar que existe um ciclo em G’,

que passa em todos os vértices exatamente uma vez, com peso no máximo n, se e

somente se existe ciclo hamiltoniano em G, pois assim haveria um ciclo em G’

passando apenas por arestas de peso 1. Se não houver, um ciclo em G’ deverá

passar por aresta de peso 2, o que ultrapassará o peso total n.

b

c

ed

af

G

b

c

ed

af

1

1

1

1

11

1

2

2

2

22 1

2

2

G’

O ciclo {a,b,c,d,e,f,a} em G’ tem peso total 6, e representa um ciclo hamiltoniano em G, um grafo de 6 vértices.

Logo, como

- Decisão do Caixeiro Viajante é NP;

- Decisão do Ciclo Hamiltoniano ∝ Decisão do Caixeiro Viajante;

- Decisão do Ciclo Hamiltoniano é NP-Completo (não foi mostrado neste texto);

então Decisão do Caixeiro Viajante é NP-Completo.

9.3.5 Problema de Otimização do Caixeiro Viajante é NP-

Difícil?

Já foi mostrado que o problema de decisão do caixeiro viajante é NP - Completo.

Portanto, encontrar um ciclo em um grafo G que passe por todos os vértices, sem

repetição, com peso total no máximo k, é NP - Completo. Se resolver o problema de

otimização do caixeiro viajante para este grafo G, o peso total p do ciclo encontrado

é o menor valor possível. Se p ≤ k, então o problema de decisão tem resposta SIM.

Se p > k então o problema de decisão tem reposta NÃO. Logo, é possível

Figura 20:

Page 35: NP Completude - Loiane

33

transformar polinomialmente Decisão do Caixeiro Viajante em Otimização do

Caixeiro Viajante, já que a transformação da entrada – o grafo é o mesmo - e da

saída – uma comparação – é O(1). Como a decisão é NP - Completo, então a

otimização do caixeiro viajante é NP - Difícil.

9.3.6 Halting problem é NP - Difícil ?

Um exemplo de um problema NP - Difícil que não é NP - Completo é o problema de

parada (halting problem). O problema consiste em se decidir para qualquer algoritmo

e qualquer entrada se o algoritmo vai terminar ou entrar em loop infinito. Para

mostrar que halting problem é NP - Difícil, mostraremos que SAT ∝ halting problem.

A entrada do algoritmo é a expressão E com n variáveis. O algoritmo testa as 2n

possibilidades de valores para as variáveis. Se algum delas satisfizer a expressão E,

o algoritmo pára. Senão, entra em loop infinito. Claramente um algoritmo para halting

problem resolve o problema de satisfabilidade, ou seja, se fosse feito um algoritmo

para halting problem, ele poderia ser usado para resolver satisfabilidade. Logo,

halting problem é NP - Difícil. Mas este problema é indecidível, não há algoritmo de

qualquer complexidade que o resolva. Então ele não é NP. Logo não pode ser NP -

Completo.

Page 36: NP Completude - Loiane

34

10 PROBLEMAS EXPONENCIAIS

É desejável resolver instâncias grandes de problemas de otimização em tempo

razoável. Os melhores algoritmos para problemas NP – Completo têm

comportamento de pior caso exponencial no tamanho da entrada. Para um algoritmo

que execute em tempo proporcional a 2n, não é garantido obter resposta para todos

os problemas de tamanho n > 100.

Independente da velocidade do computador, ninguém poderia esperar por um

algoritmo que leva 2100 passos para terminar uma tarefa. Um supercomputador

poderia resolver um problema de tamanho n = 50 em 1 hora, ou n = 51 em 2 horas,

ou n = 59 em 1 ano. Nem um computador paralelo com um milhão de processadores

(cada um sendo um milhão de vezes mais rápido que o mais rápido existente) é

suficiente para n = 100.

O que fazer então para resolver problemas exponenciais?

• Usar algoritmos exponenciais “eficientes” aplicando técnicas de tentativa e

erro;

• Usar algoritmos aproximados. Acham uma resposta que pode não ser a

solução ótima, mas é garantido ser próxima dela;

• Concentrar no caso médio. Buscar algoritmos melhores que outros neste

quesito e que funcionem bem para as entradas de dados que ocorrem

usualmente na prática. Porém, existem poucos algoritmo exponenciais que

mão muito úteis. Um exemplo é o Simplex (Programação Linear): a

complexidade de tempo é exponencial no pior, mas é muito rápido na prática.

Esses exemplos são muito raros, pois a grande maioria dos algoritmos

exponenciais conhecidos não é muito útil.

Page 37: NP Completude - Loiane

35

10.1 ALGORITMOS APROXIMADOS PARA PROBLEMAS NP – COMPLETOS

Para projetar algoritmos polinomiais para “resolver” um problema de otimização Np –

Completo é necessário relaxar o significado de resolver. Para isso, deve-se remover

a exigência de que o algoritmo tenha sempre de obter a solução ótima.

Procura-se algoritmos eficientes que não garantem obter a solução ótima, mas

sempre obtêm uma próxima da ótima. Tal solução, com uma valor próximo da ótima,

é chamada de solução aproximada.

Um algoritmo aproximado para um problema π é um algoritmo que gera soluções

aproximadas para π, para ser útil, é importante obter um limite para a razão entre a

solução ótima e a produzida pelo algoritmo aproximado.

O comportamento de algoritmo aproximados quanto à qualidade dos resultados (não

o tempo para obtê-los) tem de ser monitorado.

Seja I uma instância de um problema π e seja S*(I) o valor da solução ótima para I.

Um algoritmo aproximado gera uma solução possível para I cujo valor S(I) é maior

(pior) do que o valor ótimo S*(I). Dependendo do problema, a solução a ser obtida

pode minimizar ou maximizar S(I). No caso do algoritmo aproximado obter a solução

ótima, então S(I) = S*(I).

Um algoritmo aproximado para um problema π é um algoritmo polinomial que produz

uma solução S(I) para uma instância I de π.

O comportamento do algoritmo A é descrito pela razão de aproximação:

que representa um problema de minimização. No caso de maximização, a razão é

invertida. Em ambos o casos, Ra(I) >= 1.

Page 38: NP Completude - Loiane

36

11 CONLUSÃO

De uma forma geral, abordou-se as principais definições iniciais sobre os problemas

NP - completos. Todos os conceitos relacionados aqui são extremamente

importantes para o entendimento da teoria sobre NP -Completude. A necessidade

de se compreender as características desses problemas, os relacionamentos entre

eles, e as técnicas utilizadas para a definição formal do tipo de problema são muito

importantes para que, na prática, não se tente resolver um problema aparentemente

parecido com outros problemas que são facilmente solucionáveis, mas que no fundo

oferecem uma dificuldade muito superior e acabam por inviabilizar qualquer

implementação que tente encontrar a solução exata.

É importante conhecer os rudimentos dessa teoria para que se possa identificar um

problema como NP ou NP - completo. Dessa forma, terá uma boa evidência da

intratabilidade do mesmo. Seu tempo será melhor se desenvolver um algoritmo de

aproximação ou resolvendo um caso especial tratável, ao invés de procurar por um

algoritmo rápido que resolva o problema exatamente. Outra forma de se tentar

resolver o problema, além da utilização de algoritmos de aproximação e da restrição

da entrada do problema, é utilizar o método "força bruta", onde se testa todas as

possibilidades, e se sabe que ele vai funcionar para até um certo tamanho, para o

qual se consegue esperar. Passou daquele tamanho, não se consegue mais. Pode-

se utilizar este método porque se consegue verificar o resultado em tempo

polinomial.

Page 39: NP Completude - Loiane

37

12 REFERÊNCIAS

ALMEIDA, Charles Ornelas; ZIVIANI, Nivio. Problemas NP - Completo e

Algoritmos Aproximados. Belo Horizonte, 2004. Disponível em: <

http://www.dcc.ufmg.br/algoritmos/cap9/transp/completo1/cap9.pdf> Acesso em: 16

nov. 2006.

ALOISE, Dário José. Problemas NP - Completos. Natal, 2002. Disponível em: <

http://muriu.dimap.ufrn.br/~dario/arquivos/Cap4_Grafos-2001.pdf> Acesso em: 16

nov. 2006.

CAMPELLO, Ruy Eduardo; MACULAN, Nelson. Algoritmos e Heurísticas:

Desenvolvimento e Avaliação de Performande. Niterói - RJ: Eduff, 1994.

COOK, Sthepen. The P versus NP Problem. Disponível em: <

http://www.claymath.org/millennium/P_vs_NP/pvsnp.pdf> Acesso em: 04 nov. 2006.

CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L. Algoritmos:

Teoria e Prática. Rio de Janeiro: Campus, 2002.

FARIA, João Pascal. A classe de problemas NP. Porto - Portual, 2006. Disponível

em: < http://paginas.fe.up.pt/~jpf/teach/CES0506/NP.pdf> Acesso em: 16 nov. 2006.

FERREIRA, Fernando. O problema P versus NP. Lisboa - Portual, 2006. Disponível

em: < http:// www.ciul.ul.pt/~ferferr/PversusNP.pdf > Acesso em: 16 nov. 2006.

FIGUEIREDO, José César Abrantes de. NP - Completude. Lisboa - Portual, 2006.

Disponível em: < http://paginas.fe.up.pt/~jpf/teach/CES0506/NP.pdf > Acesso em: 04

nov. 2006.

GOODROCH, Michael; TAMASSIA, Roberto. Algorithm Design: Foundation,

Analysis and Internet Examples. John Wiley & Sons Inc.

GUIMARÃES, Daniele Constant. Problemas NP-Completos II. Campinas, 2003.

Disponível em: <

Page 40: NP Completude - Loiane

38

http://www.ic.unicamp.br/~meidanis/courses/mo417/2003s1/aulas/2003-06-18.html >

Acesso em: 04 nov. 2006.

MALAGUTTI, Pedro Luiz Aparecido. P versus NP. São Carlos, 2002. Disponível em:

< http://www.dm.ufscar.br/hp/hp501/hp501001/hp501001.html> Acesso em: 04 nov.

2006.

MANBER, Udi. Introduction to Algorithms: A Creative Approach. São Paulo:

Addison Wesley, 1989.

TOSCANI, Laria V.; VELOSO, Paulo S. Complexidade de Algorimos. Sagra-

Luzzato, 2005.

Page 41: NP Completude - Loiane

39

ANEXOS

Page 42: NP Completude - Loiane

40

ANEXO A – LISTA DE EXERCÍCIOS

Exercício 01:

Marque V ou F:

( ) Se existir um algoritmo polinomial que determine o tamanho de um “clique”

máximo de um dado grafo, então P=NP.

( ) Se A pertence a P então também pertence a NP.

( ) Existem problemas de decisão que não pertencem nem a NP nem a co-NP.

( ) Se descobrisse um algoritmo polinomial para o problema do ciclo hamiltoniano,

então todos os problemas da classe co-NP passariam também a ter um algoritmo

polinomial.

Exercício 02:

Defina as classes de complexidade P e NP.

Exercício 03

Liste 3 exemplos de problemas P.

Exercício 04

Liste 3 exemplos de problemas NP.

Exercício 05

Dependendo do tamanho da entrada, os problemas exponenciais podem demorar

muito para apresentar uma solução. O que fazer para resolver esses problemas?

Exercício 06

Qual a importância de estudar a teoria NP – Completude?