SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
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
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
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
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
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.
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.
5




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


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




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

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




               Figura 4: Fita representando uma Máquina de Turing



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.
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.
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 β.
15



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




                               Figura 5: redução de problemas


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




                                    Figura 10:
   •   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.
21




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



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




                         Figura 12: grafo hamiltoniano



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




                                   Figura 13:



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




                                     Figura 14:


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




                             Figura 15: exemplo de cobertura de
                                          vértices


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




                                    Figura 16: Circuito



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}.
26




                                    Figura 17: clique


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




Figura 18:
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.
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.
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’)
31



                                         x1’                 x1’


                       x1


                                         x2’                 x2


                       x2’


                                         x3                  x3’

                                    Figura 19:

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.
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                                         b
                                                                       2
                                            1                      1
                            f                                      1           f   O ciclo {a,b,c,d,e,f,a} em G’
a                               a                      1c              2           tem peso total 6, e representa
                                                2
                                        2                      1           1       um ciclo hamiltoniano em G,
                 c                  2           2 1                    2           um grafo de 6 vértices.
     d                  e               d                  1               e
             G                                        G’
                                                Figura 20:


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




ANEXOS
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?

Contenu connexe

Tendances

Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockWellington Oliveira
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Spr3001 -1._visao_geral_da_producao
Spr3001  -1._visao_geral_da_producaoSpr3001  -1._visao_geral_da_producao
Spr3001 -1._visao_geral_da_producaoGrp Di Bobera
 
Gestão de Serviços de TI com a ITIL. Uma introdução
Gestão de Serviços de TI com a ITIL. Uma introduçãoGestão de Serviços de TI com a ITIL. Uma introdução
Gestão de Serviços de TI com a ITIL. Uma introduçãoRildo (@rildosan) Santos
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelEduardo Nicola F. Zagari
 
Classes de complexidades de problemas
Classes de complexidades de problemasClasses de complexidades de problemas
Classes de complexidades de problemasDavid Achahui Perez
 
Enderecamento ip
Enderecamento ipEnderecamento ip
Enderecamento ipredesteste
 
3 escalonamento processos
3 escalonamento processos3 escalonamento processos
3 escalonamento processosfrteles
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Ricardo Terra
 
3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas
3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas
3 Variables LingüíSticas, Variables Difusas Y Reglas DifusasESCOM
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladoresDanilo Morais Pagano
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoElaine Cecília Gatto
 

Tendances (20)

03 linguagens regulares
03   linguagens regulares03   linguagens regulares
03 linguagens regulares
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
 
Automação Residencial
Automação ResidencialAutomação Residencial
Automação Residencial
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Spr3001 -1._visao_geral_da_producao
Spr3001  -1._visao_geral_da_producaoSpr3001  -1._visao_geral_da_producao
Spr3001 -1._visao_geral_da_producao
 
Gestão de Serviços de TI com a ITIL. Uma introdução
Gestão de Serviços de TI com a ITIL. Uma introduçãoGestão de Serviços de TI com a ITIL. Uma introdução
Gestão de Serviços de TI com a ITIL. Uma introdução
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - Microkernel
 
Domain driven-design
Domain driven-designDomain driven-design
Domain driven-design
 
Classes de complexidades de problemas
Classes de complexidades de problemasClasses de complexidades de problemas
Classes de complexidades de problemas
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Enderecamento ip
Enderecamento ipEnderecamento ip
Enderecamento ip
 
3 escalonamento processos
3 escalonamento processos3 escalonamento processos
3 escalonamento processos
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)
 
3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas
3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas
3 Variables LingüíSticas, Variables Difusas Y Reglas Difusas
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
Paa algoritmos gulosos
Paa  algoritmos gulososPaa  algoritmos gulosos
Paa algoritmos gulosos
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de Programação
 

En vedette

Ética - Dalmo de Abreu Dallari
Ética - Dalmo de Abreu DallariÉtica - Dalmo de Abreu Dallari
Ética - Dalmo de Abreu Dallaricheilon
 
VIII Congreso ANABAD
VIII Congreso ANABADVIII Congreso ANABAD
VIII Congreso ANABADmarguiama
 
La Brecha Digital Mitosy Realidades
La Brecha Digital Mitosy RealidadesLa Brecha Digital Mitosy Realidades
La Brecha Digital Mitosy Realidadestaniaprodriguez
 
Revolta da vacina
Revolta da vacina Revolta da vacina
Revolta da vacina adriana
 
Calculo del intervalo mediano y de los cuartiles
Calculo del intervalo mediano y de los cuartilesCalculo del intervalo mediano y de los cuartiles
Calculo del intervalo mediano y de los cuartilesJoooseee
 
Guía para elaborar correctamente la visión y misión de la
Guía para elaborar correctamente la visión y misión de laGuía para elaborar correctamente la visión y misión de la
Guía para elaborar correctamente la visión y misión de laMarjorie Reyes Zambrano
 
