Vous êtes sur la page 1sur 15

1

Problemas NP-Completo
O que pode e o que no pode ser resolvido eficientemente por computadores
Traduo, adaptaes e comentrios: Andr Gustavo dos Santos

Introduo
Anteriormente havamos estudado como medir a eficincia de um algoritmo atravs do calculo de sua ordem de
complexidade. Mas uma vez calculada a complexidade, como reconhecer se o algoritmo correspondente ou
no eficiente? O mximo que podamos fazer era compar-lo com outros algoritmos que resolvem o mesmo
problema. Agora definimos o seguinte: um algoritmo eficiente quando a sua complexidade for um polinmio
no tamanho da entrada.
Assim, algoritmos de complexidade O(1), O(n) O(n2), O(n3), O(n5), so algoritmos chamados de eficientes para
problemas de entrada tamanho n. Embora log n no seja um polinmio, seu valor menor que n, ou seja, no
pior que um polinomial, por isso pode ser encaixado entre os polinomiais. Da mesma forma, O(log n), O(n2logn)
e outros, tambm esto entre os polinomiais. Os demais so genericamente chamados de exponenciais, como
O(2n), O(3n), O(n!), O(nn) e outros cuja complexidade no pode ser expressa por um polinmio.
Podemos estender esta definio para um problema. Considere a coleo de todos os algoritmos para resolver
um certo problema. O interesse ento saber se, nessa coleo, existe algum algoritmo que seja eficiente, isto
de complexidade polinomial. Se existir tal algoritmo o problema chamado de tratvel ou bem resolvido. Caso
contrrio chamado de intratvel. A idia que um problema tratvel pode ser resolvido para entradas e sadas
de tamanho razovel, atravs de um programa de computador. Por outro lado um algoritmo de complexidade no
polinomial, para um problema intratvel, poderia em certos casos levar sculos para computar os dados de
entrada e sada de tamanhos relativamente reduzidos. Suponha que um algoritmo O(2n) gaste 1 hora para
resolver um problema de tamanho n = 50. Ento, levaria cerca de 2 horas para n = 51, e um ano para n = 59.
Mesmo um milho de computadores trabalhando juntos, cada um deles um milho de vezes mais rpido que os
atuais, no seriam suficientes para resolver com n = 100.
De acordo com esta definio, para mostrarmos que um problema tratvel, basta apresentar um algoritmo
polinomial que o resolva. Por outro lado, para verificar que intratvel, h necessidade de provar que todo
algoritmo que o resolva no possui complexidade polinomial. Isto bastante difcil de se mostrar, e conforme
veremos mais adiante, existem vrios problemas que no se sabe se so tratveis ou no. O que se sabe que por
enquanto no so tratveis.
Os problemas para os quais conhecemos apenas algoritmos exponenciais so geralmente problemas onde existe
um grande nmero de alternativas e precisamos verific-las para saber qual responde ao problema. . Quando o
nmero de alternativas exponencial fica difcil desenvolver um algoritmo eficiente. Se testarmos uma de cada
vez o algoritmo se torna exponencial.. Se conseguimos descobrir alguma propriedade particular do problema que
elimine algumas alternativas sem necessidade de verific-las, podemos melhorar o desempenho do algoritmo.
Isto depende de um estudo aprofundado do problema na busca destas propriedades. Se consegussemos testar
todas simultaneamente o desempenho seria consideravelmente melhorado. Isto pode ser feito usando
programao distribuda numa rede de computadores, onde as tarefas so distribudas e cada computador verifica
uma alternativa. Mas o nmero de computadores necessrios seria exponencial. Por enquanto no vemos sada.

Tipos de problemas
Existem algumas classes gerais de problemas que podem ser resolvidos por algoritmos, entre elas os problemas
de deciso, de localizao e de otimizao. Num problema de deciso, o objetivo consiste em decidir se a

2
resposta SIM ou NO. Num problema de localizao, o objetivo localizar uma certa estrutura que satisfaa
um conjunto de propriedades. Se estas propriedades envolvem algum critrio de otimizao atravs da
comparao de solues, ento o problema torna-se um problema de otimizao.
Problema de Deciso:
Existe uma estrutura S que satisfaa uma propriedade de P?
Resposta: SIM ou NO (dizer se h ou no uma soluo)
Problema de Localizao:
Encontrar uma estrutura S que satisfaa uma propriedade P
Resposta: uma estrutura S (encontrar uma soluo)
Problema de Otimizao:
Encontrar uma estrutura S que satisfaa uma propriedade P e que
seja a melhor segundo algum critrio C de medida.
Resposta: uma estrutura S tal que no haja outra melhor
Em alguns casos existem triplas de problemas, um de deciso, outro de localizao e outro de otimizao, que
podem estar associados, conforme indicam os exemplos abaixo.
Exemplos:
1) Problema de clique1 em um grafo
Deciso: Dado o grafo G abaixo, existe um clique de tamanho maior ou igual a 3 ?
Localizao: Dado o grafo G abaixo, encontre um clique de tamanho maior ou igual a 3.
Otimizao: Dado o grafo G abaixo, qual o maior clique?
b
a

Deciso: SIM (j que existe em clique > 3)


Localizao:{c,e,f} ( um clique de tamanho > 3)
Otimizao:{c,d,e,f} (o maior clique, de tamanho = 4)

