A Classe de Problemas NP
Referências:
• M. R. Garey and D. S. Johnson. Computers and Intractability: a Guide to the
Theory of NP Completeness. Freeman, 1979. (biblioteca da FEUP)
• Richard Karp. NP-Complete Problems. Tutorial em video, 1993. (biblioteca da
FEUP)
•David Harel. Algorithmics- The Spirit of Computing. Addison-Wesley 1987.
NP
Fácil e difícil
 situação "normal": tempo de execução linear no tamanho da entrada
-
a maior parte dos algoritmos vistos (excepto o do fluxo numa rede que é polinomial)
-
os casos em que se obtém melhor que linear envolvem pré-processamento ou são problemas
aritméticos
Mas há situações "estranhas", mesmo na Lógica:
S1: esta frase tem mais do que 10 caracteres – V
S2: esta frase está escrita em Inglês – F
S3: esta frase é verdadeira – V
S4: esta frase é falsa – F , V ?
S4 é INDECIDÍVEL
— problema está na auto-referência
NP
Fácil e difícil
 Problema da terminação
-
Algoritmo A
while( X != 1 ){ X= X-2 }
Stop
-
Termina para entradas X ímpar; não termina para entradas X par
-
Algoritmo B
while( X != 1 ){
if( X é par ){ X= X/2 }
else { X= 3*X+1 } }
Stop
-
Entrada 7 dá sequência 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1 e termina
-
Todas as entradas em que foi testado conduziram a sequências que terminaram, por vezes
após crescerem muito e flutuarem de forma imprevisível. Mas não se conseguiu provar que
terminam sempre (problema da Teoria dos Números).
-
Parar quando?
NP
Fácil e difícil
 Problema da terminação — é possível construir um programa capaz de detectar
ciclos infinitos? (útil para compiladores...)
• programa LOOP(P), com parâmetro programa P, corre P sobre ele próprio, isto é, executa P(P);
- responde SIM se P entrar em ciclo; entra em ciclo se P terminar
• aplicando LOOP a si próprio: P=LOOP
- se P(P) termina então LOOP(P) tem que entrar em ciclo; mas assim LOOP(LOOP) tem
que entrar em ciclo e terminar ao mesmo tempo
- se P(P) entra em ciclo, então LOOP(P) termina: contradição
- programa LOOP não se pode construir
LOOP
P
LOOP
LOOP
LOOP(LOOP)
P(P)
S
Termina?
N
S
Termina?
N
Contradição!
SIM
SIM
NP
Fácil e difícil
Circuito de Euler
(caminho que toca todas as arestas 1e 1 só vez)
Caminho mais curto a partir de um vértice
6
10
7
1
ALGORITMO LINEAR
2
5
4
Ciclo Hamiltoniano
(ciclo simples que passe em todos os vértices)
Caminho mais longo a partir de um vértice
ALGORITMO EXPONENCIAL
9
3
8
• Não tem caminho de Euler
• Não tem ciclo Hamiltoniano
NP
Fácil e difícil
Árvore de Steiner
- Qualquer par de pontos pode ser ligado por um segmento
- Problema: encontrar o mínimo da soma dos segmentos que ligam todos os pontos
obrigatórios (pontos opcionais podem ser usados também)
DIFÍCIL: ALGORITMO EXPONENCIAL
Mesma árvore sem pontos opcionais
FÁCIL: ALGORITMO LINEAR
n
5
10
20
30
n^3
125
1 000
8 000
27 000
2^n
32
1024
1 048 576
1 073 741 824
Uso do ponto opcional:
menor distância na ligação
dos 3 pontos
NP
Problemas de Pesquisa Combinatória
 De uma estrutura vasta de soluções possíveis, escolher uma que satisfaça
determinadas restrições
 Variantes
•
•
Problemas de decisão
Problemas de optimização
 Exemplos
