Você está na página 1de 22

Introdução à Computação II

5954006

8. Problemas NP-Completos

Prof. Renato Tinós

Local: Depto. de Computação e Matemática


(FFCLRP/USP)
Introdução à Computação II – 5954006 1
8.1. Introdução

• Em geral,

 Problemas que podem ser resolvidos por um


algoritmo de tempo polinomial (ou seja, com
tempo de execução O(nk) )
 São considerados tratáveis

 Problemas que não podem ser resolvidos por um


algoritmo de tempo polinomial
 São considerados intratáveis (ou difíceis)

Introdução à Computação II – 5954006 2


8.1. Introdução

• Todos os problemas podem ser resolvidos em


tempo polinomial?

 Não!!!
 Exemplos
– Torre de Hanói: O(2n)
– Achar todos os caminhos no Problema do Caixeiro Viajante: O(n!)
 Problemas Não-Polinomiais

Introdução à Computação II – 5954006 3


8.1. Introdução
• Problema do Caixeiro Viajante

B
6km
7km

A 8km 9km D

C
5km
6km

Introdução à Computação II – 5954006 4


8.1. Introdução
• Algoritmos de Aproximação (ou Não-
Determinista)
 É capaz de escolher uma dentre várias alternativas
possíveis a cada passo
 Utilizam a função escolhe(C), que escolhe um dos
elementos do conjunto C de forma não
necessariamente determinista (por exemplo, de forma
aleatória)
 Exemplo: Algoritmo buscaAleatoria( a[ ] , l , r , x )

i  escolhe( a[ ] , l , r )
se ( a[i] = x )
retorna sucesso
senão
retorna insucesso
fim se
Introdução à Computação II – 5954006 5
8.1. Introdução
• Problemas de Decisão
 Para o estudo teórico da complexidade de algoritmos é
conveniente considerar problemas cujo resultado da
computação seja “sim” ou “não”
 Entre outros aspectos, facilitam o uso de mecanismos da teoria de
linguagem formal
 Problemas de otimização, em que cada solução possível é
associada a um valor de qualidade e em que desejamos
encontrar a solução ótima, podem ser representados como
problemas de decisão
 Exemplo: Versão do Problema do Caixeiro Viajante cuja resposta é
“sim” ou “não”
– Dados: um conjunto de cidades C = { c1 , c2 , ... , cn }, uma distância
d(ci , cj) para cada par de cidades ci , cj  C , e uma constante k
– Questão: existe uma rota para todas as cidades em C cujo
comprimento total seja menor ou igual a k ?

Introdução à Computação II – 5954006 6


8.1. Introdução
• Problemas Abstratos
 Um problema abstrato Q é definido como uma
relação binária sobre um conjunto I de instâncias de
problemas e um conjunto S de soluções
 É mais geral que o problema de decisão

• Problemas Concretos
 Problemas cujo conjunto de instâncias é um conjunto
de cadeias binárias
 Objetos compostos, como por exemplo grafos, pares
ordenados e funções, podem ser codificados como cadeias
binárias

Introdução à Computação II – 5954006 7


8.2. Classes de Problemas

• Consideraremos aqui três classes de problemas:


 Classe P
 Polinomiais
 Classe NP
 Classe NPC
 NP-Completo

Introdução à Computação II – 5954006 8


8.2.1. Classe P
• Consiste no conjunto de problemas que podem ser
resolvidos em tempo polinomial por algoritmos
deterministas
 Problemas Polinomiais

 Ou seja, podem ser resolvidos em tempo O(nk) para


alguma constante k e tamanho da entrada n

 A maioria dos problemas examinados neste curso é da


Classe P
 Exemplos:
– Busca Linear: O(n)
– Busca Binária: O(log2n)
– Ordenação por Heapsort: O(n log2n)
Introdução à Computação II – 5954006 9
8.2.1. Classe P

• Formalmente

A classe de complexidade P é definida como o


conjunto de problemas de decisão concretos que
podem ser resolvidos em tempo polinomial

 Um problema concreto para o qual é fornecida uma


instância i de comprimento n pode ser resolvido em
tempo polinomial se existe um algoritmo que o
resolve no tempo O(nk) para alguma constante real
k

Introdução à Computação II – 5954006 10


8.2.1. Classe P
• Problemas da Classe P são considerados tratáveis
 Embora seja razoável considerar um algoritmo com
O(n100) intratável, poucos problemas práticos exigem
tempo de execução tão alto
 Além disso, a experiência mostra que, uma vez que um algoritmo
de tempo polinomial para um problema é descoberto, algoritmos
mais eficientes freqüentemente aparecem
 Um problema que pode ser resolvido em tempo
polinomial em um modelo de computação pode ser
resolvido em outro
 Ex.: em um computador paralelo em que o número de
processadores cresce polinomialmente com o número de
entradas
 A composição (polinomial) de problemas polinomiais
resulta em um problema polinomial
Introdução à Computação II – 5954006 11
8.2.2. Classe NP

• Nondeterministic Polynomial (NP) time: Classe dos


problemas que

 São “verificáveis” em tempo polinomial


 Ou seja, se tivéssemos de algum modo um “certificado” de uma
