Estou tentando (intuitivamente) entender os dois termos "decidibilidade" e "verificabilidade".
Pesquisei bastante e passei pelos vários textos em que posso colocar as mãos. No entanto, o entendimento intuitivo deles parece me escapar, especialmente no segundo.
Das muitas definições encontradas, a seguinte encontrada nesta página explicou claramente a capacidade de decisão para mim.
Um idioma é chamado decidível se existir um método - qualquer método - para determinar se uma determinada palavra pertence ou não a esse idioma.
No entanto, não consigo encontrar uma definição paralela para verificabilidade.
No livro Teoria da Computação de Sipser , encontramos,
P = a classe de idiomas para os quais a associação pode ser decidida rapidamente.
NP = a classe de idiomas para os quais a associação pode ser verificada rapidamente.
À luz do exposto, quero entender a verificabilidade.
Por favor, forneça quantos exemplos puder, em um momento, tento entender o significado, no próximo, fico confuso novamente.
Respostas:
A chave para entender aqui é que P e NP são classes de problemas de decisão. Isso significa que todos eles têm respostas sim / não.
Portanto, quando dizemos que um problema como o 3-SAT é NP-Complete, significa que, dada uma instância do 3-SAT (também conhecida como uma palavra potencialmente no idioma), não há uma maneira eficiente conhecida de testar se a palavra é ou não no idioma
Dizer que algo está no NP significa que existe algum tipo de "prova" para cada string no idioma, que é polinomial no comprimento da entrada.
Por exemplo, no 3-SAT, estamos perguntando, existe uma atribuição de Verdadeiro / Falso para um conjunto de variáveis em uma fórmula booleana, de modo que a fórmula se torne verdadeira. A palavra que estamos testando é a fórmula booleana. Não há como saber se existe uma solução única que torne toda a fórmula verdadeira. Porém, se tivermos um conjunto de valores verdadeiro / falso para as variáveis, é muito fácil verificar (em tempo polinomial) se isso faz com que a fórmula seja avaliada como verdadeira.
O ponto principal aqui é que a palavra que estamos testando NÃO é os valores verdadeiro / falso de cada variável. A palavra que estamos testando é a fórmula que contém as variáveis e o idioma é o conjunto de todas as fórmulas booleanas avaliadas como verdadeiras.
Não sabemos como testar com eficiência se a palavra (fórmula) está no idioma (pode ser avaliada como verdadeira), mas, dado um conjunto de atribuições verdadeiras / falsas, podemos verificar se ela é verdadeira, ou seja, é uma "prova" "que a palavra (fórmula) está no idioma. Assim, o problema está em NP, mas não se sabe que esteja em P.
NP é na verdade a classe de problemas de decisão polinomiais não determinísticos solucionáveis. Isso ocorre porque, em uma máquina de tortura não determinística, temos pontos de "decisão" onde podemos realizar uma de várias ações, e nosso certificador polinomial basicamente diz apenas qual é a decisão a ser tomada em cada ponto de decisão.
fonte
suponha que você me dê um problema e me pediu uma solução, digamos que você pode verificar apenas a quantidade polinomial da minha prova (ou seja: você pode executar um programa de computador eficiente na minha prova) quando eu lhe enviar a prova da solução tudo o que o que você faz é executar o programa e decidir de acordo com a saída do programa.
por exemplo: suponha que você me pergunte se um gráfico é de três cores, então o que tenho que fazer é enviar uma coloração 3 do gráfico e verificar se todos os vértices adjacentes têm cores diferentes, então a coloração é legal e o programa termina com "accept" (caso contrário, a prova não é aceita e terminamos com "rejeitar").
isso é chamado para verificar "rapidamente".
se você pode criar um "programa" de computador "eficiente" (ou simplesmente: algoritmo polinomial) que diga se uma entrada (uma sequência de comprimento n) está no idioma (ou se a saída do programa 1 \ "aceitar") é isso quer dizer com classe de complexidade P.
exemplo: suponha que eu lhe forneça uma lista de strings (digamos lista telefônica) e perguntei sobre um nome que você deve dizer se está no livro ou não. Uma solução é lançar todos os nomes e comparar cada nome com o nome dado, que diz que você pode resolvê-lo em tempo linear.
outro exemplo é: dado um gráfico G = (V, E) e uma aresta e = (u, v) e você deseja dizer se a aresta está no gráfico.
fonte