•
•
•
•
•
Escalonamento: de operações de manufactura, de voos, de aulas
Encaminhamento: veículos, chamadas telefónicas, bits, petróleo, gás
Planeamento: de equipamentos numa cidade, de componentes numa placa
de VLSI
Biologia Computacional
Criptografia
NP
Tratabilidade
• Definição informal (J. Edmonds, 1965)
– Um problema é tratável se pode ser resolvido num número de passos
limitado por uma função polinomial no tamanho da entrada
• Requer formalização de
– Problema
• reduz-se a problema de decisão
• procurar valor mínimo de função  provar que existe valor < k
– Entrada
• codifica-se em cadeia de 0’s e 1’s, tamanho é nº de bits
– Resolver problema
• aceitar ou rejeitar uma entrada (decisão)
– Número de passos
• usa-se modelo de computação universal (máquina de Turing)
P: conjunto de problemas de decisão solúveis em tempo polinomial
NP
Tratabilidade
• Porquê “tratável” para problemas polinomiais?
– (N100) não parece muito tratável...
• Problemas polinomiais típicos: ordem baixa
• Paralelização
– pode ser usada para aumentar poder de cálculo
– pode compensar a ordem de crescimento
• Polinómios têm boas características de fecho
– fechados sob operações de adição, multiplicação, composição
– Ex: saída de algoritmo polinomial é entrada de outro algoritmo
polinomial : algoritmo resultante é polinomial
NP
Problemas de Decisão
• Problemas de Optimização
– têm objectivos muito diversos
– é difícil uniformizar problemas e soluções
• Problemas de Decisão
– Soluções são respostas Sim/Não
– Exemplo: Problema do caminho mais curto
• Optimização: encontrar o caminho mais curto
• Decisão: Sim/Não existe um caminho de comprimento <k
• Como comparar soluções
– Problema de optimização fácil - problema de decisão fácil
– Problema de decisão difícil- problema de optimização difícil
NP
Problemas em P
• Um problema L é da classe P se existe um algoritmo A tal que
– A aceita todas as entradas de L
– A rejeita todas as entradas que não são de L
– Há um polinómio f tal que, para qualquer entrada x, A termina antes de
f(|x|) passos
• Redução em tempo polinomial
– Um problema de decisão L é redutível a um problema de decisão M se
existe uma função polinomial computável F de strings em strings tal que
x é aceite por L se e só se F(x) é aceite por M
– Nestas condições, diz-se que M é pelo menos tão geral como L (pelo
menos tão difícil como L)
x
F
F(x)
M
Se L é redutível a M,
e M está em P,
então L está em P também
NP
Problema da satisfação Booleana
–
–
–
–
Variáveis proposicionais: A, B, C, …
Literais: A, ~A, B, ~B, …
Cláusulas: A  ~B  ~D  ~F
Forma Normal Conjuntiva (CNF): conjunção de cláusulas
(A  ~B  ~D  ~F)  (C  B  ~D)  (~A  F  D)  ...
• Fórmula CNF é satisfazível se
– existe uma atribuição de valores lógicos às variáveis que
torna a fórmula verdadeira
• Exemplo:
(A  ~B  ~D  ~F)  (C  B  ~D)  (~A  F  D)
atribuindo o valor V às variáveis A, B, F
e o valor F às variáveis C, D a fórmula é verdadeira.
NP
Problema dos vértices com 3 cores
Colorir os nós de um grafo de forma
a que nenhum par de nós adjacentes
fique com a mesma cor
Redução de 3 cores a satisfação Booleana:
Variáveis para cada vértice: Ri Gi Bi
Cláusulas
Para cada vértice:
Ri  Gi  Bi
~ Ri  ~Gi
~ Ri  ~Bi
~ Gi  ~Bi
Para cada aresta:
~ Ri  ~Rj
~ Bi  ~Bj
~ Gi  ~Gj
Satisfação Booleana é pelo menos tão geral (tão difícil) como 3 cores
NP
Classe NP
 Classe NP (algoritmo não determinístico de verificação polinomial)
• classe de problemas de decisão que podem ser verificados em tempo
polinomial
(intuição: solução pode ser difícil de encontrar, mas é fácil verificar que satisfaz o problema)
•
•
máquina não determinística tem uma escolha de passos seguintes e faz
sempre a escolha óptima (adivinha!) — característica poderosa mas
limitada: não serve para resolver problemas indecidíveis
descoberta uma solução, a sua verificação é polinomial
Ex: dado um ciclo Hamiltoniano é fácil confirmar
 Formalmente (R. Karp):
•
Um problema de decisão L está em NP se e só se existe um algoritmo de
decisão polinomial A tal que x está em L se e só se existe uma testemunha
y, de tamanho limitado por um polinómio no comprimento de x, tal que A
aceita o par (x, y)
NP
Problemas NP-completos
Um problema é NP-completo se qualquer problema em NP
puder ser reduzido àquele em tempo polinomial
 São os mais difíceis da classe; podem ser usados como subrotinas para a solução
dos outros (reduz-se problema P1 a problema P2 que é NP-completo, resolve-se
este e reconverte-se a solução)
 Se se descobrir uma solução polinomial para um deles, fica descoberta para
todos, pois a conversão é polinomial
 Suponhamos P1 NP-completo e P2 em NP; além disso existe uma redução
polinomial de P1 a P2; como qualquer problema em NP se reduz
polinomialmente a P1, também se reduz a P2; então P2 é NP-completo
 Teorema de Cook (1971): Satisfação Booleana é NP-completo
 Prova: problemas de NP podem ser resolvidos em tempo polinomial por uma
máquina não determinística; funcionamento desta pode ser descrito por uma
expressão Booleana; obter resposta para um problema reduz-se a satisfazer a
expressão.
NP
Ciclo Hamiltoniano  Caixeiro Viajante
 Problema do caixeiro-viajante:
