Você está na página 1de 41

Noções de NP-

Completude
Jeane Melo
Roteiro
 Conceitos Básicos
 Exemplos
Conceitos Básicos
 Há muitos problemas com aplicações práticas
importantes para os quais não se conhece
algoritmos polinomiais. Tais problemas são
ditos Intratáveis.

 Como identificar esses problemas?

 Existem ou não algoritmos eficientes


(polinomiais) para tais problemas?
Conceitos Básicos
 Informalmente, problemas intratáveis são
aqueles para os quais o melhor limite
inferior conhecido é polinomial, enquanto
que o melhor algoritmo conhecido é
exponencial.

Problemas
intratáveis

polinomial exponencial
Conceitos Básicos
 Um problema é dito tratável se ele é
solúvel por um algoritmo eficiente.
 Dizemos que estes problemas pertencem
a classe P.
 Um problema é dito ser não-
deterministicamente polinomial, ou seja,
pertence a classe NP, se uma solução
proposta pode ser verificada como válida
em tempo polinomial.
Conceitos Básicos
Conceitos Básicos
 Esses problemas são ditos NP-Completos
ou intratáveis.
 Exemplos:
 Localização de recursos em sistemas
distribuídos
 Gerenciamento de memória (fragmentação)
 Caxeiro Viajante
Análise
 Nas análises de algoritmos feitas até o momento, nos
abstraíamos das constantes aditivas e multiplicativas,
utilizando conceitos formais para expressarmos a
complexidade (f), (f) e (f).

 No caso dos problemas intratáveis, não podemos


determinar se estes estão na classe dos polinomiais
(nc) ou dos exponenciais (cn), assim vamos abstrair o
grau do polinômio ou a base da função exponencial.
Conceitos Básicos
 É possível mostrar que problemas para os
quais não se conhece nenhum algoritmo
polinomial são computacionalmente
relacionados (Classe NP).
 Existe um algoritmo eficiente para algum
problema NP-completo se e somente se
exsitem algoritmos eficientes para todos
os problemas NP-completos (redução).
Conceitos Básicos

 Caxeiro Viajante
(Travelling Salesman
Problem)
 Partindo de uma cidade
qualquer, encontrar o
caminho mais curto que
passe por cada cidade
apenas uma vez,
voltando à cidade inicial.
Conceitos Básicos
 Uma forma conveniente de estudar
complexidade é considerar problemas cujo
resultado da computação seja sim ou não,
problemas de decisão.
 Podemos reescrever um problema que
não é de decisão, de modo que o
resultado seja sim ou não.
Conceitos Básicos
 “Se um problema P não é de decisão, então
existe um problema de decisão que ajudará a
resolver o problema P em tempo igual ao
tempo de resolver o problema de decisão
correspondente, a menos de um fator
polinomial.”
Conceitos Básicos
 Exemplo (Caxeiro Viajante):
 Dados um conjunto de cidades C = {c1, c2,
...cn}, uma distância d(ci, cj) para cada par de
cidades ci, cj em C, e uma constante k. Existe
um roteiro para todas as cidades em C cujo
comprimento total seja menor ou igual a k?
Reduções
 Reduções são uma forma de mostrar que
dois problemas são essencialmente
idênticos. Um algoritmo eficiente para um
problema implica em um algoritmo
eficiente para o outro.
Conceitos Básicos
Redução de Problemas (Idéia básica da redução)

Problema A: Problema B :
• Instancia de entrada: IA • Instancia de entrada: IB

• Solucao: SA • Solucao: SB

Definicão: uma reducão do problema A para o problema B


é um par de transformacoes f e g tal que, dada uma instância
qualquer IA de A:

• f transforma IA em uma instância IB de B e

• g transforma a solução SB de IB em uma solução SA de IA .


Conceitos Básicos
 Definição: a redução é polinomial quando
f(n) é um polinômio no tamanho da
entrada de A, ou seja, |IA|. Dizemos que A
é polinomialmente redutível para B.
 Teorema: Se A é polinomialmente