G
2) Problema do caixeiro viajante2
Deciso: Dado o grafo G abaixo, existe um percurso de peso menor ou igual a 17 ?
Localizao: Dado o grafo G abaixo, encontre um percurso de peso menor ou igual a 17.
Otimizao: Dado o grafo G abaixo, qual o percurso de menor peso total?

G
1
2

1
2
5 c
4
2 6

Deciso: SIM (j que existe um percurso de peso total > 17)


Localizao: a,b,c,d,a (que um percurso de peso total =16)
Otimizao: a,b,d,c,a (que o menor percurso, de peso total =11)

um clique em um grafo um subconjunto de vrtices contendo todas as arestas possveis entre eles
o percurso do caixeiro viajante deve passar por todos os vrtices exatamente uma vez, e voltar a origem

3
Naturalmente, o custo de se resolver um problema de deciso no maior que o de se resolver um problema de
localizao associado. Resolvendo um de localizao teremos resolvido o de deciso. E o custo de se resolver
um problema de localizao no menor que o do de otimizao associado. Resolvido o otimizao, temos uma
resposta para o de deciso.
Para a diviso de problemas nas classes P, NP e NP-Completo, vamos utilizar geralmente problemas de deciso.
Se o problema de deciso intratvel, tambm o de localizao e de otimizao o sero. Os problemas de
deciso tratveis esto na classe P de problemas, detalhada a seguir.

A Classe P
A classe P de problemas de deciso contm os problemas cuja complexidade polinomial no tamanho da
entrada. Para se demonstrar que um problema classe P, basta mostrar um algoritmo polinomial que o resolva.
Mas para demonstrar que um problema no pertence classe P, no basta mostrar um algoritmo exponencial,
pois isto no mostra que no h algum polinomial. E nem dizer que todos os algoritmos conhecidos para resolvlo sejam exponenciais. Devemos provar que no existe e nem nunca existir algoritmo polinomial para resolvlo. Por exemplo, os algoritmos exatos conhecidos at agora para o problema do caixeiro viajante so todos
exponenciais. Entretanto, no conhecida um prova de que seja impossvel obter um algoritmo polinomial para
resolver o caixeiro viajante. Sabemos apenas que ningum foi capaz de criar um algoritmo polinomial. No se
sabe, portanto se o caixeiro viajante pertence ou no classe P. Como veremos a seguir, muitos problemas ainda
esto indefinidos nesta questo.
Exemplos:
1) Ordenao: dada uma lista contendo n itens, coloc-los em ordem segundo algum critrio de ordenao
Existem algoritmos polinomiais para resolver este problema, como insero, O(n2), Seleo, O(n2), Heapsort,
O(n log n), portanto o problema da classe P.
2) Caminho mais curto: dado um grafo G com pesos positivos nas arestas contendo n vrtices, e dois vrtices v e
w do grafo, encontrar o caminho mais curto entre v e w
Se o grafo for armazenado em uma matriz de adjacncia, o algoritmo proposto por Dijkstra encontra a soluo
em tempo O(n2), logo o problema da classe P.

Problemas aparentemente difceis


Os problemas a seguir parecem fceis a primeira vista, mas desenvolver um algoritmo eficiente para eles no
fcil. Parece no haver como fazer um algoritmo eficiente, pois ainda no foi feito.
1 Satisfabilidade (SAT)
Dados: Uma expresso booleana E na FNC.
Deciso: E pode se satisfeita ?
Considere um conjunto de variveis booleanas x1, x2, x3... e seus complementos x1', x2', x3'... Se a varivel x1
verdadeira (V), seu complemento falso (F), e vice-versa. Uma expresso est na FNC (forma normal
conjuntiva) quando as variveis esto dispostas em clusulas ligadas umas s outras por AND (representado por
). Cada clusula um conjunto de variveis ligadas por OR (representado por ). Verificar se uma expresso
pode ser satisfeita consiste em se verificar se existe alguma forma de se atribuir valores V ou F para as variveis,
de tal forma que a expresso seja verdadeira.

