Completude NP - Complexidade
Completude NP - Complexidade
Completude NP - Complexidade
Completude NP
A questão: P = N P ?
Lema 1: P ⊆ N P
Prova: seja Χ ∈ P um problema de decisão, então existe um algoritmo ∆ que representa a solução de
Χ, em tempo polinomial. Então, em particular, ∆ pode ser utilizado como algoritmo de
reconhecimento para uma justificativa à resposta SIM de Χ. Logo, Χ ∈ NP.
A pergunta natural seguinte seria P ≠ NP ? Ou seja, existe algum problema na classe NP que seja
intratável? Ou, caso contrário, todo problema em NP admite necessariamente algoritmo polinomial?
Isto é, a exigência do que uma justificativa SIM pode ser reconhecida em tempo polinomial é
suficiente para garantir a existência de um algoritmo polinomial para Χ?
Até o momento não se conhece a resposta a essa pergunta. Todas as evidências apontam na
direção P ≠ NP. O principal argumento para se formular essa conjectura é que a classe NP
incorpora um conjunto enorme de problemas, para os quais inúmeros pesquisadores têm
desenvolvido esforços para elaborar algoritmo eficientes. E apesar desses esforços contínuos
não foi possível a formulação de algoritmos polinomiais para qualquer deles. Os problemas desse
conjunto pertencem então a NP – P, o que conduz à conjectura P ≠ NP.
Outra questão, quão complexo pode ser um problema da classe NP. Ou seja, admitindo que P ≠ NP,
seria possível ao menos resolver em tempo exponencial, todo problema da classe NP? O lema a seguir
responde afirmativamente a esta pergunta:
Se houver uma justificativa reconhecida como tal, então obviamente Χ possui solução SIM. Se
todas as justificativas forem reconhecidas como falsas então Χ possui resposta NÃO. O número
total dessas seqüências é {C}k. O reconhecimento de cada seqüência é polinomial no tamanho Χ. Isso
prova o lema.
Complementos de problemas
Como mencionado, a definição da classe NP exige que a justificativa SIM deva ser reconhecida em
tempo polinomial, enquanto nada se exige da justificativa NÃO. Esse fato sugere a possibilidade de
se inverter os papéis desempenhados pelas mesmas, o que conduz a uma nova classe de problemas.
Assim sendo, define-se a classe Co-NP como sendo aquela que compreende todos os problemas de
decisão Χ, tais que existe uma justificativa à resposta NÃO, cujo passo de reconhecimento
corresponda a um algoritmo polinomial no tamanho da entrada de Χ.
2
Completude NP
Por analogia, define-se o complemento Χ de um problema de decisão X como sendo o problema de
decisão cujo objetivo é o complemento da decisão do Χ. Ou seja, Χ e Χ possuem SIM e NÃO
trocados. Isto é, a resposta ao problema X é SIM se e somente se a resposta a X for NÃO.
Uma conseqüência direta dessa definições é que a classe Co-NP compreende exatamente os
complementos dos problemas da classe NP, isto é, Χ ∈ NP se e somente se Χ ∈ Co-NP.
Pode-se formular para a classe Co-NP um lema semelhante ao primeiro que apresentamos, ou seja, é
imediato verificar que P ⊆ Co-NP. Assim sendo, se um problema de decisão Χ admitir solução
polinomial, então obviamente Χ ∈ P e Χ ∈ ( NP ∩ Co-NP). Por outro lado, existem problemas
que sabidamente pertencem a classe NP, mas que se desconhece a pertinência ou não a classe NP de
seus complementos. Considerando esses últimos e trocando NP por Co-NP, é possível, por analogia,
construir exemplos de problemas da classe Co-NP, mas cuja pertinência ou não a Co-NP de seus
complementos seja desconhecida. Também há exemplos de problemas Χ para os quais se desconhece
a pertinência ou não a classe NP, tanto de Χ quanto do complemento Χ. Como exemplo considere o
problema clique, que vimos anteriormente. Seu complemento é o problema clique:
problema: clique
dados: um grafo G(V, E) e um inteiro k > 0
decisão: G possui uma clique de tamanho ≥ k ?
Já foi observado que clique ∈ NP. Para que clique também pertença a essa classe, seria necessária a
existência de um algoritmo que reconhecesse em tempo polinomial com o tamanho de G, uma
conveniente justificativa SIM à pergunta formulada na decisão acima. Observe que esta pergunta á
equivalente à seguinte questão: “todas as cliques de G possuem tamanho < k ?”. Uma justificativa
óbvia para a mesma consiste em listar todas as cliques de G. O algoritmo de reconhecimento
consiste em certificar que todas as cliques de G foram listadas e em computar o tamanho de cada
uma, comparando-o com k. Contudo, como também já foi observado, o número de cliques pode ser
exponencial no número de vértices do grafo. Logo, esse processo é de complexidade também
exponencial, o que o invalida. Por outro lado, não é conhecido algoritmo alternativo para tal
reconhecimento, que seja polinomial no tamanho do grafo. Mas tampouco se conhece qualquer prova
de sua não existência. Conseqüentemente, não é sabido clique ∈ NP.
É imediato verificar que números compostos ∈ NP. Para tanto, basta observar que o passo de
exibição de uma justificativa SIM consiste em listar os inteiros p e q. O passo de reconhecimento
corresponde, então, a efetuar o produto p*q e compará-lo com k. Por outro lado, o complemento de
números compostos é o seguinte:
3
Completude NP
Embora não seja trivial, é conhecido um algoritmo que reconhece uma justificativa SIM para esse
problema, em tempo polinomial com a entrada. Isto permite concluir que o mesmo pertence à classe
NP. Contudo, não se conhece, até o momento, algoritmo que possa resolver o problema em tempo
polinomial. Em resumo, ambos números compostos e números primos pertencem a classe NP. Contudo,
não é sabido se pertencem ou não a classe P. Conclui-se que as seguintes questões não foram
resolvidas até o momento:
i. NP = Co-NP ?
ii. P = NP ∩ Co-NP ?
De fato, se P = NP então necessariamente NP = Co-NP e portanto ambas (i) e (ii) possuem resposta
SIM. Contudo, outras combinações são também possíveis.
Redução Polinomial
Sejam os problemas de decisão Χ1(D1, Q1) e Χ2(D2, Q2). Suponha que seja conhecido um algoritmo A2
para resolver o Χ2. Se for possível transformar o problema Χ1 em Χ2 e sendo conhecido um processo
de transformar a solução de Χ2 numa solução de Χ1, então o algoritmo A2 pode ser utilizado para
resolver o problema Χ1. Observe que como o objetivo consiste em resolver Χ1, através de A2, o que
se supõe dado é uma instância de Χ1 para a qual se deseja conhecer a resposta. A partir da instância
I1 ∈ D1, elabora-se a instância I2 ∈ D2. Aplica-se então o algoritmo A2 para resolver Χ2. O retorno
ao problema Χ1 é realizado através da transformação da solução de Χ2 para a de Χ1. Se a
transformação de Χ1 em Χ2, bem como a da solução de Χ2 na de Χ1. Se a transformação de Χ1 em Χ2
bem como o da solução de Χ2 na de Χ1 puder ser realizada em tempo polinomial, então diz-se, que
existe uma redução polinomial de Χ1 em Χ2, e que Χ1 é redutível em Χ2.
Formalmente uma redução polinomial de um problema de decisão X1(D1, Q1) problema de decisão
X2(D2, Q2) é uma função f: d1 → d2 tal que as seguintes condições são satisfeitas:
i. pode ser computada em tempo polinomial, e
ii. para cada instância I ∈ D1 do problema X1 possui resposta SIM se e somente se X2(f(I))
também o possuir
4
Completude NP
Esquematizando temos:
Note as transformações de maior interesse são precisamente as polinomiais. Isto ocorre porque elas
preservam a natureza (polinomial ou não) do algoritmo A2 do problema X2, quando utilizado para
resolver X1. Dessa forma se o algoritmo A2 for polinomial e se existir a redução polinomial, então X1
também pode ser resolvido em tempo polinomial. Denota-se Χ1 α Χ2 para indicar que X1 pode ser
reduzido em X2. Note ainda que a relação α é transitiva ( isto é, Χ1 α Χ2 e Χ2 α Χ3 ⇒ Χ1 α Χ3).
Para ilustrar um processo simples de redução polinomial, considere como X1 e X2, respectivamente os
problemas clique e conjunto independente de vértices, apresentados anteriormente. A instância I de
clique consiste de um grafo G (V, E) de um inteiro k > 0. Para obter a instância f(I) de conjunto
independente, considera-se o grafo complemento G de G e o mesmo inteiro k. É então evidente que f
é uma redução polinomial porque:
i. G pode ser obtido a partir de G, em tempo polinomial, e
ii. G possui uma clique de tamanho ≥ k se e somente se G possui um conjunto
independente de vértices de tamanho ≥ k
Portanto, se existir um algoritmo A2 que resolve conjunto independente em tempo polinomial, então
este algoritmo pode ser utilizado para resolver clique também em tempo polinomial. Então clique
conjunto α conjunto independente. Observe que quando Χ1 α Χ2 a transformação f deve ser aplicada
sobre uma instância I genérica de Χ1. A instância que se obtém de Χ2 contudo é particular, pois é
fruto da redução particular f utilizada. Assim sendo, de certa forma, Χ2 pode ser considerado como
um problema de dificuldade maior ou igual a Χ1. Pois que, mediante f, um algoritmo que resolve a
instância particular de Χ2, obtida através de f, resolve também a instância de X1 dada.
Considere agora dois problemas Χ1 e Χ2, tais que Χ1 α Χ2 e Χ2 α Χ1. Então Χ1 e Χ2 são denominados
problemas equivalentes. Segue-se que, segundo a observação acima, dois problemas equivalentes são
de idêntica dificuldade (no que se refere à existência ou não de algoritmo polinomial para resolvê-
los). Note que quando Χ1 α Χ2, a particularização de Χ2 construída pela transformação f é
equivalente ao problema geral Χ1. Isto é, representado por f(D1) o conjunto imagem de f: D1 → D2, o
problema Χ1(D1, Q1) é equivalente à particularização ( f(D1), Q2), do problema Χ2(D2, Q2), como
ilustramos a seguir:
Uma redução polinomial de alguma linguagem L1 sobre um alfabeto Σ1, para outra linguagem L2 sobre
um alfabeto Σ2, é uma função f: Σ*1 → Σ*2 que pode ser computada por máquina de Turing em tempo
polinomial, para a qual w ∈ L1 se somente se f(w) ∈ L2 para cada w ∈ Σ*1.
Se há uma redução polinomial de uma linguagem L1 para uma linguagem L2, dizemos que L1 reduz para
L2 e escrevemos L1 α L2.
5
Completude NP
Teorema: se L1 α L2 e L2 está em P, então L1 está em P.
Prova: desde que L1 α L2, há uma redução polinomial f de L1 para L2 que pode ser computada por
alguma máquina de Turing Mf em tempo polinomial. Em particular, há um polinômio p(x) tal que Mf
computa f(w) em tempo p(|w|) para cada w ∈ L1. Por outro lado, o comprimento de f(|w|) não pode
ser maior que p(|w|) + |w| ( Mf não pode escrever mais que p(|w|) símbolos em p(|w|) passos;
portanto a saída de Mf quando é dada entrada w, não será maior que p(|w|) mais o comprimento da
entrada original |w|). Agora seja M2 uma máquina de Turing que aceita L2 em tempo polinomial.
Então, há um polinômio q(x) tal que M2 aceita cada v em L2 em até q(|v|) passos. Entretanto a
máquina composta → M1M2 aceita cada w ∈ L1 em até p(|w|) + q(p(|w|) + |w|) passos, que é um
polinômio em |w| como requerido. Assim, → M1M aceita L1 em tempo polinomial, e L está em P.
A maior aplicação desse teorema é usá-lo como ferramenta para mostrar que certas linguagens
estão em P. se podemos mostrar que existe uma redução polinomial de alguma linguagem L1 para
outra linguagem L2, então podemos provar que ambas as linguagens estão em P apenas mostrando que
L está em P. Assim concluímos que estas reduções providenciam um meio de atacar a classificação
de mais que um problema ao mesmo tempo.
O teorema provado acima é o teorema de S. A. Cook que identifica uma linguagem (um problema de
decisão) na classe NP para o qual qualquer outra linguagem em NP pode ser reduzida por alguma
redução polinomial.
Dado um conjunto V de variáveis e uma coleção de condições sobre V, há uma atribuição de verdade
que satisfaça as condições?
Esse problema é conhecido como o problema da satisfabilidade (ou apenas SAT). Podemos codificar
qualquer instância de SAT como uma cadeia simples, considerando { v1, v2, ..., vn} o conjunto de
variáveis, denotando cada literal por uma cadeia de comprimento m de acordo com o esquema:
cada literal vi é representado por uma cadeia de 0’s exceto para p (positivo) na i-ésima posição;
cada literal vi é representado por uma cadeia de 0’s exceto por um n (negativo) na i-ésima
posição.
Então cada condição é representada por uma lista de literais, separados por “/”. Finalmente toda a
instância do SAT é representada por uma lista dessas condições nas quais cada condição é colocada
6
Completude NP
entre “( )” a instância do SAT contendo variáveis v1, v2 e v3 e condições “v1 ou v2”, “v2 ou v3” e “v1 ou
v3 ou v2” seria representada pela cadeia:
(p00/0n0)(0p0/00p)(n00/00n/0p0)
Denotaremos a linguagem que consiste daquelas cadeias representando instâncias de SAT que tem
satisfeito as atribuições de verdade como LSAT. Portanto,
(p00/0n0)(0p0/00p)(n00/00n/0p0)
está em LSAT porque a instância correspondente de SAT pode ser satisfeita pela atribuição de
verdade que associa v1 a f, v2 a f e v3 a v. A cadeia
(0p0/00p)(00n/0p0/n00)(p00/0n0)
também está em LSAT desde que representa a mesma instância de SAT como a cadeia anterior. Más,
a cadeia
(p00/0p0)(n00/0p0)(p00/0n0)(n00/0n0)
não está em LSAT desde que nenhuma atribuição satisfaz “v1 ou v2”, “v1 ou v2”, “v1 ou v2” e “v1 ou v2”
simultaneamente.
Vamos agora apresentar as “atribuições de verdade” por cadeias de p’s e n’s nas quais um p na i-
ésima posição indica que a variável vi é verdadeira que um n na i-ésima posição indica que vi é falsa.
Então para testar se uma instância codificada de SAT satisfaz ou não determinada atribuição,
meramente lemos a cadeia que representa a instância do problema da esquerda para a direita
enquanto verificamos cada condição para ver se contem um literal em que p ou n correspondem a
posição na “atribuição de verdade”, observe a ilustração a seguir:
Baseando nessa técnica construímos uma máquina de Turing não-determinística que aceita LSAT em
um tempo polinomial. Vamos empregar uma máquina de Turing de duas fitas que poderia:
1. iniciar cada computação verificando que sua entrada representando uma coleção de
condições,
2. escrever, de forma não-determinística, uma cadeia de p’s e n’s de comprimento igual ao
número de variáveis nas condições sob a fita 2, e
3. mover a cabeça do fita 1 através da entrada enquanto testa para verificar a atribuição de
verdade da fita 2 satisfaz as condições que estão sendo lidas.
7
Completude NP
Ilustramos a seguir o processo:
esse processo pode ser implantado de forma que a complexidade de tempo das computações de
aceitação são limitadas por uma função polinomial do comprimento da cadeia de entrada. Concluímos
que LSAT está em NP, podemos agora apresentar e provar o teorema de Cook:
Um conjunto de condições que represente essas possibilidades poderá ser satisfeito se e somente
se w é uma cadeia em L(M). Portanto para definir f(w) precisamos transladar essas possibilidades
para dentro das condições.
8
Completude NP
Desde a descoberta desse teorema, muitas linguagens em NP tem sido encontradas para possuir as
mesmas propriedades que LSAT. Existe atualmente um grande número de linguagens em NP que são
conhecidas para ser reduzidas polinomialmente em qualquer outra linguagem em NP, essas linguagens
são ditas NP completas.
Problema NP - Completo
Observe que é possível utilizar a relação α para dividir NP em classes de problemas equivalentes
entre si. Obviamente, os problemas pertencentes a P formam uma dessas classes. E, nesse sentido,
podem ser considerados como os de “menor dificuldade” em NP. Em contrapartida, existe outra
classe de problemas equivalentes entre si, que correspondem aos de “maior dificuldade” dentre
todos em NP. Os problemas dessa nova classe são denominados NP-completo, cuja definição é a
seguinte:
Observe que (ii) implica que todo problema da classe NP pode ser transformado polinomialmente no
problema X NP-completo. Isto é, se um problema NP-completo X puder ser resolvido em tempo
polinomial então todo problema de NP admite também um algoritmo polinomial (e conseqüentemente,
nesta hipótese, P = NP). E também reciprocamente. Vale pois, X ∈ P se e somente se P = NP. Isto
justifica o fato de que a classe NP-completo corresponde aos problemas de maior dificuldade dentre
os pertencentes a NP.
Caso somente a condição (ii) da definição acima, seja considerada (não importando se (i) é ou não
satisfeita), o problema X é denominado NP-difícil. conseqüentemente, a “dificuldade” de um
problema NP-difícil é maior ou igual a de um NP-completo.
Nossa atenção agora deve voltar-se para a identificação de problemas que pertencem a NP-
completo. Como a única informação que dispomos é a definição da classe, o processo de identificação
de tais problemas envolveria a aplicação da mesma. Contudo, esbarra-se numa dificuldade. A
condição (ii) da definição requer que seja provado que todo problema de NP pode ser
polinomialmente transformado no problema candidato a pertencer à classe NP-completo. Esta tarefa
seria por demais árdua para ser aplicada a cada possível candidato a NP-completo. O lema a seguir
contorna essa questão:
Esse lema, por sinal simples, é muito poderoso. Como conseqüência, para provar que um certo
problema X é NP-completo, ao invés de utilizar a mencionada condição (ii) da definição (que exige
uma prova de que todo problema X’∈ NP é polinomialmente transformável em X), basta, demonstrar
que um problema NP-completo é polinomialmente redutível em X. Em suma, para mostrar que um
problema X é NP-completo é suficiente provar que:
i. X ∈ NP, e
ii. um problema sabidamente NP-completo X’ é tal que X’ α X.
Observe que se apenas (ii) for realizado, então X é NP-difícil, mas não necessariamente NP-
completo. Contudo, para que este esquema de prova possa ser utilizado, é necessário escolher algum
problema X’ que seja sabidamente NP-completo. Portanto, para se identificar algum primeiro
problema desta classe, o processo acima não se aplica. Essa primeira identificação é dada pelo
teorema a seguir:
A prova deste teorema, um tanto longa (não será apresentada), consiste de uma transformação
polinomial genérica, de um problema da classe NP em satisfabilidade.
Prova: os dados de clique são um grafo e um inteiro positivo. Seja C uma clique do grafo. Pode-se
reconhecer se C é uma clique e computar o seu tamanho, em tempo polinomial no tamanho da entrada
de clique. Logo clique ∈ NP. É necessário agora verificar que algum problema NP-completo pode ser
polinomialmente redutível em clique. Seja então uma instância genérica de satisfabilidade. Esta é
constituída de uma expressão booleana E na fnc, compreendendo as cláusulas L1, L2, .. , Lp. a questão
de decidir se um certo grafo G (V, E) possui ou não uma clique de tamanho ≥ p. O grafo G é
construído, a partir da expressão E, da seguinte maneira. Existe um vértice diferente em G, para
cada ocorrência de literal de G. Existe uma aresta diferente (vi, vj) em G, para cada par de literais
bi, bj de E, tais que bi ≠ bj , e bi, bj ocorrem em cláusulas diferentes de E. Como decorrência, cada
aresta (vi, vj) ocorrem de G é tal que os literais bi, bj, correspondentes em E, estão em cláusulas
diferentes e podem assumir o valor verdadeiro simultaneamente. E reciprocamente. Logo, uma clique
de G com p vértices corresponde em E, a p literais, um em cada cláusula, os quais podem assumir o
valor verdadeiro simultaneamente. E reciprocamente. Portanto, decidir se E é satisfazível é um
problema equivalente a decidir se G possui uma clique de tamanho ≥ p, vide ilustração a seguir.
Para completar a prova basta observar que a construção de G pode ser facilmente realizada em
tempo polinomial com o tamanho da expressão E.
10
Completude NP
Transformação da prova do lema 4
E = (b1 ∨ b2 ) ∧ ( b1 ∨ b2 ∨ b3) ∧( b1 ∨ b2 ∨ b3 )
Quando apresentamos a classe NP, provamos que conjunto independente ∈ NP. Na seção anterior,
verificamos que clique conjunto α conjunto independente. Sabe-se que pelo lema 4, que clique é NP-
completo. Logo, conjunto independente de vértices é NP-completo. Empregando o mesmo raciocínio,
poderemos provar que problemas pertencentes a NP são NP-completo.