220 likes | 337 Views
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)
E N D
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.
S4 é INDECIDÍVEL — problema está na auto-referência 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 ?
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? 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 P LOOP LOOP LOOP P(P) S N LOOP(LOOP) S N Termina? Termina? Contradição! SIM SIM Fácil e difícil
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 ALGORITMO LINEAR 6 10 7 1 2 5 3 4 Ciclo Hamiltoniano (ciclo simples que passe em todos os vértices) Caminho mais longo a partir de um vértice ALGORITMO EXPONENCIAL 8 9 • Não tem caminho de Euler • Não tem ciclo Hamiltoniano
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
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 Problemas de Pesquisa Combinatória
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) Tratabilidade P: conjunto de problemas de decisão solúveis em tempo polinomial
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 Tratabilidade
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 Problemas de Decisão
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) Problemas em P Se L é redutível a M, e M está em P, então L está em P também x F(x) M F
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 Problema da satisfação Booleana • 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.
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
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) Classe NP
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. Problemas NP-completos Um problema é NP-completo se qualquer problema em NP puder ser reduzido àquele em tempo polinomial
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
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
Satisfação Booleana Cobertura de Vértices • Exemplo de expressão de SAT (X1 X2 ~X3) (~ X1 X3) (X1 ~ X2 X3) (X2) U1 V1 U2 V2 U3 V3 w12 w11 w41 w32 w31 w22 w21 w13 w33
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 Solução de SAT é solução de VC
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 Solução de VC é solução de SAT
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. NP P P=NP ? Decidível ?
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) Conclusão • 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.