El cielo en la tierra, la tierra en el cielo.
El cielo en la tierra, la tierra en el cielo.El cielo en la tierra, la tierra en el cielo.
El cielo en la tierra, la tierra en el cielo.SoyReiki
 
Impuesto Selectivo al Consumo
Impuesto Selectivo al ConsumoImpuesto Selectivo al Consumo
Impuesto Selectivo al ConsumoSandraJCh1998
 
Interacciones farmacológicas y reacciones adversas
Interacciones farmacológicas y reacciones adversasInteracciones farmacológicas y reacciones adversas
Interacciones farmacológicas y reacciones adversasSebas Cueva
 
Programa de trazabilidad 583802
Programa de trazabilidad 583802Programa de trazabilidad 583802
Programa de trazabilidad 583802Jose Luis Medina
 
Cuentos 2008 De Jorge Gomez
Cuentos 2008 De Jorge GomezCuentos 2008 De Jorge Gomez
Cuentos 2008 De Jorge Gomezguestc93193
 
Mi Proyecto de Vida
Mi Proyecto de VidaMi Proyecto de Vida
Mi Proyecto de VidaDenisIcaza
 

En vedette (20)

Ética - Dalmo de Abreu Dallari
Ética - Dalmo de Abreu DallariÉtica - Dalmo de Abreu Dallari
Ética - Dalmo de Abreu Dallari
 
VIII Congreso ANABAD
VIII Congreso ANABADVIII Congreso ANABAD
VIII Congreso ANABAD
 
Estudio Gnostico de la Muerte
Estudio Gnostico de la MuerteEstudio Gnostico de la Muerte
Estudio Gnostico de la Muerte
 
La ventana de johari
La ventana de johari La ventana de johari
La ventana de johari
 
La Brecha Digital Mitosy Realidades
La Brecha Digital Mitosy RealidadesLa Brecha Digital Mitosy Realidades
La Brecha Digital Mitosy Realidades
 
Revolta da vacina
Revolta da vacina Revolta da vacina
Revolta da vacina
 
Calculo del intervalo mediano y de los cuartiles
Calculo del intervalo mediano y de los cuartilesCalculo del intervalo mediano y de los cuartiles
Calculo del intervalo mediano y de los cuartiles
 
Eolica
EolicaEolica
Eolica
 
Guía para elaborar correctamente la visión y misión de la
Guía para elaborar correctamente la visión y misión de laGuía para elaborar correctamente la visión y misión de la
Guía para elaborar correctamente la visión y misión de la
 
Habermas Jurgen Teoria de la accion comunicativa 1
Habermas Jurgen   Teoria de la accion comunicativa 1Habermas Jurgen   Teoria de la accion comunicativa 1
Habermas Jurgen Teoria de la accion comunicativa 1
 
Tobon 2
Tobon 2Tobon 2
Tobon 2
 
El cielo en la tierra, la tierra en el cielo.
El cielo en la tierra, la tierra en el cielo.El cielo en la tierra, la tierra en el cielo.
El cielo en la tierra, la tierra en el cielo.
 
Impuesto Selectivo al Consumo
Impuesto Selectivo al ConsumoImpuesto Selectivo al Consumo
Impuesto Selectivo al Consumo
 
Dia 5. tu eres un gran lider
Dia 5. tu eres un gran liderDia 5. tu eres un gran lider
Dia 5. tu eres un gran lider
 
Interacciones farmacológicas y reacciones adversas
Interacciones farmacológicas y reacciones adversasInteracciones farmacológicas y reacciones adversas
Interacciones farmacológicas y reacciones adversas
 
Programa de trazabilidad 583802
Programa de trazabilidad 583802Programa de trazabilidad 583802
Programa de trazabilidad 583802
 
Cuentos 2008 De Jorge Gomez
Cuentos 2008 De Jorge GomezCuentos 2008 De Jorge Gomez
Cuentos 2008 De Jorge Gomez
 
2476212
24762122476212
2476212
 
Mi Proyecto de Vida
Mi Proyecto de VidaMi Proyecto de Vida
Mi Proyecto de Vida
 
Sostenibilidad
SostenibilidadSostenibilidad
Sostenibilidad
 

Similaire à NP Completude - Loiane

Modelagem matematica
Modelagem matematicaModelagem matematica
Modelagem matematicaAndreza Lemos
 
Matemática volume único edwaldo bianchini e herval paccola
Matemática  volume único edwaldo bianchini e herval paccolaMatemática  volume único edwaldo bianchini e herval paccola
Matemática volume único edwaldo bianchini e herval paccolaAdriana Barbosa
 
sistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfsistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfJoelManuel8
 
Dissertação de Manuel Augusto Tomás Gomes.pdf
Dissertação de  Manuel Augusto Tomás Gomes.pdfDissertação de  Manuel Augusto Tomás Gomes.pdf
Dissertação de Manuel Augusto Tomás Gomes.pdfManuelAugustoGomes
 
METAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFAS
METAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFASMETAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFAS
METAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFASJoao Gonçalves
 
