Esse problema de gráfico finito é decidível? Quais fatores tornam um problema decidível?

17

Quero saber se o seguinte problema é decidível e como descobrir. Todos os problemas que vejo podem dizer "sim" ou "não" a ele; portanto, a maioria dos problemas e algoritmos é decidível, exceto alguns (que são fornecidos aqui )?

Entrada: Um gráfico direcionado e finito , com v e u como vértices. Pergunta: Existe um caminho em G com u como vértice inicial e v como vértice final?Gvvocê
Gvocêv

Gigili
fonte
1
Pergunta de acompanhamento (em um sentido genérico): é verdade, em algum sentido altamente teórico, que “a maioria dos problemas e algoritmos (são) decidíveis”?
Gilles 'SO- stop be evil'

Respostas:

18

Qualquer problema que exija apenas o exame de uma quantidade finita de dados é decidível, porque existe um algoritmo que consiste em enumerar todas as soluções possíveis. Pode ser ridiculamente lento, mas isso não é relevante: se houver um algoritmo, é decidível.

O problema que você declara assume um gráfico finito, o que sugere fortemente que é decidível. A rigor, você precisa procurar um pouco mais. O problema é uma propriedade nos caminhos no gráfico e, às vezes, há um número infinito de caminhos, quando o gráfico contém um ciclo (você pode percorrer esse ciclo quantas vezes quiser). No entanto, é fácil transformar o problema em um problema finito: se houver um caminho que comece com e termine com v que inclua um ciclo, você poderá cortar todos os ciclos nesse caminho e terá uma nova solução que não inclua um ciclo. Como existe um número finito de caminhos que não envolvem um ciclo (se o gráfico tiver k arestas, haverá no máximo k !vocêvkk!caminhos que não usam a mesma aresta mais de uma vez), o problema de encontrar um caminho de a v é finitário, portanto é decidível.vocêv

Aliás, essa propriedade é chamada de conectividade .

Essa abordagem é comum, chamada redução . Dado um problema que não é direto, reduzimos para um problema que sabíamos resolver.

Muitas vezes é difícil provar que um problema é indecidível. Para provar que um problema é decidível, tudo o que precisamos fazer é exibir um algoritmo que o decida. Para provar que um problema é indecidível, precisamos provar que nenhum algoritmo pode existir. Existem alguns problemas indecidíveis bem conhecidos. Na prática, na maioria das vezes, quando provamos que um problema é indecidível, mostramos que há um problema indecidível conhecido que se reduz ao nosso problema. Como um algoritmo para o nosso problema resolveria o conhecido problema indecidível, nosso problema também deve ser indecidível.

Você realmente não pode dizer que “a maioria” dos problemas é decidível ou a “maioria” dos problemas é indecidível. Em algum sentido teórico, quase todos os problemas são indecidíveis, mas temos uma forte tendência para lidar com problemas "interessantes", e é mais provável que eles tenham uma solução.

Gilles 'SO- parar de ser mau'
fonte
15

O problema é trivialmente decidível, como apontado por Gilles em um comentário. Quanto à sua outra pergunta ...

a maioria dos problemas e algoritmos são decidíveis, exceto alguns (que são fornecidos aqui )?

Não. Na verdade, a maioria dos problemas é indecidível. De fato, existem incontáveis ​​problemas (idiomas), mas existem apenas muitas máquinas de Turing, o que significa que existem no máximo muitos problemas decidíveis.

Janoma
fonte
8

Sim, isso é decidível, porque você pode fazer uma pesquisa exaustiva de todos os caminhos possíveis. Não há necessidade de procurar nenhum caminho que repita um vértice, pois o "desvio" pode ser ignorado. Mas o comprimento de qualquer caminho não repetitivo é limitado pelo tamanho do gráfico, que é finito, e portanto existem apenas muitos desses caminhos, que podem ser verificados um por um.

Gumabumab

Carl Mummert
fonte
Não depende da entrada? Quero dizer, quando as informações fornecidas não são suficientes para descobrir a resposta, devo dizer que é indecidível?
Gigili 9/03/12
Não tenho certeza do que você está perguntando; para o problema que você descreveu, a entrada é suficiente para encontrar a resposta.
Carl Mummert
@IGigili Se o problema fosse indecidível, seria impossível criar um algoritmo que produzisse sim ou não para todas as entradas. Esse não é o caso neste problema, pois, com o BFS, sempre podemos determinar se existe ou não um caminho (em tempo linear também).
Zach Langley
@ZachLangley: Certo, eu estava pedindo o caso geral. se a informação fornecida como entrada não for suficiente para resolver o problema, o problema é indecidível?
Gigili
vocêvvocêv
7

Não existe um método que indique se um problema específico é decidível ou não. Com o tempo, você pode ter um bom "palpite", independentemente de um problema específico ser decidido ou não.

O que eu costumo fazer é o seguinte:

  1. tente resolver o problema. Ou seja, tente pensar em um programa de computador que resolva o problema em questão. Para o seu problema sugerido - um programa muito simples verificará qualquer caminho possível e, portanto, sempre será bem-sucedido em encontrá-lo (se houver) ou informar que não existe outro caminho.
  2. formular o problema claramente. Muitos problemas são vagos demais, mas, quando escritos com clareza, é muito fácil ver se eles são decidíveis ou não (comparando-se com outros problemas, conhecidos por serem incontroláveis ​​ou por métodos conhecidos, como o teorema de Rice )
  3. Se (2) não funcionou, mas você ainda acredita que o problema é indecidível, tente prová-lo através da redução de um problema indecidível (o problema de parada (ou seu complemento) funciona em muitos casos).

Quase sempre, ao tentar executar a etapa (1) para um problema indecidível, você precisará do seu programa para verificar um número infinito de coisas. Isso geralmente é um sinal de que o problema não é decidível.

Tocou.
fonte