4
Por exemplo, dada a expresso E = (x1 x2') (x1' x2' x3) (x1' x2 x3'), verificar se ela pode ser
satisfeita. Resposta: SIM. Basta atribuir os valores x1=V, x2=V, x3=V que E=V. Existem outros valores que
tambm provam que a resposta SIM.
Como outro exemplo, dada a expresso E = x1 x1', verificar se ela pode ser satisfeita. Claramente a resposta
NO. Se x1=V, x1'=F e viceversa. Assim, a expresso E sempre ser falsa.
2 Clique
Dados: Um grafo G e um inteiro k > 0
Deciso: G possui um clique de tamanho k ?
b

Dado um grafo G=(V, A), um clique um subconjunto V' de V tal que todo par
de vrtices de V' seja adjacente. Isto , se v e w pertence a V', ento a aresta (v,
w) deve existir em A. No grafo ao lado, {d, b, e} um clique de tamanho 3. O
problema consiste em, dado um grafo, verificar se h um clique de tamanho
pelo menos igual a um valor dado.

a
e

g
c
h

3 Conjunto Independente.
Dados: Um grafo G e um inteiro k > 0
Deciso: G possui um conjunto independente de tamanho k ?
Dado um grafo G =(V, A), um conjunto independente de vrtices um subconjunto V' de V tal que todo par de
vrtices de V' no seja adjacente. Isto , se v e w pertence a V', ento a aresta (v, w) no existe em A. No grafo
acima,{a, b, c, g, h} um conjunto independente de tamanho 5. O problema consiste em, dado um grafo,
verificar se h um conjunto independente de tamanho pelo menos igual a um valor dado.
4 Ciclo Hamiltoniano Direcionado
Dados: Dgrafo D
Deciso: D possui um ciclo hamiltoniano ?
Um ciclo hamiltoniano em um dgrafo (grafo com arestas direcionadas) um ciclo que contm exatamente em
vez cada vrtice de D. Assim no grafo G1 abaixo, o ciclo a,c,f,e,d,b,a um ciclo hamiltoniano. E o grafo G2 no
possui ciclo hamiltoniano.
b
b
f

c
e

G1
5 Ciclo Hamiltoniano No Direcionado
Dados: Grafo G.
Deciso: G possui um ciclo hamiltoniano ?
O mesmo que o anterior, porm, em um grafo no direcionado.

G2

5
6 Colorao
Dados: Grafo G e um inteiro k > 0.
Deciso: G possui uma colorao com no mximo k cores ?
Uma colorao em um grafo G consiste em se atribuir cores aos vrtices de G de tal forma que vrtices
adjacentes possuam cores diferentes. O grafo abaixo admite uma colorao com 3 cores.
a vermelho
b azul
c amarelo
d azul
e amarelo
f azul

a
f
b

A Classe NP
Suponha que por algum processo um problema de deciso foi resolvido. Ento, deve haver alguma forma de se
testar se a soluo SIM ou NO dada a problema realmente a soluo. Para fazer isto, a soluo composta
por um conjunto de argumentos que, quando interpretados, atestam a veracidade da resposta SIM ou NO dada
ao problema.
Considere o problema clique, onde se procura um clique de tamanho k. Uma justificativa para a resposta SIM
pode ser obtida apresentando-se um clique C de tamanho k. O teste de veracidade ser feito observando se de
fato C um clique, e se tem tamanho k. Uma justificativa para a resposta NO pode ser feita listando-se todos
os cliques do grafo. O teste de veracidade consiste em se observar que a lista realmente contm os cliques e que
o tamanho de cada um deles < k.
O processo de se justificar respostas a problemas de deciso compe-se de duas fases distintas:
FASE 1: Exibio.
- exibir uma justificativa
FASE 2: Reconhecimento
- verificar que a justificativa apresentada no passo de exibio , de fato, satisfatria
Considere novamente o problema de Ciclo Hamiltoniano para o grafo G1 a seguir, cuja soluo SIM. Na
justificativa, o passo de exibio consiste da seqncia C de vrtices a,b,c,d,e,f,a. O passo de reconhecimento
consiste em verificar se C de fato um ciclo hamiltoniano, O processo de reconhecimento simples. Deve-se
verificar que (i) C um ciclo e (ii) C contm cada vrtice de G exatamente uma vez cada .O algoritmo
correspondente ao processo de reconhecimento facilmente implementvel em tempo polinomial no tamanho de
grafo. Para (i) basta verificar que existem as arestas (a,b), (b,c), (c,d), (d,e), (e,f) e (f,a). Para (ii) basta ordenar os
vrtices e verificar que no h vrtice repetido e que a lista contm todos.
b
b
c
f

a
c

G1

G2

6
O problema de Ciclo Hamiltoniano para o grafo G2, cuja resposta NO, se comporta de forma diferente. O
passo de exibio da justificativa consiste em se apresentar as 4 sequncias:{a,b,c,a; e,c,d,e; e,c,f,e; e,d,c,f,e}. O
passo de reconhecimento consiste em comprovar que (i) cada sequncia de vrtices um ciclo no Hamiltoniano
e (ii) todo ciclo simples de G est presente na sequncia exibida. Note que o algoritmo de reconhecimento da
justificativa NO no to simples quanto aquele de justificativa SIM. A operao (i) deve ser realizada para
cada exibido (ao contrrio do caso anterior que requeria verificaes sobre um nico ciclo). O nmero de ciclos
pode ser exponencial, ento resultaria em um algoritmo exponencial para verificar todos. Alm disso, uma idia
para comprovar (ii) seria enumerar todos ciclos do grafo G e verificar se todos esto presentes na justificativa
exibida. Como o nmero total de ciclos pode ser exponencial com o tamanho de G, esse algoritmo tambm de
natureza exponencial. At o momento, desconhecido se existe algum outro processo para justificar a resposta
NO a Ciclo Hamiltoniano, tal que o passo de reconhecimento possa ser feito por algum algoritmo polinomial.
Define-se ento a classe NP de problemas como sendo aquela que compreende todos os problemas de deciso ,
tais que existe uma justificativa resposta SIM para , cujo passo de reconhecimento pode ser realizado por um
algoritmo polinomial no tamanho da entrada de .
Vale ressaltar que na definio da classe NP no se exige um soluo polinomial para , apenas que exista um
algoritmo polinomial para verificar a resposta SIM. Alm disso, o tamanho da justificativa dada pelo passo de
exibio no pode ser exponencial com a entrada de , pois o tamanho da justificativa seria grande demais e
qualquer algoritmo levaria um tempo exponencial no tamanho da entrada de para verific-la, mesmo um
algoritmo polinomial em relao ao tamanho da justificativa. Tambm no exigido nada em relao a
justificativa NO dada pelo passo de exibio. De fato, h problemas de NP que admitem algoritmos
polinomiais para suas justificativas NO e outros para os quais tal algoritmo no conhecido.
O termo NP vem de No-determinista Polinomial. A idia que um problema NP pode ser resolvido
polinomialmente por uma mquina no-determinista. Uma mquina no-determinista consegue escolher, entre
vrias alternativas, aquela que leva soluo. Ou seja, ela adivinha o caminho correto. Desta forma, o
resultado no determinstico, ou seja, os passos no so seguidos de uma forma sistemtica, sempre havendo
apenas um caminho a seguir, ela consegue decidir por si mesma o passo a tomar entre vrias opes. Uma
mquina no-determinista possui uma funo ESCOLHE que toma estas decises.
Exemplo:
Ciclo Hamiltoniano em mquina no-determinstica
Entrada: grafo G = (V,A)
n = |V| //nmero de vrtices do grafo
for i = 1 to n
marca[i] = no visitado
x=1
marca[x] = visitado
for i = 2 to n
prox = ESCOLHE(V) // escolhe um dos vrtices
if (marca[prox] = visitado) or (aresta(x,prox) A)
return NO
marca[prox] = visitado
x = prox
if (aresta(x,1) A)
return SIM
else return NO

O algoritmo escolhe os vrtices do caminho,


marcando cada vrtice escolhido. Se
conseguir escolher todos os vrtices, sem
repetio, com aresta ligando cada vrtice ao
prximo, e com aresta ligando o ltimo
escolhido ao incio do caminho, ento
retorna SIM.
Se escolher um vrtice mais de uma vez, ou
escolher algum que no tenha aresta ligando
ao anterior no caminho, retorna NO.
Em uma mquina no-determinista, se
houver um ciclo hamiltoniano em G, a
funo ESCOLHE escolher os vrtices na
ordem correta.

7
O algoritmo acima pode ser facilmente modificado para resolver o problema de localizao do ciclo
hamiltoniano. Basta guardar o caminho, a seqncia de vrtices escolhida.
Como era de se esperar, no existe uma mquina no-determinista. Se existisse, o algoritmo acima seria O(n),
polinomial. Isto faz o problema pertencer classe NP, no-determinista polinomial. H problemas que nem uma
mquina no-determinista no consegue resolver em tempo polinomial. Por exemplo, para clique mximo, ela
no como verificar que a resposta obtida est correta para responder satisfatoriamente em tempo polinomial
(pelo menos no foi descoberto um algoritmo ainda).
Para comprovar que um problema pertence NP procede-se da seguinte maneira:
(i) Define-se uma justificativa J conveniente para a resposta SIM ao problema
(ii) Elabora-se um algoritmo polinomial para reconhecer se J est correta. A entrada desse algoritmo consiste de
J e da entrada de .
Se no pudermos elaborar um algoritmo polinomial para reconhecer a justificativa SIM, no significa que o
problema no pertence a NP, mas que ainda no sabemos se pertence ou no. Existem vrios problemas que
ainda no conhecido se pertencem ou no a NP. Existem tambm alguns problemas para os quais so
conhecidas provas da no pertinncia a NP.
Exemplos:
1) Clique NP ?
(i)
A justificativa para a soluo SIM um subconjunto V de vrtices do grafo G.
(ii)
Para verificar a justificativa SIM basta
- verificar o tamanho do subconjunto apresentado, O(|V|) contar os vrtices e verificar se o
tamanho maior ou igual ao valor K de entrada. O(1) uma comparao simples
- verificar se existem arestas em G entre todos os pares de vrtices de V, que pode ser feito em no
mximo O(|V|2) para cada vrtice de V verificar se existem arestas para os outros.
Como tudo pode ser feito em tempo polinomial, ento Clique NP. Note que |V| < |V|, logo polinomial na
entrada do problema, no apenas no tamanho da justificativa.
2) Ciclo Hamiltoniano NP ?
(i)
A justificativa para a soluo SIM uma seqncia de vrtices de G
(ii)
Para verificar a justificativa SIM basta
- verificar se cada vrtice aparece exatamente uma vez contar quantos existem, O(n) e verificar se
no h repetido, O(n) basta marcar enquanto verifica e observar se no marcou mais de uma vez
- verificar se existem arestas ligando os vrtices consecutivos, O(n) medida que percorre a
seqncia observar o valor em uma matriz de adjacncia
Tudo pode ser feito em tempo polinomial, logo Ciclo Hamiltoniano NP.
3) Clique Mximo NP ?
A justificativa para a soluo SIM um subconjunto V de vrtices de G. Suponha que V contenha p vrtices e
G contenha n vrtices. Pode ser verificado que V realmente um clique de G em tempo polinomial conforme
descrito acima (na prova de que clique NP). Mas para mostrar que p o tamanho do maior clique em G
necessrio verificar se no existem cliques de tamanho p+1. Para isto ser feito, deve ser mostrado que nenhum
subconjunto de vrtices de G de tamanho p+1 um clique. A verificao de cada um deles feita em tempo
polinomial, mas existem n!/((p+1)!(n-(p+1))!) subconjuntos a serem analisados. Portanto, a verificao de todos
seria exponencial. No se conhece uma forma polinomial de se verificar uma justificativa SIM ao problema de