redutível para B e existe um algoritmo
polinomial para B, então existe um
algoritmo polinomial para A.
Conceitos Básicos
 Definição (transitividade):
 se A é polinomialmente redutível para B e B é
polinomialmente redutível para C, então A é
polinomialmente redutível para C.
Conceitos Básicos
 Obs: a noção de redutibilidade não é
simétrica, o fato de A ser polinomialmente
redutível para B, não implica o inverso.

 Dois problemas são polinomialmente


equivalentes, ou simplesmente
equivalentes, se cada um é
polinomialmente redutível para o outro.
Conceitos Básicos
 “NP é uma classe de problemas para os
quais existe um algoritmo polinomial,
embora não determinístico (NP).”
 Qual a diferença entre algoritmos
determinísticos e não determinísticos?
Conceitos Básicos
Conceitos Básicos
 Em um algoritmo determinístico o resultado de
cada operação é definido de maneira única.
 Um algoritmo não-determinista é capaz de
escolher uma dentre várias alternativas
possíveis a cada passo.
 Contém operações cujo resultado não é
unicamente definido, ainda que limitado a um
conjunto específico de possibilidades.
Conceitos Básicos
 No modelo de computacao nao-determinístico,
além dos comandos determinísticos usuais, um
algoritmo pode usar o comando Escolha(S ) , o
qual retorna um elemento do conjunto S.

 Não existe regra que especifique o


funcionamento do comando Escolha(S) .
Existem |S| resultados possíveis para esta
operação e o comando retorna aleatoriamente
um deles.
Conceitos Básicos
 Os algoritmos nao-determinísticos são
divididos em duas fases:
 Na primeira fase, que pode fazer uso do
comando nao-determinístico Escolha,
constrói-se uma proposta de solução.
 Na segunda fase, onde só são usados
comandos determinísticos, verifica-se se a
proposta de solução resolve de fato o
problema.
Conceitos Básicos
 Ao final da fase de verificação, os algoritmos não-
determinísticos sempre retornarão o resultado
Aceitar ou Rejeitar, dependendo se a solução
proposta resolve ou não o problema.

 A complexidade de execução do comando Escolha é


O(1).

 Uma máquina não-determinística é aquela que é


capaz de executar um algoritmo nao-determinístico.
É uma abstração!
Conceitos Básicos
Exemplo: determinar se um valor x pertence a um vetor
A de n posições.

Um algoritmo nao-determinístico seria:

BuscaND(A,x);
(* Fase de construcao *)
j ← Escolha(1, . . . , n);
(* Fase de verificacao *)
Se A[j ] = x entao retornar Aceitar;
senão retornar Rejeitar;
Conceitos Básicos
 Definição: P é o conjunto de problemas
que podem ser resolvidos por um
algoritmo determinístico polinomial.
 Definição: N P é o conjunto de todos os
problemas que podem ser resolvidos por
um algoritmo não-determinístico
polinomial.
Conceitos Básicos
 P=NP?
 Os algoritmistas acham que é falsa.
 Resposta correta vale 1 milhão de dólares  (Clay
Mathematics Institute, Cambridge University)
 Provas frustradas em:
http://www.win.tue.nl/~gwoegi/P-versus-NP.htm
Conceitos Básicos
 Como mostrar que a proposição é falsa ?
 Encontrar um problema A em N P e mostrar que
nenhum algoritmo determinístico polinomial pode
resolver A.
 Como mostrar que a proposição é verdadeira ?
 Mostrar que para todo problema B em N P existe um
algoritmo determinístico polinomial que o resolve.
Conceitos Básicos
 Será que existe um problema A em NP tal que, se A
está em P então todo problema em NP também está
em P ?

 Que característica deveria ter este problema A para


que a propriedade acima se verificasse facilmente ?

 “Basta” encontrar um problema A em NP tal que,


para todo problema B em NP existe uma redução
polinomial de B para A.

 Definição: A é um problema NP-difícil se todo


problema de NP se reduz polinomialmente a A.
Conceitos Básicos
 A é um problema NP -completo se
A está em N P e
 A está em N P-difícil.
Exemplos de Problemas NP

Caixeiro Viajante