Dado um grafo completo com custos nas arestas e um inteiro K existe um ciclo
simples que visite todos os vértices e tenha um custo total  K?
- aplicação: posicionamento de um furador de circuitos impressos para encaixar
componentes (deslocar é que demora, não é furar)
 Assumindo que o problema do ciclo Hamiltoniano é já sabido ser NP-completo
 reduz-se ciclo Hamiltoniano ao do caixeiro viajante:
 um grafo G é convertido num grafo completo G' com os mesmos vértices
 aresta de G’ tem peso 1 se pertencer a G e 2 caso contrário
 K igual ao número de vértices
 G tem um ciclo Hamiltoniano sse G' tiver um percurso de caixeiro viajante de
custo total K
NP
Satisfação Booleana  Cobertura de Vértices
 Problema da cobertura de vértices (VC):
Dado um grafo, decidir se as suas arestas podem ser cobertas por um número K
de vértices; cada aresta tem de ser incidente com pelo menos 1 dos K vértices
 Solução sobre um grafo G: subconjunto  dos vértices
- cada aresta de G tem um dos vértices em 
-  tem K ou menos elementos
 Problema é NP – a decisão sobre uma solução é feita em tempo polinomial
 Para mostrar que VC é NP-completo: reduz-se SAT a VC
Variáveis de SAT: X1, X2, ...Xn
Cada variável Xi: 2 vértices ui e vi e uma aresta (ui, vi)
Cada cláusula Ci= L1  L2  L3  ... Lm: 1 grafo completo com m vértices wi1, ...wim
Ligação entre vértices:
Se Lj = Xk
ligar wij a uk
Se Lj = ~Xk
ligar wij a vk
Inteiro K do problema VC: nº variáveis + nº ocorrências de literais - nº de cláusulas em SAT
NP
Satisfação Booleana  Cobertura de Vértices
 Exemplo de expressão de SAT
(X1  X2  ~X3)  (~ X1  X3)  (X1  ~ X2  X3)  (X2)
U1
w11
V1
U2
V2
U3
V3
w12
w21
w13
w22
w32
w31
w41
w33
NP
Solução de SAT é solução de VC
• S tem resposta SIM em SAT
– existe atribuição de valores lógicos a variáveis que satisfaz as cláusulas
• No problema VC correspondente, fazer uma cobertura V :
– cada variável com valor V: Ui está em V
– cada variável com valor F: Vi está em V
– cada cláusula: pelo menos 1 literal é V, logo o nó w correspondente é
adjacente a um vértice de V
– todos os outros vértices w: vão para V
• Cobertura V tem número de vértices não superior a K
– V tem exactamente K vértices
• Então V tem uma resposta SIM em VC
NP
Solução de VC é solução de SAT
• Problema V tem resposta SIM em VC
– grafo construído de acordo com a transformação dada tem cobertura com
não mais de K vértices
• cada subgrafo (Ui, Vi) precisa de 1 vértice na cobertura
• cada subgrafo completo wi1, wi2, ..., win tem no máximo 1 vértice que não
está na cobertura (se retirarmos mais do que 1, alguma aresta fica descoberta)
• Instância correspondente de SAT (S)
– Para cada Ui em V , fazer Xi = V
– Para cada Vi em V , fazer Xi = F
– Cada subgrafo completo tem um vértice wi que não está em V .
• por construção do grafo, o vértice wi é adjacente a um de Ui ou Vi, seja W
• como V é cobertura, W tem de estar em V ou wi não estaria coberto
• Então S, o problema SAT original, também tem resposta SIM
– cada cláusula tem 1 literal com valor V
NP
P=NP ?
 Mais importante problema em aberto na Ciência da Computação
 Se L é NP-completo: L está em P se e só se P = NP
 Não se conseguiu ainda encontrar nenhum problema NP que se prove não ter
solução polinomial
- é muito difícil provar limites inferiores exponenciais
portanto o não-determinismo pode não ser um avanço importante!
 Nem todos os problemas decidíveis estão em NP
• determinar se um grafo não possui ciclos Hamiltonianos — enumerar
todos os ciclos? Não se sabe se está em NP.
Decidível
NP
?
P
NP
Conclusão
 Problema NP-completo: não devemos esperar encontrar algoritmo eficiente
para resolvê-lo em todos os casos
 Alternativa:
Procurar algoritmos que lidem com a maior parte das instâncias do problema
Em problemas de optimização: aceitar soluções aproximadas (subóptimas)
Referências:
• M. R. Garey and D. S. Johnson. Computers and Intractability: a Guide to the
Theory of NP Completeness. Freeman, 1979.
• Richard Karp. NP-Complete Problems. Tutorial em video, 1993. (biblioteca da
FEUP)
•David Harel. Algorithmics- The Spirit of Computing. Addison-Wesley 1987.
NP
Download

Problemas NP