8
clique mximo. Portanto, parece que Clique Mximo NP, embora ningum tenha provado tal conjectura.

A questo P = NP
Facilmente demonstramos que P NP, ou seja, todo problema pertencente classe P pertence classe NP. A
demonstrao pode ser feita da seguinte forma:
Seja P um problema de deciso. Existe esto um algoritmo A que apresenta a soluo de
em tempo polinomial no tamanho de sua entrada. Em particular A pode ser utilizado como
algoritmo de reconhecimento para uma justificativa resposta SIM de . Logo, NP.

NP
P

A pergunta natural seguinte seria P NP ou P = NP ? Ou seja, todos os problemas para os quais conhecemos um
algoritmo polinomial para verificar a justificativa SIM tambm admitem um algoritmo polinomial para ser
solucionado, mas ainda no conhecemos tal algoritmo ? Ou existem problemas em NP para os quais no h
como se propor um algoritmo polinomial para solucion-lo, mesmo conhecendo um algoritmo para se verificar a
soluo SIM ? At o momento no se conhece uma resposta a esta pergunta3.
Como ilustrao considere que voc tenha chegado a uma festa e quer saber se existe algum conhecido no
recinto. Para solucionar o problema voc teria que olhar para cada pessoa, o que seria O(n), sendo n o nmero de
pessoas na festa. Suponha que algum se apresente como seu conhecido. A verificar da soluo SIM pode ser
feita em O(1), claro. Outros exemplos interessantes so os seguintes: se algum te diz que o nmero
13.717.421 pode ser escrito como produto de dois outros nmeros menores, como acreditar nele ? Entretanto, se
ele te disser que pode ser escrito como 3607 x 3803 fcil verificar4... Se algum te der um quebra-cabea voc
demora para mont-lo, dever praticamente testar a juno de todas as peas, descartando apenas aquelas com
formato ou figura totalmente incompatveis. Mas se o quebra-cabea estiver pronto, fcil verificar que est
correto. Estas exemplos so meras ilustraes para mostrar que provavelmente encontrar a soluo de um
problema mais difcil que verificar uma dada soluo.
H fortes evidncia que P NP pois a classe NP incorpora vrios problemas com grande interesse prtico, para
os quais inmeros pesquisadores, financiados por grandes empresas, j desenvolveram esforos para elaborar
algoritmos eficientes, e ainda no obtiveram sucesso. Mas o fato de ningum ter descoberto no significa que
no haja soluo. O problema permanece em aberto.
3

