Quanta diferença de complexidade pode haver entre encontrar uma solução para um quebra-cabeça de Sudoku e provar que a solução é a única solução?

14

Geralmente, o Sudoku é , mas essa pergunta se estende a n 2 × n 2 quebra-cabeças com n > 3 também. Existem muitas regras polinomiais de dedução de tempo que podem progredir na busca de uma solução para um quebra-cabeça Sudoku. Mas, às vezes, adivinhar valores e seguir cadeias de conclusões pode ser necessário para eliminar o valor de uma célula ou uma combinação dos valores das células. No entanto, uma vez encontrada uma solução válida, isso não garante que a solução seja ÚNICA. Um quebra-cabeça Sudoku válido deve ter apenas uma solução válida, mas ao gerar quebra-cabeças aleatórios, isso pode exigir computação extra para verificação.9×9n2×n2n>3

Portanto, minha pergunta é: se permitirmos um determinado conjunto de regras de dedução de tempo polinomial (por exemplo, o conjunto mais comum descrito na estratégia do Sudoku), juntamente com os valores de adivinhação e as conclusões, então, quanto mais difícil será determinar se há uma solução única para um determinado quebra-cabeça, em vez de encontrar apenas uma solução, em termos do número de soluções não exclusivas? Existe uma diferença assintótica para certas classes de quebra-cabeças?

user2566092
fonte

Respostas:

14

Yato e Seta mostram que, para cada constante , dadas m soluções para um quebra-cabeça de Sudoku, é NP-completo determinar se existe outra solução. Eles mostram que a mesma propriedade também é satisfeita por outros quebra-cabeças.mm

Yuval Filmus
fonte
Obrigado, eu não tinha certeza se formulou minha pergunta com precisão suficiente, mas isso atinge a unha na cabeça. Portanto, mesmo se encontrarmos uma solução, é NP-completo saber se há outra solução. Limpo e arrumado! Obrigado, +1
user2566092
1

Se eu entendi direito, você está tentando verificar os quebra-cabeças do Sudoku que o seu software gerou para ver se eles são válidos.

Se apenas ser "válido" é interessante, o Yuval Filmus já indicou uma prova de que está completo.

No entanto, se o objetivo de encontrar novos quebra-cabeças de Sudoku que uma pessoa goste de resolver, o problema não é tão difícil. (Ter que adivinhar muitos valores, porque o quebra-cabeça não é solucionável usando a "lógica" não é divertido!) Portanto, pessoalmente, eu limitaria o número de palpites a no máximo 4 e rejeitaria qualquer quebra-cabeça que não possa ser provado ter um solução única dentro dos limites do que você considera razoável.

Fazendo o acima, usando o rastreamento de retorno padrão para visitar todas as suposições possíveis (dentro do seu limite) e mostrar que existe apenas uma solução é muito mais fácil do que o NP completo.

Além disso, você pode avaliar a dificuldade com que um quebra-cabeça se baseia na complexidade das regras de dedução necessárias e no número de suposições necessárias.

Ian Ringrose
fonte
0

Para provar que um quebra-cabeça é único, qualquer célula na qual um palpite teve que ser feito deve ser ramificada. Ao fazer uma pesquisa para simplesmente encontrar uma resposta, isso geralmente é feito com retorno, onde a solução é o primeiro caminho na árvore de decisão que leva a um quadro completo. Para provar a exclusividade, você deve mostrar que apenas um caminho leva a uma solução válida. É aqui que as coisas ficam muito difíceis de definir em termos de tempo de execução. A complexidade está extremamente ligada ao problema real em questão. Se você estiver olhando para o pior cenário puro, o que é extremamente improvável de ocorrer, eles podem ser considerados da mesma complexidade.

Na pior das hipóteses, ao fazer a solução, a solução está dentro do ramo final possível da árvore que pode ser pesquisado. A árvore inteira teve que ser pesquisada para encontrá-la, enquanto uma busca por exclusividade também exigiria a mesma pesquisa, percorrendo exatamente os mesmos caminhos.

Realisticamente, porém, esse não é o caso e, com quase todos os casos envolvendo a pesquisa de projetos combinatórios, a busca por uma solução é sempre mais rápida do que a busca por todas as soluções.

Em geral, esses dois problemas estão firmemente enraizados em tempos de execução exponenciais, se não piores.

lPlant
fonte