desenho-geometrico - Regua e Compasso
desenho-geometrico - Regua  e Compassodesenho-geometrico - Regua  e Compasso
desenho-geometrico - Regua e CompassoRobson S
 
A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...vcsouza
 
3488229 licenciatura-em-matematica-calculo-ii
3488229 licenciatura-em-matematica-calculo-ii3488229 licenciatura-em-matematica-calculo-ii
3488229 licenciatura-em-matematica-calculo-iiRenata Xavier
 

Similaire à NP Completude - Loiane (20)

Aa booklet
Aa bookletAa booklet
Aa booklet
 
Geometria 2
Geometria 2Geometria 2
Geometria 2
 
Modelagem matematica
Modelagem matematicaModelagem matematica
Modelagem matematica
 
arquivototal.pdf
arquivototal.pdfarquivototal.pdf
arquivototal.pdf
 
Mecanica
MecanicaMecanica
Mecanica
 
Matemática volume único edwaldo bianchini e herval paccola
Matemática  volume único edwaldo bianchini e herval paccolaMatemática  volume único edwaldo bianchini e herval paccola
Matemática volume único edwaldo bianchini e herval paccola
 
sistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdfsistemas_operacionais-livro.pdf
sistemas_operacionais-livro.pdf
 
Complex
ComplexComplex
Complex
 
Livro Completo sobre Maple
Livro Completo sobre MapleLivro Completo sobre Maple
Livro Completo sobre Maple
 
Estrutura de dados 3
Estrutura de dados 3Estrutura de dados 3
Estrutura de dados 3
 
Introdução a estrutura de dados
Introdução a estrutura de dadosIntrodução a estrutura de dados
Introdução a estrutura de dados
 
Tcc 2.0
Tcc 2.0Tcc 2.0
Tcc 2.0
 
Tcc 2.0
Tcc 2.0Tcc 2.0
Tcc 2.0
 
Dissertação de Manuel Augusto Tomás Gomes.pdf
Dissertação de  Manuel Augusto Tomás Gomes.pdfDissertação de  Manuel Augusto Tomás Gomes.pdf
Dissertação de Manuel Augusto Tomás Gomes.pdf
 
METAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFAS
METAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFASMETAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFAS
METAHEURÍSTICA GRASP APLICADA AO PROBLEMA DO SEQUENCIAMENTO DE TAREFAS
 
Funcões de uma variável
Funcões de uma variávelFuncões de uma variável
Funcões de uma variável
 
mech-course.pdf
mech-course.pdfmech-course.pdf
mech-course.pdf
 
desenho-geometrico - Regua e Compasso
desenho-geometrico - Regua  e Compassodesenho-geometrico - Regua  e Compasso
desenho-geometrico - Regua e Compasso
 
A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...A cadeia de Markov na análise de convergência do algoritmo genético quando...
A cadeia de Markov na análise de convergência do algoritmo genético quando...
 
3488229 licenciatura-em-matematica-calculo-ii
3488229 licenciatura-em-matematica-calculo-ii3488229 licenciatura-em-matematica-calculo-ii
3488229 licenciatura-em-matematica-calculo-ii
 

NP Completude - Loiane

  • 1. 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
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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.
  • 6. 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.
  • 7. 5 Figura 1: gráfico das funções de complexidade 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.
  • 8. 6 Figura 2: tabela de funções de complexidade vs. tempo 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.
  • 9. 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.
  • 10. 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.
  • 11. 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
  • 12. 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.
  • 13. 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.
  • 14. 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. Figura 4: Fita representando uma Máquina de Turing 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.
  • 15. 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.
  • 16. 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 β.
  • 17. 15 3 Use a resposta de β como a resposta para α. Figura 5: redução de problemas 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).
  • 18. 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.
  • 19. 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:
  • 20. 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
  • 21. 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)).
  • 22. 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: Figura 10: • 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.
  • 23. 21 Figura 11: exemplo de coloração de um grafo 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
  • 24. 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. Figura 12: grafo hamiltoniano 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.
  • 25. 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. Figura 13: 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’. Figura 14: 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.
  • 26. 24 Figura 15: exemplo de cobertura de vértices 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.
  • 27. 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. Figura 16: Circuito 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}.
  • 28. 26 Figura 17: clique 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.
  • 30. 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.
  • 31. 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.
  • 32. 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’)
  • 33. 31 x1’ x1’ x1 x2’ x2 x2’ x3 x3’ Figura 19: 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.
  • 34. 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 b 2 1 1 f 1 f O ciclo {a,b,c,d,e,f,a} em G’ a a 1c 2 tem peso total 6, e representa 2 2 1 1 um ciclo hamiltoniano em G, c 2 2 1 2 um grafo de 6 vértices. d e d 1 e G G’ Figura 20: 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
  • 35. 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.
  • 36. 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.
  • 37. 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.
  • 38. 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.
  • 39. 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: <
  • 40. 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.
  • 42. 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?