recentemente, em 24 de maio de 2000, foi proposto um prmio de um milho de dlares para quem responder a esta
pergunta. As regras podem ser vistas em http://www.claymath.org
4
recentemente, em agosto de 2002, foi proposto um algoritmo polinomial para este problema, mostrando que, neste
problema, tanto verificar quanto resolver possuem algoritmos eficientes

9
Transformaes Polinomiais
Suponha que queiramos resolver um certo problema P1 e j conhecemos um algoritmo para resolver um outro
problema P2. Uma transformao do problema P1 (com dados de entrada E1 e soluo S1) no problema P2 (com
dados de entrada E2 e soluo S2) consiste em:
(i)
transformar os dados de entrada E1 do problema P1 em dados de entrada E2 para o problema P2
(ii)
transformar a soluo S2 de P2 obtida com os dados de entrada E2 em uma soluo S1 de P1
A figura abaixo descreve o processo:

Dados de
P1

Transformao
de E1 em E2

Dados de
P2

Algoritmo para
resolver P2

Soluo
de P2

Transformao
de S2 em S1

Soluo
de P1

Um problema P1 dito polinomialmente transformvel em um problema P2, denotado por P1 P2, quando:
(i)
a transformao de E1 em E2 e de S2 em S1 podem ser feitas em tempo polinomial
(ii)
para toda possvel entrada E1 de P1, P2 admite resposta SIM se e somente se P1 possui resposta SIM
Quando um problema P1 polinomialmente transformvel em P2, dizemos tambm que P1 se reduz a P2. Ou
seja, resolver P1 reduzido a resolver P2. Resolvendo P2 tambm resolveremos P1.
A importncia da transformao de entradas e solues serem feitas em tempo polinomial reside no fato de que
elas preservam a natureza do algoritmo (polinomial ou no) empregado na soluo P2. Assim, se o algoritmo
para resolver P2 for polinomial, e as transformaes forem polinomiais, ento P1 tambm pode ser resolvido em
tempo polinomial, ou seja, se P2 P ento P1 P, e se P2 NP, ento P1 NP.
O contrrio no necessariamente verdadeiro, ou seja, se P1 P no implica que P2 P. Podemos transformar
um problema simples em um complexo e mostrarmos que a soluo do problema complexo encontra uma
soluo do simples. Isto de forma alguma mostra que o problema complexo na verdade simples e nem que o
problema simples complexo. como usar um canho para matar algo que uma espingarda de chumbinho
poderia matar. Isto no mostra que o problema (o alvo) difcil de se abater, e nem que o algoritmo (a arma
canho) simples. O interessante da transformao polinomial que, se algo pode ser morto por uma espingarda
de chumbinho, ento est provado que no necessrio um canho neste caso... Ou seja, se existe um algoritmo
eficiente para P2, e P1 se reduz a P2, ento existe um algoritmo eficiente para P1.
Exemplo:
1) Clique Conjunto Independente
Seja P1 o problema Clique e P2 o problema Conjunto Independente. A entrada E1 para o problema Clique
consiste em um grafo G = (V, A) e um inteiro k > 0. Para transformar esta entrada na entrada E2 para o problema
Conjunto Independente, considere o grafo G = (V, A) e o mesmo inteiro k. O grafo G contm os mesmo
vrtices que G, mas contm apenas as arestas que no existem em G. Ou seja, dois vrtices ligados por uma
aresta em G no so ligados em G, e dois vrtices no ligados em G so ligados em G. Demonstramos que
Clique Conjunto Independente, pois:
(i) a construo de G a partir de G polinomial. A transformao da soluo tambm polinomial, na verdade
O(1) pois nem h necessidade de transformao neste caso.
(ii) Existe um conjunto independente de tamanho k em G se e somente se existem um clique de tamanho k
em G.

