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.
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?
fonte
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.
fonte
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.
fonte