Baixe o app para aproveitar ainda mais
Prévia do material em texto
Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta Texto base 12 Teoria da Computação Ana Paula Ferreira da Rocha Resumo NP-completo é um subconjunto de NP, o conjunto de todos os problemas de decisão cujas soluções podem ser verificadas em tempo polinomial. NP pode ser definido de forma equivalente como um conjunto de problemas de decisão que podem ser resolvidos em tempo polinomial em uma máquina de Turing não determinística. Problemas NP- completos são estudados porque a capacitância de verificar rapidamente soluções para o problema (NP) parece estar relacionada à capacitância de resolver o problema rapidamente (P). Isso ocorre porque a definição de um problema NP-completo afirma que todo problema NP deve ser facilmente redutível, isto é, redutível polinomialmente a qualquer problema NP-completo. Introdução Abordaremos a teoria dos problemas NP-completos e veremos como definir de forma equivalente como um conjunto de problemas de decisão podem ser resolvidos em tempo polinomial em uma máquina de Turing não determinística e sua capacidade de resolver problemas P com a utilização das operações booleanas. 12.1. Problemas NP-Completos Um importante avanço na questão P versus NP veio no início dos anos 70 com o trabalho de Stephen Cook e Leonid Levin, eles descobriram certos problemas em NP cuja complexidade individual está relacionada aquela da classe inteira. Se um algoritmo de tempo polinomial existe para algum desses problemas, todos os problemas em NP seriam solúveis em tempo polinomial. Esses problemas são chamados NP-completos, o fenômeno de NP-completude é importante tanto por razões práticas quanto teóricas. Do lado teórico um pesquisador tentando mostrar que P é diferente de NP pode se concentrar em um problema NP-completo, se qualquer problema NP requer mais que um Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta tempo polinomial um NP-completo também requer. Além do mais um pesquisador tentando provar que P é igual a NP precisa somente encontrar um algoritmo de tempo polinomial para um problema NP-completo para atingir seu objetivo. Do lado prático o fenômeno da NP-completude pode evitar o desperdício de tempo na busca por um algoritmo de tempo polinomial não existente para resolver um problema específico. Muito embora possivelmente não tenhamos a matemática necessária para provar que o problema é insolúvel em tempo polinomial acreditamos que P é diferente de NP portanto provar que um problema é NP-completo é forte evidência de sua não polinomialidade. O primeiro problema NP-completo que apresentamos é chamado o problema da satisfatibilidade. Devemos nos recordar que variáveis podem tomar valores VERDADEIRO e FALSO estas são chamadas de variáveis booleanas. Geralmente representamos VERDADEIRO por 1 e FALSO por 0. As operações booleanas E, OU e NÃO são representadas pelos símbolos ∧, ∨ e ¬, respectivamente, são descritas na lista abaixo: 0 ∧ 0 = 0 0 ∨ 0 = 0 0 = 1 0 ∧ 1 = 0 0 ∨ 1 = 1 1 = 0 1 ∧ 0 = 0 1 ∨ 0 = 1 1 ∧ 1 = 1 1 ∨ 1 = 1 Observe que utilizamos uma barra superior como abreviação para o símbolo ¬, o que significa que x é = ¬x. Uma fórmula booleana é uma expressão envolvendo variáveis booleanas e operações, por exemplo: ∅ = ( x ∧ y) ∨ (x ∧ z ) Uma fórmula booleana é satisfatível se alguma atribuição de 0’s e 1’s às variáveis faz com que o valor da fórmula seja 1. A fórmula precedente é satisfatível porque a atribuição x = 0, y = 1 e z = 0 faz com que ∅ tenha valor 1, dizemos que a atribuição satisfaz ∅ o problema da satisfatibilidade é testar se uma fórmula booleana é satisfatível, seja SAT = {<∅> | ∅ é uma fórmula booleana} Uma linguagem B é NP-completa se ela satisfaz duas condições: • B está em NP; • Toda A em NP é redutível em tempo polinomial a B. Se B é NP-completa e B ∈ NP, então P = NP, notamos que esta definição nos mostra a redutibilidade em tempo polinomial. Se B é NP-completa e B ≤ p C para C em NP, então C é NP-completa. Prova – já sabemos que C está em NP, portanto temos que mostrar que toda A que está em NP é redutível em tempo polinomial a C, devido ao fato de que B é NP-completa, toda linguagem em NP é redutível em tempo polinomial a B, e B por sua vez é redutível em tempo polinomial a C. Reduções em tempo polinomial compõem se A é redutível em tempo polinomial a C e C é redutível em tempo polinomial a B, então A é redutível em Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta tempo polinomial a B. Com isso todo linguagem em NP é redutível em tempo polinomial a C. O teorema de Cook-Levin Uma vez que temos um problema NP-completo podemos obter outros por redução em um tempo polinomial a partir do primeiro, contudo estabelecer o primeiro problema NP- completo é mais difícil. SAT é NP-completo. Ideia da prova – mostrar que SAT está em NP é fácil, a parte difícil da prova é mostrar que qualquer linguagem em NP é redutível em tempo polinomial a SAT. Uma redução em tempo polinomial para cada linguagem A em NP para SAT, a redução para A toma uma cadeia w e produz uma fórmula booleana ∅ que simula a máquina NP para A sobre a entrada w. Se a máquina aceita ∅ tem uma atribuição que satisfaz correspondendo a computação de aceitação. Se a máquina não aceita nenhuma atribuição satisfaz ∅, consequentemente w está em A se e somente se ∅ é satisfatível. Prova – mostramos que SAT está em NP, uma máquina de tempo polinomial não determinístico pode adivinhar uma atribuição para uma dada fórmula ∅ e aceitar se a atribuição satisfaz ∅. Tomamos qualquer linguagem A em NP e mostramos que A é redutível em tempo polinomial a SAT, seja N uma máquina de Turing não determinística que decide A em tempo nk para alguma constante k, a seguinte noção ajuda a descrever a redução. Um tableau para N sobre w é uma tabela nk x nk cujas linhas são as configurações de um ramo da computação de N sobre a entrada w, como demonstrado na figura abaixo: Figura 1.1 – Um tableau é uma tabela nk x nk de configurações Fonte: Michael Sipser, 2007. Como demonstrado a configuração começa e termina com um símbolo #, sendo assim a primeira e última coluna de um tableau são todas de #’s. A primeira linha do tableau é a Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta configuração inicial de N, um tableau é de aceitação se qualquer linha do tableau é uma configuração de aceitação. Todo tableau de aceitação para N sobre w corresponde a um ramo da computação de N sobre w, o problema de se determinar se N aceita w é equivalente ao problema de se determinar se um tableau de aceitação para N sobre w existe. A descrição da redução em tempo polinomial ƒ de A para SAT, sobre a entrada w a redução produz uma fórmula ∅. Digamos que Q e 𝚪 sejam o conjunto de estados e o alfabeto de fita de N, seja C = Q ∪ 𝚪 ∪ {#} para cada i e j entre 1 e nk e para cada s em C temos uma variável xi, j, s. Desenhando ∅ de modo que uma atribuição às variáveis que satisfaça a fórmula correspondente a um tableau de aceitação para N sobre w, a fórmula ∅ é o E das quatro partes: ∅celula∧ ∅inicio∧ ∅movimento∧ ∅aceita e descrevemos cada um por vez. Ligar uma variável xi, j, s corresponde a colocar um símbolo s em celula[i, j], a primeira coisa que temos que garantir de modo a obter uma correspondência entre uma atribuição e um tableau é que a atribuição liga exatamente uma variável para cada célula. A fórmula ∅celula assegura esse requisito expressando-o em termos de operações booleanas: Figura 1.2 – Operação booleana Fonte: Michael Sipser, 2007. Os símbolos ∧ e ∨ significam iteração de E’s e OU’s respectivamente, no fragmento da fórmula anterior temos: É uma abreviação de: xi, j, s1 V xi, j, s2 V... V xi, j, s1 onde C = {s1, s2, ..., s1}, sendo ∅celula é na verdadeuma expressão grande que contém um fragmento para cada célula no tableau porque i e j variam de 1 a nk, a primeira parte de cada fragmento diz que pelo menos uma variável é ligada na célula correspondente. A segunda parte de cada fragmento diz que não mais que uma variável é ligada, ou seja, que em cada par de variáveis pelo menos uma é ligada na célula correspondente, esses fragmentos são conectados por operações ∧. A primeira parte de ∅celula dentro dos colchetes estipula que pelo menos uma variável que está associada a cada célula esta ligada, enquanto que a segunda parte estipula que não mais que uma variável está ligada para cada célula. Qualquer atribuição às variáveis que satisfaz ∅ e consequentemente ∅celula tem que ter exatamente uma variável ligada para toda célula, qualquer atribuição que satisfaz a fórmula específica um símbolo em cada Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta célula da tabela, as partes ∅inicio, ∅movimento e ∅aceita asseguram que a tabela é na verdade um tableau de aceitação. A fórmula ∅inicio assegura que a primeira linha da tabela é a configuração inicial de N sobre w estipulando que as variáveis correspondentes estão ligadas: ∅inicio = x1, 1, # ∧ x1, 2, q0∧ x1, 3, w1 ∧ x1, 4, w2, ∧ ... ∧ x1, n+2, wn ∧ x1, n+3, ⊔ ∧ ... ∧ x1, nk- 1, ∧ x1, nk, # A fórmula ∅aceita garante que uma configuração de aceitação ocorre no tableau, ela assegura que qaceita, o símbolo para o estado de aceitação aparece em uma das células do tableau estipulando que uma das variáveis correspondentes está ligada: Figura 1.3 – ∅aceita Fonte: Michael Sipser, 2007. A fórmula qmovimento garante que cada linha da tabela corresponde a uma configuração que legalmente segue da configuração da linha precedente conforme as regras de N, ela faz isso assegurando que cada janela 2 x 3 de células é legal. Dizemos que uma janela 2 x 3 é legal se aquela janela não viola as ações especificadas pela função de transição de N, uma janela é legal se ela pode aparecer quando uma configuração corretamente segue uma outra. Digamos que a, b e c são membros do alfabeto de fita e q1 e q2 são estados de N, assuma quando no estado q1 com a cabeça lendo um a, N escreve um b, permanece no estado q1 e move para a direita, e que quando no estado q1com a cabeça lendo um b, N não deterministicamente. • Escreve um c, vai para q2 e move para a esquerda ou • Escreve um a, vai para q2 e move para a direita. Expressando formalmente, 𝛿(q1, a) = {(q1, b, D)} e 𝛿(q1, b) = {(q2, c, E), (q2, a, D)} Figura 1.4 – Exemplos de janelas legais Fonte: Michael Sipser, 2007. Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta Na figura acima as janelas (a) e (b) são legais porque a função de transição permite que N se move de maneira indicada, a janela (c) é legal porque, com q1 aparecendo no lado direito da linha superior não sabemos sobre que símbolo a cabeça está. Esse símbolo poderia ser um a, e q1 poderia modifica-lo para um b e mover para a direita, essa possibilidade daria origem a essa janela portanto ela não viola as regras de N. A janela (d) é legal porque as linhas superior e inferior são idênticas o que ocorreria se a cabeça não estivesse adjacente à localização da janela. Note que um # pode aparecer na esquerda ou na direita de ambas as linhas superior e inferior em uma janela legal. A janela (e) é legal porque o estado q1 lendo um b poderia ter estado imediatamente à direita da linha superior e ela teria então movido para a esquerda no estado q2 para aparecer na extremidade direita da linha inferior. Já a janela (f) é legal porque o estado q1 poderia ter estado imediatamente à esquerda da linha superior e ela poderia ter modificado o b para um c e movido para a esquerda. Já a figura abaixo nos apresenta janelas que não são legais para a máquina N: Figura 1.5 – Exemplos de janelas ilegais Fonte: Michael Sipser, 2007. Na janela (a) o símbolo central na linha superior não pode modificar porque um estado não estava adjacente a ele. A janela (b) não é legal porque a função de transição especifica que o b é modificado para um c mas não para um a, a janela (c) não é legal porque dois estados aparecem na linha inferior. Você sabia? Vamos aprofundar o conhecimento sobre Problemas NP-completos? Assista ao vídeo Problemas NP-Completos. Disponível em: < https://www.youtube.com/watch?v=VJucgdXGHyE>. Acesso em: 09 mai. 2023. Considerações finais Como vimos NP-completo é um subconjunto de NP, o conjunto de todos os problemas de decisão cujas soluções podem ser verificadas em tempo polinomial. NP Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta pode ser definido de forma equivalente como um conjunto de problemas de decisão que podem ser resolvidos em tempo polinomial em uma máquina de Turing não determinística. Uma tarefa p em NP também é NPC se e somente se todas as outras tarefas em NP puderem ser convertidas em p em tempo polinomial. Problemas NP-completos são estudados porque a capacitância de verificar rapidamente soluções para o problema (NP) parece estar relacionada à capacitância de resolver o problema rapidamente (P). Não sabemos se todos os problemas do NP serão resolvidos tão cedo. Isso é chamado de problema P x NP. Mas se os problemas NP-completos podem ser resolvidos rapidamente, então todos os problemas NP podem ser resolvidos rapidamente. Isso ocorre porque a definição de um problema NP-completo afirma que todo problema NP deve ser facilmente redutível, isto é, redutível polinomialmente a qualquer problema NP- completo. Por esta razão, costuma-se dizer que os problemas NP-completos são mais difíceis do que os problemas NP em geral. Teoria da Computação Núcleo de Educação a Distância | Faculdade Impacta Referências DIVERIO, Tiarajú Asmuz; MENEZES, Paulo Blauth. Teoria da Computação: máquinas universais e computabilidade. Porto Alegre: Bookman, 2011. MENEZES, Paulo Blauth. Linguagens Formais e Autômatos. 6. ed. Porto Alegre: Bookman, 2011. SIPSER, Michael. Introdução à Teoria da Computação. 2. ed. São Paulo: Cengage Learning, 2007.
Compartilhar