10
a
b

b
f

Note que {a, b, d, f} um conjunto


independente de G de tamanho 4. O
mesmo conjunto um clique em G.

O mesmo ocorre para {b, c, d, f}.


{a,b,c,f} no conjunto independente
em G, e portanto no clique em G.

Problemas como Clique e Conjunto Independente so chamados problemas equivalentes. Dois problemas 1 e
2 so chamados equivalentes quando 1 2 e 2 1. O fato de que clique polinomialmente transformvel
em conjunto independente mostrado no exemplo acima. Uma idia semelhante mostra que conjunto
independente tambm polinomialmente transformvel em clique.
A relao transitiva, ou seja, se , e so problemas, e e ento .

A Classe NP-Completo
Esta classe envolve os problemas de maior dificuldade entre todos os problemas de NP. Os problemas
pertencentes classe NP-Completo so todos equivalentes entre si. Um problema pertence classe NPCompleto se as seguintes condies forem satisfeitas.
(i)
NP
(ii)
todo problema de deciso NP satisfaz
Observe que (ii) implica que todo problema da classe NP pode ser transformado polinomialmente no problema
NP-Completo. Nisto reside a importncia desta classe de problemas: se um problema NP-Completo puder ser
resolvido em tempo polinomial, ento todos os problemas NP tambm podem... (e conseqentemente P = NP).
Logo, se NP-Completo, e algum mostrar que P, ento P = NP. Este o chamado teorema de Cook,
formulado por Stephen Cook em 1971. Por isto dizemos que os problemas NP-Completo so os mais difceis de
NP, pois se um deles puder ser resolvido em tempo polinomial, ento todos de NP o sero.
Para demonstrar que um problema NP-Completo utilizando a definio acima, teramos que mostrar que todos
os problemas pertencentes a NP se reduzem polinomialmente a ele. Isto seria invivel de ser feito na prtica,
mesmo porque nem sabemos quais so todos os problemas da classe NP. Mas podemos utilizar o seguinte:
Sejam 1 e 2 problemas de deciso NP. Se 1 NPCompleto e 1 2 ento 2 tambm NP-Completo
O fato acima, apesar de simples, bastante poderoso. Vem nos dizer que para mostrar que um problema NPCompleto, no precisamos mostrar que todos os problemas NP se reduzem a ele, basta escolher um problema
qualquer, comprovadamente NP-Completo, e mostrar que este se reduz ao problema em questo. Ou seja, para
se provar que NP-Completo suficiente provar que:
(i)
(ii)

NP
um problema NP-Completo tal que

Isto suficiente porque, por transitividade, se todos de NP um problema NP-Completo e este problema NP-

11
Completo , ento todos de NP , mostrando que NP-Completo. A grande vantagem que podemos
fazer apenas uma transformao polinomial.
Contudo, para que este esquema de prova possa ser utilizado, necessrio escolher algum problema que seja
NP-Completo. J existem diversos problemas catalogados como NP-Completo (em particular, todos da seo
problemas aparentemente difceis so problemas NP-Completo).
Mas, para se identificar o primeiro problema desta classe, o processo acima no se aplica. Stephen Cook, em
1971, encontrou o ponto de partida atravs do problema de Satisfabilidade. Seus trabalhos lhe conferiram o
prmio Turing5 em 1982. Ele props uma questo: h algum problema em NP que, se for mostrado que ele est
em P, ento P = NP ? Ele mesmo encontrou a resposta atravs do teorema: Satisfabilidade est em P se e
somente se P = NP. Isto foi feito atravs de uma transformao polinomial genrica de todos os problemas da
classe NP no problema de Satisfabilidade, cuja demonstrao foge do escopo deste texto. Uma vez que este
primeiro problema foi identificado, a tarefa para outros problemas fica bem mais simples utilizando o esquema
acima. Richard Karp6, em 1972, apresentou outros 24 problemas importantes que se reduzem Satisfabilidade,
mostrando assim que tambm so NP-Completo.
Exemplos:
1) Clique NP-Completo?
Os dados de entrada Clique so 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. necessrio agora mostrar que algum problema NP-Completo pode ser polinomialmente transformvel em
Clique. Vamos usar o problema de Satisfabilidade. Seja E uma expresso genrica de entrada para o problema de
Satisfabilidade, contendo as clusulas L1, L2, ..., Lp. A questo de decidir se E pode ou no ser satisfeita ser
transformada numa questo de decidir se um certo grafo G=(V.A) possui ou no um clique de tamanho p. O
grafo G construdo da seguinte maneira: existe um vrtice diferente em G para cada ocorrncia de varivel em
E; existe uma aresta (vi, vj) em G, para cada par de variveis xi, xj de E, tais que xi xj, e xi, xj ocorrem em
clusulas diferentes de E. Desta forma, cada aresta (vi, vj) de G tal que as variveis xi e xj, correspondentes em
E, esto em clusulas diferentes e podem assumir o valor verdadeiro simultaneamente. Logo um clique em G
com p vrtices corresponde em E a p variveis, uma em cada clusula (pois no h arestas entre variveis da
mesma clusula), que podem assumir o valor verdadeiro sumultaneamente (pois no h aresta ligando variveis
x1 a x1, x2 a x2...). A recproca verdadeira. Portanto, decidir se E pode ser satisfeita equivalente a decidir
se G possui um Clique de tamanho p. A construo 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
ento, Clique NP-Completo.
5
6