solução, poderíamos verificar se o certificado é correto em tempo
polinomial
– Exemplo:
» É difícil provar que um número natural qualquer z (por exemplo,
15.790.107) não é composto (ou seja, que z não pode ser escrito
como o produto de dois outros números naturais x e y diferentes
de 1 se os valores de x e y não são conhecidos)
» Contudo, é fácil verificar que z (por exemplo, 15.790.107) é
composto se x e y (por exemplo 3251 e 4857) são conhecidos

 Podem ser resolvidos por algoritmos não-deterministas em


tempo polinomial Introdução à Computação II – 5954006 12
8.2.2. Classe NP

• Para mostrar que um determinado problema


está em NP, basta

 Apresentar um algoritmo não-determinista que o


resolva em tempo polinomial
 Apresentar um algoritmo determinista polinomial
para verificar que uma dada solução é válida

Introdução à Computação II – 5954006 13


8.2.2. Classe NP

• Como os algoritmos deterministas são um


caso especial de algoritmos não-deterministas,
sabe-se que PNP
 Ou seja, qualquer problema em P também está em
NP, tendo em vista que, se um problema está em P,
então podemos resolvê-lo em tempo polinomial
• A questão aberta é se P é ou não um
subconjunto próprio de NP
 Ou seja, se P=NP ou se PNP
 Esta questão é o problema não-resolvido mais
famoso da ciência da computação

Introdução à Computação II – 5954006 14


8.2.2. Classe NP

• Será que existem algoritmos polinomiais


deterministas para todos os problemas em NP?

 Se a resposta é positiva, então P=NP


 No entanto, não foram encontrados até agora algoritmos
deterministas polinomiais para muitos problemas em NP
 Se a resposta é negativa, então PNP
 No entanto, a prova para tal informação parece exigir
técnicas desconhecidas e nenhum limite inferior não-
polinomial foi provado para vários destes problemas

Introdução à Computação II – 5954006 15


8.2.2. Classe NP
• Tais fatos trazem as seguintes conseqüências:
 Existem muitos problemas práticos em NP que podem
ou não pertencer a P
 Não conhecemos algoritmos polinomiais deterministas
eficientes para tais problemas
 Se conseguirmos um indicativo que um problema não
pertence a P, então é mais produtivo procurar um
algoritmo não-determinista para ele do que ficar
tentando achar um algoritmo polinomial determinista
 Como não existe a prova de que NPP, sempre há a
esperança de que alguém descubra um algoritmo
polinomial eficiente para tais problemas
 Existe um esforço considerável para provar que NPP
 Mas a questão continua em aberto

Introdução à Computação II – 5954006 16


8.2.2. Classe NPC

• Classe NP Completo (NPC)


 Um problema de decisão P1  NPC quando
 P1  NP
 P1 é polinomialmente trasformável em P2  NPC

Entrada Entrada Solução Solução


de P1 de P2 para P2 para P1

Transformação Algoritmo Ax Transformação


Polinomial Polinomial

Introdução à Computação II – 5954006 17


8.2.2. Classe NPC

• Para mostrar que um determinado problema


está em NPC, basta
 Apresentar um algoritmo não-determinista que o
resolva em tempo polinomial
 Apresentar algoritmos deterministas polinomiais
que transformem suas entradas e saídas em
entradas e saídas de um problema
conhecidamente da classe NPC

Introdução à Computação II – 5954006 18


8.2.2. Classe NPC

• Os problemas da classe NPC são


computacionalmente relacionados

• Um problema da classe NPC poderá ser


resolvido em tempo polinomial por um
algoritmo determinista somente se todos
os problemas da classe NPC puderem ser
resolvidos em tempo polinomial por
algoritmos deterministas

Introdução à Computação II – 5954006 19


8.2.2. Classe NPC
• Exemplos de problemas da Classe NPC
 Problema do Caixeiro Viajante
 Problema do Ciclo de Hamilton em grafos com
grau > 2 (grau: número máximo de arestas ligadas
a um nó qualquer do grafo)
 Um ciclo de Hamilton em um grafo é um ciclo que passa
por todos os vértices uma única vez

0 1
Exemplo: 0 1 4 2 3 0
4

3 2

Introdução à Computação II – 5954006 20


8.2.2. Classe NPC

• Exemplo: Redução polinomial do ciclo de


Hamilton para o problema do caixeiro viajante
 Para as cidades use os vértices
 Para as distâncias use 1 se existir um arco no grafo
original e 2 caso contrário
 Use o problema do caixeiro viajante para achar um
roteiro menor ou igual ao número de vértices V

Introdução à Computação II – 5954006 21


Comentários

• Referências
 T. H. CORMEN; C. E. LEISERSON; C. STEIN; R.
L. RIVEST; (2002). “Algoritmos: Teoria e Prática”,
Editora Campus
 N. ZIVIANI (2004). “Projeto de Algoritmos”,
Thomson.

• Lista de alguns problemas NP


 http://www.nada.kth.se/~viggo/problemlist/compendium.html

Introdução à Computação II – 5954006 22

Você também pode gostar