Se caracteriza por, dado um conjunto de n cidades e


uma matriz de distâncias [1..n,1..n], fazer com que
seja encontrado um caminho que tenha a menor
distância a ser percorrida para que sejam visitadas
todas as cidades passando exatamente uma única
vez em cada cidade e retornando a cidade de origem.
Exemplo de Problema NPC
Satisfatibilidade de expressão booleana:
 Problema: Dada uma fórmula booleana φ em CNF
(Forma Normal Conjuntiva), nas variáveis x1,...,xn,
existe uma atribuição t : {x1,...,xn}→{VERDADE,
FALSO} que torna φ verdadeira?
 Exemplo: φ = (x1) ∧ (¬x1 ∨ ¬x2 ∨ x3) ∧ (¬x3).
 Se t(x1) = VERDADE,t(x2) = FALSO,t(x3) = FALSO,então
t(φ) = VERDADE
 Se t(x1) = VERDADE,t(x2) = VERDADE,t(x3) = FALSO,
então t(φ) = FALSO
Satisfatibilidade de expressão booleana

 Boolean Satisfiability Problem (SAT)


 Foi o primeiro problema NPCompleto
proposto por Stephen Cookem em 1971.
Foi demonstrado através de máquina de
Turing.
Exemplo de Problemas NPC
 O problema da mochila
(Knapsack problem)
 Input: Objetos com peso
e valor; capacidade da
mochila.
 Output: itens que cabem
na mochila maximizando
o valor da carga
Exemplo de Problema NPC
 O Circuito Hamiltoniano:
 Dado um grafo orientado, determine se ha
um ciclo, que visite cada no exatamente uma
vez, terminando no nó inicial.
 “Um algoritmo que fatora qualquer número de n bits em
n^(10^(10^10)) operações é polinomial pela definição, mas é
absolutamente inútil na prática, mesmo extrapolando o aumento
da velocidade dos computadores por vários séculos. Por outro
lado, um algoritmo que fizesse isso com n +
1.0000000000000000000000000001^n ou
n^(1+log(log(log(log(log(log(n))))))) operações seria
maravilhosamente rápido e útil, apesar de não ser polinomial.

 Estes exemplos mostram porque a questão "P = NP?" é tão difícil.


Os algoritmos polinomiais incluem tanto os que fazem
n^1.000000000000000000001 passos quanto os que fazem n^14
ou n^(10^(10^10)), e os não-polinomiais incluem tanto os que
fazem n^(1+log(log(log(log(log(log(n))))))) passos quanto os que
fazem 2^n ou 10^(10^(10^n))).” Jorge Stolfi
Professor Titular e Diretor
Instituto de Computação,
Unicamp
Conceitos Básicos
 Há uma série de técnicas para lidar com
problemas intratáveis a ser escolhida de
forma conveniente
 Algoritmos probabilísticos
 Algoritmos de aproximação (heurísticas)
 Programação Dinâmica
 Backtracking
 etc
Conceitos Básicos
 Questões:

 Optimalidade
 Robustez
 Eficiencia
 Completude das soluções
Conceitos Básicos
 Algoritmos de aproximação (solução pode ser ou não
ótima)
 Algoritmos que tratam problemas NPC em tempo
polinomial na media (Comprometem a eficiência)
 Algoritmos que funcionam para casos especiais da
entrada (Comprometem a “completude”.)
 Algoritmos exponenciais que trabalham bem para
pequenas entradas (backtracking).
Sugestões de leitura
 http://www.ime.usp.br/~pf/analise_de_algo
ritmos/aulas/NPcompleto.html
 http://www.dca.fee.unicamp.br/~ting/Cours
es/ea869/faq1.html
 http://www.inf.ufrgs.br/~mrpritt/lib/exe/fetch
.php?media=cmp155:ca-notas-2561.pdf
(cap 11)
 Cormen – Capítulo 34
Referências
 Grafos e Algoritmos Computacionais –
Jayme Luiz Szwarcfiter (editora campus)
(UFRJ)
 Cormen
 Slides e figuras: Prof. Katia Guimarães –
Cin-UFPE

Você também pode gostar