A idéia básica da indução reversa é começar com todas as posições finais possíveis de um jogo em que o jogador X vence. Portanto, para o xadrez, observe todas as maneiras pelas quais as brancas podem fazer xeque-mate nas pretas. Agora trabalhe para trás em todos os movimentos / posições possíveis que permitiriam às Brancas se mudarem para uma dessas posições. Se White alguma vez se encontrasse em tal posição, ela poderia vencer passando para o movimento de checkmating relevante. Agora trabalhamos para trás mais um passo e assim por diante. Eventualmente, voltamos a todos os primeiros movimentos possíveis que as brancas poderiam fazer. O ponto é que, uma vez feito isso, sabemos que temos a melhor resposta das brancas a qualquer movimento que as pretas fazem.
Recentemente (nos últimos cinco anos ou mais), o Damas foi "resolvido" dessa maneira. Obviamente, nada e cruzes (o que os coloniais podem chamar de "Tic-Tac-Toe") foram resolvidos há séculos. No mínimo, desde este xkcd, mas presumivelmente muito antes.
Portanto, a pergunta é: de quais fatores esse tipo de procedimento depende? O número de possíveis posições legais, presumivelmente. Mas talvez também o número de movimentos legais em qualquer nó ... E, considerando isso, quão complexo é esse tipo de problema?
Pergunta de bônus: quanto tempo antes de um PC de US $ 2.000 poder resolver damas em um dia? Xadrez? Vai? (É claro que, para isso, você também deve levar em consideração o aumento da velocidade dos computadores domésticos ...)
Eu adicionei o gráfico em algoritmos tag porque você pode representar estes jogos como árvores, mas se eu estou abusando da tag favor adicionar algo mais apropriado
Respostas:
Como @Joe aponta, o xadrez é trivial para resolver em time usando uma tabela de pesquisa. (Uma implementação real desse algoritmo exigiria um universo significativamente maior que o em que vivemos, mas este é um site para a ciência da computação teórica . O tamanho da constante é irrelevante.)O ( 1 )
Obviamente, não existe uma generalização canônica do xadrez, mas várias variantes foram consideradas; sua complexidade depende de como as regras sobre movimentos sem capturas e posições repetidas são generalizadas.n × n
Se um empate é declarado após um número polinomial de movimentos livres de captura, ou depois de qualquer posição repete um número polinomial de vezes, então qualquer extremidades do jogo de xadrez depois de um número polinomial de movimentos, então o problema está claramente em PSPACE. Storer provou que essa variante é difícil para o PSPACE.n × n
Para a variante sem limites sobre as posições repetidas ou movimentos livres de captura, o número de legal posições de xadrez é exponencial em n , então o problema está claramente em EXPTIME. Fraenkel e Lichtenstein provaram que essa variante é EXPTIME-hard.n × n n
fonte
O(1)
mas na verdade não há computador ou algoritmos para resolvê-los em um tempo humano razoável. Eu estaria curiosa para saber o número deste tipo de problemas para uma determinada memória limitador fixo e tempofonte
Na verdade, existem algumas perguntas diferentes aqui: (a) quanta capacidade computacional é necessária para a pesquisa em árvore de jogos e (b) qual é a complexidade computacional desses problemas? O melhor recurso para todos os fins para esse tipo de coisa é provavelmente a página da Wikipedia sobre Complexidade de jogos , mas para entrar em um pouco mais detalhadamente:
Na prática, a pesquisa pura em árvore é complementada por um dicionário de baixo para cima; por exemplo, os resultados de todos os jogos finais de xadrez de 6 peças são conhecidos e muitos jogos finais de 7 peças foram analisados (consulte http://en.wikipedia.org/wiki/Endgame_tablebase ), para que o resultado de uma ramificação do jogo possa ser procurou no 'dicionário' (um enorme banco de dados de posições) depois que a posição foi reduzida a poucas partes suficientes, atalho para muitas pesquisas de árvore extras que, de outra forma, seriam necessárias. Foi o que foi feito com as damas - os bancos de dados foram construídos para todos os jogos finais com poucas peças e depois estendidos para adicionar mais peças e mais, até que os resultados de todos os jogos finais de 10 peças fossem conhecidos; então a pesquisa em árvore foi usada a partir da posição inicial, e essencialmente os dois se encontraram no meio.
Além dessas abordagens práticas, porém, existe o lado (b) da questão: qual é a complexidade computacional desses tipos de problemas? Abstratamente, a maioria dos problemas desse tipo tende a se enquadrar em duas categorias; eles são completos para PSPACE - o que significa aproximadamente 'se você pode resolver isso, pode resolver qualquer problema que ocupe muito espaço polinomialmente' - ou EXPTIME-complete (que significa aproximadamente 'se você pode resolver isso, você pode resolver qualquer problema leva exponencialmente muito tempo '), dependendo de quanto tempo o jogo pode durar; novamente, a página da Wikipedia sobre EXPTIME-completeness apresenta uma discussão muito boa sobre os problemas envolvidos e o que diferencia os diferentes jogos dessa frente.
fonte
Essas estimativas são muito altas.
Você está focado na ramificação com base em movimentos legais. Isso faz muito sentido se você estiver tentando criar um computador de xadrez rápido, mas não é assim que você escreveria um programa para "resolver" o xadrez.
Há <<<<< 13 ^ 64 estados possíveis de jogo no xadrez. Cada quadrado pode conter apenas uma das peças de xadrez ou nada. Você pode iterar por todos eles e marcá-los como vitória em preto ou vitória em branco em não mais que 2 ^ 256 operações.
Uma estimativa mais realista do número de estados de jogo razoavelmente alcançáveis é de cerca de 2 ^ 100
fonte