Introdução à NP-completude Katia S. Guimarães abril/2008 [email protected] 1 Problemas NP-Completos Há muitos problemas com aplicações práticas importantes para os quais não se conhece algoritmos polinomiais. Esse problemas são chamados intratáveis. Dentre os problemas intratáveis podemos citar muitas aplicações inadiáveis. abril/2008 [email protected] 2 Problemas NP-Completos Problemas Intratáveis: - Gerenciamento de filas para uso de CPU (escalonamento) - Gerenciamento de memória (fragmentação) - Árvore geradora de grau limitado (Proj. redes) - Árvore geradora de diâmetro limitado (Redes) - Caminho Hamiltoniano - Caixeiro Viajante (TSP) - Localização de recursos em Sist. Distribuídos. abril/2008 [email protected] 3 Problemas NP-Completos 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 abril/2008 exponencial [email protected] 4 ABSTRAINDO O GRAU DO POLINÔMIO E A BASE DA FUNÇÃO EXPONENCIAL Antes, nós desejávamos nos abstrair das constantes aditivas e multiplicativas. Para expressarmos esta abstração formalmente, introduzimos os conceitos de (f), (f) e (f). Como não sabemos se os problemas intratáveis estão na classe dos polinomiais (n^c) ou dos exponenciais (c^n), vamos querer nos abstrair de qual seja o grau do polinômio ou a base da função exponencial. Queremos saber somente a qual destas duas classes o problema pertence. abril/2008 [email protected] 5 Problemas de Decisão Para simplificar as definições, trataremos apenas de problemas de decisão, ou seja, problemas cuja solução é “SIM” ou “NÃO”. Ex: Entrada: G(V,E), x1, x2, ..., xk V, C Saída: Existe em G um caminho passando por todos os vértices xi dados, cujo custo seja no máximo C? abril/2008 [email protected] 6 Problemas de Decisão Se um problema P não é de decisão (Ex: Qual o custo do menor caminho passando pelos vértices dados?), 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. abril/2008 [email protected] 7 Problemas NP-completos Para podermos definir formalmente a classe NP-completo, vamos antes apresentar duas outras classes de problemas: - Classe NP - Classe NP-difícil NP-completo = NP NP-difícil abril/2008 [email protected] 8 Problemas NP NP é uma classe de problemas para os quais existe um algoritmo polinomial, embora não determinístico (daí o NP). (Note que esta classe inclui os problemas polinomiais.) polinomial abril/2008 Algoritmo NP [email protected] 9 Algoritmos Não-determinísticos Um algoritmo é não-determinístico se ele é escrito numa linguagem não-determinística: - Contém todos os comandos de uma linguagem regular, e - Contém um comando salto-nd Os problemas com algoritmos polinomiais também pertencem à classe NP, pois estes algoritmos usam uma linguagem não-determinística, embora sem lançar mão do comando salto-nd. abril/2008 [email protected] 10 Algoritmos Não-determinísticos Um algoritmo não-determinístico para um problema de decisão responde “SIM” se existe pelo menos uma maneira de fazer escolhas de execução nos salto-nd de forma que a resposta do algoritmo seja “SIM”, e “NÃO”, caso todas as combinações de escolhas de execução nos salto-nd levem a uma resposta “NÃO”. abril/2008 [email protected] 11 Problema CLIQUE ENTRADA: - G(V, E), um grafo não-direcionado e sem peso nas arestas, e - k , um número natural, k |V| SAÍDA: - Existe em G um subgrafo completo com k vértices? abril/2008 [email protected] 12 Algoritmo NP para CLIQUE Algoritmo CLIQUE (G(V, E), k) Para cada v V faça /* Decidir se escolhido */ salto-nd { escolhido [v] true; escolhido [v] false } /* Vértices escolhidos formam um clique? */ forma-clique true; Para cada v V faça se escolhido [v] então /* v tem k-1 vizinhos marcados? */ cont 0; para todo w Adj(v) faça se escolhido [w] então cont cont + 1; se cont k -1 então forma-clique false; Output (forma-clique). abril/2008 [email protected] 13 Algoritmo NP para CLIQUE Custo do Algoritmo CLIQUE T(n) = [n] + [n + |E|] Note que - Se existir um clique no grafo G, então existe uma seqüência de escolhas nos comandos salto-nd que levam a uma resposta “SIM”. - Se não existir um clique em G, a verificação irá forçar o “NÃO”. abril/2008 [email protected] 14 Problemas NP-difíceis A classe dos problemas NP-difíceis contém os problemas de complexidade maior ou igual à do problema SATisfatibilidade. S A T polinomial abril/2008 Algoritmo NP [email protected] 15 Redução Polinomial A maneira de mostrar que a complexidade de SAT é um limite inferior para a complexidade de um problema P é fazer uma redução polinomial de SAT a este problema P, ou seja, definir uma solução para SAT usando uma solução para P como “caixa preta”. abril/2008 [email protected] 16 Redução Polinomial Formalmente, redução polinomial de um problema P* a um outro problema P, é um algoritmo polinomial que transforma uma instância x de P* em um instância y de P, de forma que: P*(x) = “SIM” se e somente se P(y) =“SIM”. abril/2008 [email protected] 17 Redução Polinomial A complexidade de SAT é um limite inferior para a complexidade do problema P porque se o problema P for resolvido em tempo polinomial, o problema SAT também poderá ser resolvido em tempo polinomial. x inst. de SAT Redução Polinomial y inst. de P Algoritmo Polinomial para P x SAT (sse) yP Algoritmo polinomial para SAT abril/2008 [email protected] 18 Problema SAT Entrada: Expressão booleana , na Forma Normal Conjuntiva (FNC), ou seja, uma conjunção de disjunções. Saída: Existe uma valoração das variáveis de de forma que seja verdadeira? Ex: = (x y z) (x y z) (x y z) A resposta para é “SIM” abril/2008 [email protected] ( x=1, y=1, z=0 ) 19 Redução de SAT a Clique Algoritmo polinomial para, dada uma expressão booleana na FNC, , (instância de SAT), gerar um grafo G(V,E) e um natural k |V| tal que: é satisfatível sse existe um k-clique em G. Algoritmo para gerar G(V,E) e k: Seja = c1 c2 ... cm V {vi j, onde i é a cláusula e j é a variável } E { (vi j, v k l), onde i k e vi j v k l }. abril/2008 [email protected] 20 Redução de SAT a Clique Exemplo: = ( x y z) (x y z) (y z) x x y y y z z abril/2008 z [email protected] 21 Redução de SAT a Clique 1. O algoritmo de redução é polinomial. O número de vértices gerados é menor que o tamanho da entrada (número de símbolos na expressão booleana). O número de arestas geradas é limitado superiormente por |V| x |V|. abril/2008 [email protected] 22 Redução de SAT a Clique 2. é satisfatível sse existe um k-clique em G. Se é satisfatível, então existe uma valora ção das variáveis em que faz verdadeira. Como está na FNC, há pelo menos um literal em cada cláusula com valor verdadeiro. Considere os vértices V de G que correspondem a estes literais. O subgrafo gerado G[V] é um m-clique. abril/2008 [email protected] 23 Redução de SAT a Clique 2. é satisfatível sse existe um k-clique em G. Se existe um m-clique no grafo criado na redução, então, por construção de G, temos que: 1. Cada um dos vértices deve corresponder a um literal de uma cláusula diferente, e 2. As valorações destes literais não podem se contradizer. É possível valorar as variáveis corrresps a estes literais de forma a tornar verdadeira (as demais variáveis podem tomar qualquer valor). Logo, é satisfatível. abril/2008 [email protected] 24 A Classe NP-Completo Como dissemos inicialmente, NP-completo = NP NP-difícil S A T polinomial abril/2008 Algoritmo NP [email protected] 25 Classe NP-Completo - Abordagens Há uma série de técnicas para lidar com problemas NP-completos. Dependendo da situação, algumas são mais adequadas do que outras. Ex. - Algoritmos de Aproximação - Programação Dinâmica (Pseudo-polin.) - Algoritmos Randômicos abril/2008 [email protected] 26 Algoritmos de Aproximação Ex. Problema Bin-Packing Entrada: Números 0 < x < 1 Saída: Quantos bins de capacidade 1 são necessários para conter estes números? Uma entrada poderia ser: .4 .3 .4 .5 .7 .6 .5 .6 Abordagem 1: FIRST FIT abril/2008 [email protected] 27 Bin-Packing Entrada: .4 .3 .4 .5 .7 .6 .5 .6 Abordagem 1: FIRST FIT Saída: {.4, .3}, { .4, .5}, {.7}, {.6}, {.5}, {.6} Garantia do FIRST FIT: de bins 2 ótimo. Abordagem 2: DECREASING FIRST FIT abril/2008 [email protected] 28 Bin-Packing Entrada: .4 .3 .4 .5 .7 .6 .5 .6 Abordagem 2: DECREASING FIRST FIT Saída: {.7, .3}, {.6, .4}, { .6, .4}, {.5, .5} Garantia do DECREASING FIRST FIT: de bins 1.25 ótimo. abril/2008 [email protected] 29 Problema Soma dos Subconjuntos Entrada: n números naturais Saída: Existe uma bipartição dos números na entrada tal que as somas dos elementos em cada conjunto seja igual? Uma entrada poderia ser: 5 3 2 4 Abordagem: Programação Dinâmica abril/2008 [email protected] 30 Problema Soma dos Subconjuntos Entrada: 5 3 2 4 Abordagem: Programação Dinâmica 5 3 2 4 0 0 0 0 0 0 x x 0 x x x 0 0 0 x x x x x 0 0 0 x 0 0 x x 0 x x x 0 0 0 x 0 0 x x 0 0 0 0 0 0 0 0 0 x x 0 0 0 0 x Saída: Matriz [n, xi / 2] Custo: Tamanho da matriz = n xi (Pseudo-Polinomial) abril/2008 [email protected] 31 Problema Soma dos Subconjuntos Entrada: 7 3 2 4 Abordagem: Programação Dinâmica 7 3 2 4 1 2 3 4 5 6 7 0 0 0 0 0 x x x 0 0 x x x x x x 0 0 x x 0 0 0 x 0 0 0 x 8 9 10 11 12 13 14 15 16 0 0 0 0 0 0 x x 0 x x x 0 0 0 x 0 0 x x 0 0 0 x 0 0 0 x 0 0 0 0 0 0 0 x Saída: Matriz [4, 8] abril/2008 [email protected] 32 Algoritmo de Programação Dinâmica para Soma dos Subconjuntos soma 0 para i = 1 .. n faça soma soma + A [i] para j = 0 .. soma faça Matriz [1, j] 0 Matriz [1, A[1] ] 1 para i = 2 .. n faça para j = 1 .. soma faça Matriz [i, j] Matriz [i-1, j] /* Copia linha anterior */ se A[i] < j então Matriz [i-1, j-A[i] ] 1 Matriz [i, A[i] ] 1 devolva ( Matriz [n, soma/2] ) abril/2008 [email protected] 33