Esta é uma reafirmação de uma pergunta anterior .
Considere o seguinte jogo imparcial de informações perfeitas entre dois jogadores, Alice e Bob. Os jogadores recebem uma permutação dos números inteiros 1 a n. A cada turno, se a permutação atual estiver aumentando, o jogador atual perde e o outro jogador vence; caso contrário, o jogador atual remove um dos números e o jogo passa para o outro jogador. Alice toca primeiro. Por exemplo:
(1,2,3,4) - Bob vence imediatamente, por definição.
(4,3,2,1) - Alice vence após três turnos, não importa como alguém jogue.
(2,4,1,3) - Bob pode vencer em seu primeiro turno, não importa como Alice jogue.
(1,3,2,4) - Alice vence imediatamente removendo o 2 ou o 3; caso contrário, Bob pode vencer no primeiro turno removendo o 2 ou o 3.
(1,4,3,2) - Alice acaba vencendo se fizer o 1 no primeiro turno; caso contrário, Bob pode vencer no seu primeiro turno não removendo o 1.
Existe um algoritmo de tempo polinomial para determinar qual jogador vence este jogo a partir de uma dada permutação inicial, assumindo o jogo perfeito ? De maneira mais geral, por se tratar de um jogo imparcial padrão, toda permutação tem um valor Sprague – Grundy ; por exemplo, (1,2,4,3) tem o valor * 1 e (1,3,2) tem o valor * 2. Quão difícil é calcular esse valor?
O algoritmo de retrocesso óbvio é executado em tempo O (n!), Embora isso possa ser reduzido para tempo por meio de programação dinâmica.
Respostas:
O "jogo de permutação" é isomórfico para o seguinte jogo:
O gráfico correspondente a uma permutação inicial específica contém apenas as arestas para as quais e têm sinais opostos. Ou seja, cada par de números na ordem errada na permutação está associado a uma aresta. Claramente, os movimentos permitidos são isomórficos aos do jogo de permutação (remover um número = remover um nó) e as condições de vitória também são isomórficas (sem pares em ordem decrescente = sem arestas restantes). π ∈ S n ( i , j ) i - j π ( i ) - π ( j )Gπ π∈Sn (i,j) i−j π(i)−π(j)
Uma vista complementar é obtida considerando que joga um jogo de "dupla" do gráfico complemento , que contém essas bordas para o qual e são na ordem correta na permutação. O jogo duplo para desconectar é: ( i , j ) i jGcπ=GR(π) (i,j) i j
Dependendo da permutação específica, um desses jogos pode parecer mais simples que o outro para analisar. A vantagem da representação gráfica é que é claro que os componentes desconectados do gráfico são jogos separados e, portanto, espera-se uma redução na complexidade. Também torna as simetrias da posição mais aparentes. Infelizmente, as condições vencedoras não são padrão ... o jogo de permutação sempre termina antes que todos os movimentos sejam esgotados, dando a ele um personagem misère . Em particular, o valor nim não pode ser calculado como a soma nim (XOR binário) dos valores nim dos componentes desconectados.
Para Desligar, não é difícil de ver que, para qualquer gráfico e qualquer mesmo , o jogo é equivalente a (onde é o gráfico sem gume em vértices) . Para provar isso, precisamos mostrar que a soma disjuntiva é uma vitória do segundo jogador. A prova é por indução em . Se tiver bordas, o primeiro jogador perde imediatamente (os dois jogos terminam). Caso contrário, o primeiro jogador pode mover-se em e o segundo jogador pode copiar sua jogada no outro (reduzindo para comn G ∪ ˉ K n G ˉ K n n G + G ∪ ˉ K n | G | + N G G G ' + G ' ∪ ¯ K n | G ' | = | G | - 1 n ≥ 2 L + L ∪ ˉ K n - 2G n G∪K¯n G K¯n n G+G∪K¯n |G|+n G G G′+G′∪Kn¯ |G′|=|G|−1 ); ou, se , o primeiro jogador pode mover-se na peça desconectada e o segundo jogador pode fazer o mesmo (reduzindo para ).n≥2 G+G∪K¯n−2
Isto mostra que todo o gráfico é equivalente a , onde é a parte do sem vértices desconectadas, e ou , é a paridade do número de vértices desconectados em . Todos os jogos em uma classe de equivalência têm o mesmo valor nim e, além disso, a relação de equivalência respeita a operação de união: se e então . Além disso, pode-se ver que os jogos em eH ∪ K P H L p = 0 1 L L ~ H ∪ K P L ' ~ H ' ∪ K p ' L ∪ L ' ~ ( H ∪ H ' ) ∪ K p ⊕ p ' [ H ∪ K 0 ] [ H ∪ K 1 ] H H + H ∪G H∪Kp H G p=0 1 G G∼H∪Kp G′∼H′∪Kp′ G∪G′∼(H∪H′)∪Kp⊕p′ [H∪K0] [H∪K1] tem valores nim diferentes, a menos que seja o gráfico nulo: ao jogar , o primeiro jogador pode pegar o vértice isolado, saindo de , e depois copiar os movimentos do segundo jogador.H H + HH+H∪K1 H+H
Não conheço nenhum resultado de decomposição relacionado ao Reconectar.
Dois tipos especiais de permutações correspondem a jogos de pilha particularmente simples.
Um pouco de reflexão mostra que esses dois jogos diferentes em montões (podemos chamá-los de 1 montões e um montão , com algum risco de confusão) são, de fato, isomórficos. Ambos podem ser representados por um jogo em um diagrama de Young (como proposto inicialmente por @domotorp), no qual os jogadores alternam a remoção de um quadrado inferior direito até que apenas uma única linha seja deixada. Obviamente, este é o mesmo jogo que o 1-Heaps quando as colunas correspondem aos heaps e o mesmo jogo que o One-Heap quando as linhas correspondem aos heaps.
Um elemento-chave deste jogo, que se estende a Desconectar e Reconectar, é que a duração está relacionada ao estado final do jogo de uma maneira simples. Quando for a sua vez, você vencerá se o jogo tiver um número ímpar de movimentos restantes, incluindo o que você está prestes a fazer. Como um único quadrado é removido a cada jogada, isso significa que você deseja que o número de quadrados restantes no final do jogo tenha a paridade oposta à existente. Além disso, o número de quadrados terá a mesma paridade em todos os seus turnos; para que você saiba desde o início que paridade deseja que a contagem final tenha. Podemos chamar os dois jogadores de Eve e Otto, dependendo se a contagem final deve ser par ou ímpar para que eles ganhem. Eva sempre se move em estados com paridade ímpar e produz estados com paridade par, e Otto é o oposto.
Em sua resposta, @PeterShor faz uma análise completa do One-Heap. Sem repetir a prova, o resultado é o seguinte:
Como observado, isso também oferece estratégias ótimas para o 1-Heaps, embora elas sejam um pouco mais difíceis de se expressar (e eu posso estar cometendo um erro na "tradução" do primário para o duplo). No jogo de 1 pilhas:
Como o @PeterShor observa, não está claro como (ou se) essas análises podem ser estendidas aos jogos mais gerais de Disconnect and Reconnect.
fonte
Em sua resposta, domotorp sugere analisar um caso especial do jogo. Este caso especial surge quando a permutação é uma série de seqüências crescentes, cada uma das quais é maior que a seguinte, como (8,9,5,6,7,4,1,2,3). Neste jogo, você começa com uma coleção de montes de pedras e os jogadores removem uma pedra alternadamente de uma pilha. O jogador que deixa uma única pilha ganha. que o th heap tem stones nele, e assumimos que o é dado em ordem decrescente. Por exemplo, para a permutação acima, os são 3,3,2,1. Tentei dar a análise deste jogo nos comentários à resposta da domotorp, mas (a) eu entendi errado e (b) não há espaço suficiente nos comentários para fornecer uma prova real.h i h i h ii hi hi hi
Para analisar esse jogo, precisamos comparar duas quantidades: , o número de pilhas contendo pedras únicas ; observe que ignoramos a maior pilha na soma. Esse é o número de pedras que você precisaria remover para garantir que todos os montões, exceto um, não contenham mais do que duas pedras. Afirmamos que as posições perdedoras são as seguintes:t = ∑ i ≥ 2 , h i > 2s t=∑i≥2,hi>2hi−2
Posições onde contendo um número ímpar de pedras.t≤s−2
Posições onde contém um número par de pedras.t≥s
É fácil mostrar que, de uma posição perdida, você deve ir para uma posição vencedora, pois os só podem mudar em no máximo 1 por turno, e o número de pedras diminui em 1 a cada movimento.t−s
Para terminar de mostrar que isso está correto, precisamos mostrar que, de qualquer posição que não esteja na categoria (1) ou (2), o primeiro jogador pode, em um movimento, alcançar uma posição na categoria (1) ou (2), ou ganhar diretamente.
Existem dois casos:
Posições onde contendo um número ímpar de pedras. Aqui, se , remova uma pedra de uma pilha com uma única pedra. Se houver apenas um monte, vencemos. Caso contrário, agora temos . Se não houver pilhas com uma única pedra, remova-a de uma pilha com pelo menos três pedras. (Como havia um número ímpar de pedras, isso é possível). Como , temos .s > 0 t ≥ s s = 0 t ≥ st≥s−1 s>0 t≥s s=0 t≥s
Posições onde contendo um número par de pedras. Aqui, se houver pilhas com pelo menos duas pedras além da pilha maior, remova-a de uma delas. Se essa pilha tiver três ou mais pedras, diminui em uma. Se tiver exatamente duas pedras, aumenta em uma. Agora temos . O último caso é quando todos os montões, exceto um, consistem em pedras únicas; Nesse caso, é fácil verificar se o primeiro jogador vence se houver um número par de pedras.t s t ≤ s - 2t≤s−1 t s t≤s−2
Eu tentei generalizar essa estratégia para o jogo original e ainda não descobri como fazê-lo.
fonte
Eu implementei uma solução para verificação rápida de hipóteses. Sinta-se livre para jogar com ele . Se você não possui o compilador C ++ localmente, pode executá-lo em diferentes entradas remotamente usando o link "carregar com nova entrada".O(2nn)
@ Jɛ ff E Aconteceu que (1,4,3,2) tem o valor * 1, não * 2 como você sugeriu.
fonte
Editar 5 de janeiro: De fato, o One Heap Game descrito abaixo é um caso especial do problema, ou seja, quando os números se seguem de uma maneira específica, de modo que o primeiro grupo seja maior que o segundo grupo que seja maior que o terceiro etc. e os números em cada grupo estão aumentando. Por exemplo, 8, 9, 4, 5, 6, 7, 2, 3, 1 é essa permutação. Então, proponho resolver esse caso especial primeiro.
Exoneração de responsabilidade: não reivindico mais que a prova abaixo esteja correta, veja, por exemplo, o comentário de Tsuyoshi, que mostra que a exclusão de um número de uma permutação fornecerá um diagrama impossível de ser obtido pela exclusão de um quadrado do diagrama da permutação. Deixei a resposta aqui para mostrar que essa abordagem não funciona, além de conter outro jogo simples.
O jogo tem uma outra formulação muito simples, graças ao Young Tableaux. Estou certo de que pode ser analisado a partir daí como outros jogos e produzirá um algoritmo de tempo linear.
Primeiro, defina o seguinte jogo nos diagramas jovens: A cada turno, se o diagrama atual for horizontal (todos os quadrados em uma linha), o jogador atual perde e o outro jogador vence; caso contrário, o jogador atual remove um dos quadrados inferior direito e o jogo passa para o outro jogador.
Agora ordene a sequência de números em um Young Tableaux. A principal reivindicação é que o vencedor do jogo original é o mesmo que o vencedor do jogo de diagrama começando com essa forma. Para ver isso, observe que sempre que os jogadores excluem um número, o diagrama da nova sequência pode ser alcançado excluindo um quadrado inferior direito do diagrama. Além disso, qualquer diagrama pode ser obtido excluindo o número do respectivo quadrado inferior direito. Essas declarações seguem a teoria padrão de Young Tableaux.
Embora este jogo de diagrama seja bastante simples, é trivialmente equivalente ao jogo a seguir, que parece mais padrão:
Um jogo de pilha: Os jogadores recebem algumas pilhas com algumas pedras em cada uma. A cada turno, se restar apenas uma pilha, o jogador atual perde e o outro jogador vence; caso contrário, o jogador atual remove uma pedrinha de uma pilha e a jogada passa para o outro jogador.
Se houver uma solução simples para o jogo de heap (e eu acredito fortemente que exista), também obteremos uma solução para o jogo original: basta colocar a sequência em um Young Tableaux e transformar seu diagrama em montões.
Infelizmente, não vejo quais posições de pilha estão ganhando / como determinar os valores de Sprague – Grundy. Eu verifiquei alguns casos manualmente, e a seguir estão as posições perdedoras com no máximo 6 pedras:
uma pilha; (1,1,1); (2,2); (3,1,1); (2,1,1,1); (1,1,1,1,1); (4,2); (3,3); (2,2,2)
Alguém pode resolver este jogo?
Edit: Peter Shor pode, veja sua resposta!
fonte