o prmio Nobel da Cincia da Computao


vencedor do prmio Turing em 1985

12
E = (x1 x2) (x1 x2 x3) (x1 x2 x3)
x1

Note que cada clique de tamanho 3 no grafo ao lado


corresponde a uma atribuio de Verdadeiro s
variveis correspondentes em E de tal forma que E seja
satisfeita.

x1

x1
x2

x2

x3

x3

Em particular o clique mostrado diz que se x1 = V, x2


= V e x3 = V, ento E = V. Ou seja, uma soluo x1
= V, x2 = F e x3 = F.

x2

2) Problema de deciso do Caixeiro Viajante NP-Completo ?


Este problema de deciso consiste em se determinar se h um ciclo que passa por todos os vrtices apenas uma
vez com peso total no mximo um valor k. Precisamos mostrar que este problema NP e que algum NPCompleto se reduz a ele. Para isto usaremos o problema NP-Completo Ciclo Hamiltoniano.
(i) Deciso do Caixeiro Viajante NP
A exibio da justificativa SIM pode ser dada por uma seqncia de vrtices. A verificao da justificativa
apresentada consiste em se verificar que cada vrtice aparece na seqncia apenas uma vez, O(n) percorrer a
lista marcando os vrtices, observando se j no foram marcados, verificar se contm todos os vrtices, O(1)
durante a marcao contar os vrtices, e verificar se o peso total no ultrapassa o valor k, O(n) percorrer a lista
somando-se os pesos das arestas, descobrir cada peso O(1) se os dados esto em uma matriz de adjacncia.
Como o algoritmo polinomial, ento o problema da classe NP
(ii) Deciso do Ciclo Hamiltoniano Deciso do Caixeiro Viajante
Seja um grafo G com n vrtices para o qual queremos decidir se existe ou no um ciclo hamiltoniano.
Construmos um grafo G a partir de G contendo todos os vrtices e arestas de G. Atribumos peso 1 a todas
estas arestas. Criamos todas as demais arestas no existentes em G com peso 2. fcil notar que existe um ciclo
em G, que passa em todos os vrtices exatamente uma vez, com peso no mximo 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 no houver,
um ciclo em G dever passar por aresta de peso 2, o que ultrapassar o peso total n.

a
c
G

a
2

1
1

1c
1

2 1
1

d
G

f
2
2

O ciclo {a,b,c,d,e,f,a} em G tem


peso total 6, e representa um
ciclo hamiltoniano em G, um
grafo de 6 vrtices.

13
Logo, como
- Deciso do Caixeiro Viajante NP;
- Deciso do Ciclo Hamiltoniano Deciso do Caixeiro Viajante;
- Deciso do Ciclo Hamiltoniano NP-Completo (no foi mostrado neste texto);
ento Deciso do Caixeiro Viajante NP-Completo.
3) Conjunto Independente NP-Completo ?
J vimos que Clique NP-Completo. J vimos que Clique Conjunto Independente. Basta mostrar que
Conjunto Independente NP para terminar a prova de que NP-Completo. Deixamos como exerccio.

A Classe NP-Difcil
A classe NP-Difcil7 compreende os problemas para os quais apenas o passo (ii) do esquema para se demonstrar
que um problema NP-Completo considerada. Ou seja, um problema NP-Difcil se um problema NPCompleto tal que , no importando se ou no NP. Desta forma, a classe NP-Completo a
interseco da classe NP-Difcil e NP.
Somente problemas de deciso podem ser NP-Completo, j que em problemas de otimizao necessitamos
verificar se uma dada soluo realmente a melhor, e isto no poder ser feito em tempo polinomial. Alm
disso, se 1 um problema de deciso e 2 o correspondente de otimizao, quase certo que 1 2.

il
fc
i
-D
NP
NP-Completo

NP
P

