Complexidade
Tamanho da entrada, tempo polinomial, certificados, P, NP e direção das reduções.
A máquina de Turing que marca pares em termina, mas regressa várias vezes sobre a entrada. A complexidade mede quantos passos essas varreduras exigem quando a entrada cresce.
Esta página é uma extensão ao percurso de linguagens formais. Usa a distinção entre reconhecedor e decisor; a profundidade da avaliação atual não está confirmada. Uma cota limita o custo por um múltiplo fixo de para entradas suficientemente grandes.
Medir o tamanho da entrada
O tamanho é o comprimento da codificação, não necessariamente o valor numérico descrito. Um inteiro positivo em binário usa bits. Um algoritmo que faz passos pode ser exponencial nesse número de bits.
Por exemplo, representar em binário precisa de 11 bits. Experimentar todos os inteiros de a não passa a ser polinomial no comprimento da entrada só porque faz passos.
Para um decisor, o tempo no pior caso é o maior número de passos entre as entradas de comprimento . Numa comparação assintótica, , para fixo, é tempo polinomial. e não são polinomiais.
A classe polinomial mantém-se nas simulações usuais entre modelos razoáveis de computação. Isso não diz que todo o algoritmo polinomial é rápido na prática: ou uma constante enorme podem torná-lo inutilizável.
O custo depende da representação
Converter uma descrição antes de decidir uma pergunta pode tornar o problema maior. Se a palavra tem comprimento , o autómato tem estados e o alfabeto é fixo:
| Tarefa | Custo ou tamanho relevante |
|---|---|
| Simular um DFA | passos com acesso direto à tabela. |
| Simular um NFA | numa implementação por conjuntos e tabela de destinos. |
| Determinizar um NFA | Até estados; a construção pode produzir uma descrição exponencial. |
| Thompson para uma expressão de comprimento | estados e arestas. |
| CYK para uma CFG fixa em CNF | tempo e espaço. |
Para testar uma só palavra num NFA, não precisas de materializar o DFA inteiro. Segue o conjunto de estados possíveis e evita o crescimento exponencial da conversão. São custos de tarefas diferentes, não uma contradição.
Na eliminação de estados, há um número polinomial de atualizações de rótulos, mas cada rótulo é uma expressão que pode crescer muito. Contar atualizações sem contar o tamanho das expressões não prova tempo polinomial para escrever o resultado.
P: decidir em tempo polinomial
P é a classe das linguagens decidíveis por TM determinística em tempo polinomial. A pertença a uma linguagem regular está em P: um DFA fixo lê a entrada em . Para uma CFG fixa, CYK decide em .
Classes como P e NP definem-se para problemas de decisão, com resposta sim ou não. Um problema de otimização pode ter uma versão de decisão, por exemplo: em vez de pedir o menor percurso, perguntar se existe um percurso de custo no máximo .
NP: certificados verificáveis
NP contém as linguagens para as quais uma resposta sim pode ter um certificado de comprimento polinomial, verificável em tempo polinomial. Formalmente, existe um verificador e um polinómio tais que:
O verificador tem de terminar em tempo polinomial e rejeitar certificados inválidos. Para uma entrada fora da linguagem, nenhum certificado pode fazê-lo aceitar.
Num grafo não dirigido com vértices e arestas , a lista certifica um caminho hamiltoniano: visita todos os vértices uma vez e usa apenas arestas existentes. falha já no primeiro par, porque não existe aresta entre 1 e 3.
Não precisas de descobrir a lista para provar pertença a NP, mas não basta dizer que uma resposta sim tem alguma prova: é preciso limitar o comprimento do certificado e o tempo de verificação.
Verificador concreto com tamanho e custo
No problema do caminho hamiltoniano, a entrada codifica um grafo com vértices e arestas. O certificado é uma lista de vértices. Verifica a lista em comparações de identificadores, cada par consecutivo numa matriz de adjacência, e rejeita se algum teste falhar.
Com vértices numerados, o comprimento é bits. Assume uma codificação explícita do grafo que enumera todos os vértices, incluindo os isolados; assim este tamanho é polinomial em . As comparações de identificadores custam ainda operações de bits cada uma, e o verificador corre em tempo polinomial, rejeitando certificados inválidos.
Para fora da linguagem, nenhum passa nos dois testes. Encontrar a lista pode ser difícil; verificá-la é barato. É essa assimetria que NP formaliza.
Equivalentemente, NP é o conjunto de linguagens decididas por TM não determinística em tempo polinomial: um ramo escolhe o certificado e verifica-o. O limite temporal aplica-se a todos os ramos. NP significa tempo polinomial não determinístico, não “não polinomial”.
Relação entre P e NP
Temos , pois um verificador pode ignorar o certificado e correr o decisor polinomial. Continua por resolver se .
NP contém problemas fáceis, incluindo todos os de P. Dizer que um problema está em NP não prova que não tenha algoritmo polinomial. Dizer que o melhor algoritmo que conheces é exponencial também não prova esse limite inferior.
Reduções polinomiais
Escreve se existe uma função , computável em tempo polinomial, com
A transformação tem de preservar respostas sim e não e produzir uma entrada de tamanho polinomial. Se , então : calcula e usa o decisor de .
Exemplo: satisfazer com pelo menos um verdadeiro
SAT pergunta se uma fórmula booleana tem uma atribuição que a torna verdadeira. Considera a variante que exige também que pelo menos uma variável tenha valor verdadeiro. Para transformar uma fórmula de SAT, cria uma variável nova e usa .
Se é satisfazível, prolonga a atribuição com verdadeiro. Se é satisfazível, a restrição da atribuição às variáveis antigas satisfaz . A variável nova garante a condição adicional. O tamanho aumenta apenas por uma conjunção e uma variável, logo a transformação é polinomial.
As duas implicações são a prova da redução. Exemplos isolados não substituem essa correspondência.
NP-difícil e NP-completo
Um problema é NP-difícil se todo o problema de NP se reduz a em tempo polinomial. É NP-completo se, além disso, .
Para provar NP-completude, descreve primeiro certificado, tamanho e verificador. Depois reduz a um problema já NP-completo, provando a equivalência e o custo. A transitividade das reduções transporta a dificuldade dos restantes problemas de NP.
SAT é NP-completo pelo teorema de Cook-Levin. Uma atribuição booleana é o seu certificado, mas isso só demonstra a parte ; a dificuldade exige o outro argumento do teorema.
Se algum problema NP-completo estiver em P, então . Se um problema for apenas NP-difícil, não podes concluir que pertença a NP, nem que seja decidível. A dificuldade e a pertença são afirmações distintas.
Exercícios
Problemas originais para a extensão de complexidade. Não representam uma confirmação da profundidade da avaliação de TC.
Valor e comprimento da codificação
Um algoritmo recebe um inteiro positivo em binário, sem zeros iniciais, e faz exatamente iterações. Quantos bits usa ? Para entradas com bits, determina o intervalo de valores de e explica se o número de iterações é polinomial em . Compara com codificar em unário.
Pista
O primeiro bit não nulo tem peso 2^(n−1).
Solução
escreve-se como um e dez , usando 11 bits. Com bits, . Logo o número de iterações é , exponencial no comprimento binário, apesar de ser linear no valor .
Em unário, é representado por cópias de um símbolo e o comprimento da entrada é . As mesmas iterações são lineares nesse comprimento. Contámos iterações; o custo interno de cada iteração pode acrescentar outros fatores.
Confere a tua resposta:
- Obtive 11 bits para 1024.
- Derivei as cotas 2^(n−1) e 2^n−1.
- Distingui custo por valor, por bits e por comprimento unário.
Descrever um certificado
Explica por que caminho hamiltoniano está em NP. Não apresentes um algoritmo que procura todos os caminhos.
Pista
O certificado pode dar o caminho que queres verificar.
Mais uma pista
Uma lista com o tamanho certo ainda pode repetir vértices ou usar uma aresta inexistente.
Solução
Usa uma lista de |V| identificadores de vértices. Confirma que todos existem, são distintos e cobrem V, e que cada par consecutivo é uma aresta. Uma lista que passa todos esses testes é um caminho hamiltoniano, e qualquer caminho hamiltoniano dá tal lista. A codificação ocupa bits com identificadores numéricos; mesmo uma verificação direta por pares e consulta da lista de arestas é polinomial na entrada.
Confere a tua resposta:
- Escolhe uma lista de todos os vértices como certificado de tamanho polinomial.
- Verifica pertença, ausência de repetições e cobertura de todos os vértices.
- Verifica cada aresta consecutiva e explica o custo polinomial.
Erros frequentes
Não apresentes só testes de arestas sem verificar cobertura e repetições. Não procures o certificado para demonstrar que se pode verificá-lo.
Provar as duas direções
Queres reduzir SAT ao problema de satisfazer uma fórmula com pelo menos uma variável verdadeira. Um colega propõe , com nova. Explica por que falha, corrige a transformação e prova que o problema de destino é NP-completo, usando SAT como problema NP-completo conhecido.
Pista
A redução tem de preservar os não. Pergunta o que acontece quando z é verdadeira na proposta.
Mais uma pista
Usa como contraexemplo. A conjunção com exige satisfazer a fórmula antiga.
Solução
A proposta falha: não é satisfazível, mas é satisfazível escolhendo verdadeira. Cria uma resposta sim a partir de uma resposta não.
Usa antes . Se for satisfazível, mantém a atribuição antiga e acrescenta verdadeira. Se a imagem tiver uma atribuição válida, restringi-la às variáveis antigas satisfaz . A transformação aumenta o texto por uma variável e uma conjunção, em tempo polinomial.
O destino pertence a NP: o certificado dá um bit por variável; o verificador avalia a fórmula e confirma que existe um bit verdadeiro. O tamanho e o tempo são polinomiais na fórmula. Como e SAT é NP-completo, é NP-difícil. Juntando pertença e dificuldade, é NP-completo.
Confere a tua resposta:
- Dá uma fórmula insatisfazível cuja imagem proposta fica satisfazível.
- Usa uma conjunção com uma variável nova e prova ambas as implicações.
- Descreve um verificador e o tamanho do certificado para provar pertença a NP.
- Indica a direção SAT para o problema novo e o custo polinomial.
Erros frequentes
Não proves só a implicação sim para sim. Não uses a redução como substituto da prova de pertença a NP.