Exemplos:
1) Problema de Otimizao do Caixeiro Viajante NP-Difcil ?
J mostramos que o problema de deciso do caixeiro viajante NP-Completo. Portanto, encontrar um ciclo em
um grafo G que passe por todos os vrtices, sem repetio, com peso total no mximo k, NP-Completo. Se
resolvemos o problema de otimizao do caixeiro viajante para este grafo G, o peso total p do ciclo encontrado
o menor valor possvel. Se p k, ento o problema de deciso tem resposta SIM. Se p > k ento o problema de
deciso tem reposta NO. Logo, possvel transformar polinomialmente Deciso do Caixeiro Viajante em
Otimizao do Caixeiro Viajante, j que a transformao da entrada o grafo o mesmo - e da sada uma
comparao O(1). Como a deciso NP-Completo, ento a otimizao do caixeiro viajante NP-Difcil.
2) Halting problem NP-Difcil ?
Um exemplo de um problema NP-Difcil que no 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-Difcil, mostraremos que SAT halting problem. A
entrada do algoritmo a expresso E com n variveis. O algoritmo testa as 2n possibilidades de valores para as
7

do ingls NP-hard

14
variveis. Se algum delas satisfizer a expresso E, o algoritmo pra. Seno, 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-Difcil.
Mas este problema indecidvel, no h algoritmo de qualquer complexidade que o resolva. Ento ele no NP.
Logo no pode ser NP-Completo.

Concluso
O estudo de problemas NP-Completo fornece um mecanismo que permite descobrir se um novo problema
fcil ou difcil. Se encontrarmos um algoritmo eficiente para o problema, ento no h dificuldade. Se
mostrarmos que tal problema NP-Completo ento no temos tanta esperana de se encontrar um algoritmo
eficiente.
Suponha uma situao em que voc tenha sido contratado para implementar um algoritmo para um determinado
problema. Depois de vrios esforos, percebe que seu algoritmo resolve o problema, mas apenas para entradas
pequenas. Para entradas maiores, ele gasta um tempo muito grande, at mesmo enorme. Quais das respostas a
seguir seria melhor ?
No consigo fazer melhor que isto. Melhor contratar outra pessoa...
No consigo fazer melhor que isto. E se eu no consigo porque no tem jeito!
Com certeza nenhuma destas uma boa resposta. Com a primeira voc perde o emprego. A segunda difcil que
seu chefe acredite... Para quem conhece a teoria NP-Completo e consegue mostrar que o problema NPCompleto ou NP-Difcil poderia responder:
Este problema reconhecidamente difcil. Existem muitos outros semelhantes, e durante muito tempo,
vrios dos melhores pesquisadores tem procurado encontrar algoritmos eficientes mas no conseguiram
ainda. Vou esperar at que eles consigam...
Este problema reconhecidamente difcil. Existem muitos outros semelhantes, e durante muito tempo,
vrios dos melhores pesquisadores tem procurado encontrar algoritmos eficientes mas no conseguiram
ainda. Vou ento implementar uma heurstica, ou seja, um algoritmo que no garante encontrar a melhor
resposta 100% das vezes, mas que geralmente se aproxima dela, e alm disso seja rpido.
Com certeza a segunda opo melhor. Conclumos que o que podemos fazer ao encontrar um problema NPCompleto ou NP-Difcil utilizar um algoritmo exata para resolv-lo (backtracking, busca exaustiva, ...) e
procurar escolher os melhores caminhos primeiro, resolvendo apenas para entradas pequenas. Ou encontrar um
algoritmo que ache uma resposta que, mesmo no sendo tima, garantida ser prxima da tima (mtodo
guloso, heurstica), encontrar um algoritmo que funcione bem na mdia, mas no necessariamente em todos os
casos (a complexidade no pior caso alta, mas na mdia satisfatrias), tentar resolver parte do problema mo
ou atravs de um especialista, para ajudar o algoritmo encontrar a soluo.

Resumo

Um algoritmo chamado eficiente, ou polinomial, quando pode ser executado em tempo polinomial no
tamanho da entrada
Um problema dito tratvel quando existe um algoritmo polinomial que o resolva
Os problemas podem ser classificados em problemas de deciso, de localizao e otimizao
A classe P contm os problemas para os quais se conhece um algoritmo polinomial para solucion-lo
A classe NP contm os problemas para os quais se conhece um algoritmo polinomial para verificar a
justificativa SIM dada como resposta ao problema

15

A classe NP-Completo compreende os problemas da classe NP que podem resolver todos os outros
problemas da classe NP. Ou seja, todos os problemas da classe NP podem ser polinomialmente
transformados nos problemas da classe NP-Completo
Sabe-se que P NP. No se sabe se P = NP ou P NP
Para se mostrar que um problema P basta apresentar um algoritmo polinomial que o resolva
Para se mostrar que um problema NP basta apresentar uma forma de representar uma justificativa da
resposta SIM e um algoritmo polinomial para verificar esta justificativa
Para se mostrar que um problema NP-Completo basta mostrar que ele NP e que algum problema NPCompleto polinomialmente transformvel nele
Para se mostrar que um problema NP-Difcil basta mostrar que algum problema NP-Completo
polinomialmente transformvel nele

Bibliografia
SZWARCFITER, Jayme Luiz, Grafos e algoritmos computacionais, Editora Campus, 1984
MACULAN, Nelson e CAMPELLO, Ruy Eduardo, Algoritmos e Heursticas, Editora da UFF, 1994
HOROWITZ, F. SAHNI, S. Fundamentals of computaer algorithms, Computer Science Press, 1978
Material de aula de AEDs III algoritmos e estruturas de dados III, professor Mrcio L. Bunte C.,
bacharelado, UFMG, 1993
Material de aula de PAA projeto de anlise de algoritmos, professor Nivio Ziviani, mestrado, UFMG,
1996

Vous aimerez peut-être aussi