Esta es una reformulación de una pregunta anterior .
Considere el siguiente juego imparcial de información perfecta entre dos jugadores, Alice y Bob. Los jugadores reciben una permutación de los enteros 1 a n. En cada turno, si la permutación actual aumenta, el jugador actual pierde y el otro jugador gana; de lo contrario, el jugador actual elimina uno de los números y el juego pasa al otro jugador. Alice juega primero. Por ejemplo:
(1,2,3,4) - Bob gana de inmediato, por definición.
(4,3,2,1) - Alice gana después de tres turnos, sin importar cómo juegue alguien.
(2,4,1,3) - Bob puede ganar en su primer turno, no importa cómo juegue Alice.
(1,3,2,4) - Alice gana inmediatamente al eliminar el 2 o el 3; de lo contrario, Bob puede ganar en su primer turno eliminando el 2 o el 3.
(1,4,3,2) - Alice finalmente gana si toma el 1 en su primer turno; de lo contrario, Bob puede ganar en su primer turno al no eliminar el 1.
¿Existe un algoritmo de tiempo polinómico para determinar qué jugador gana este juego a partir de una permutación inicial dada, suponiendo un juego perfecto ? En términos más generales, dado que este es un juego imparcial estándar, cada permutación tiene un valor Sprague-Grundy ; por ejemplo, (1,2,4,3) tiene valor * 1 y (1,3,2) tiene valor * 2. ¿Qué tan difícil es calcular este valor?
El algoritmo de retroceso obvio se ejecuta en tiempo O (n!), Aunque esto puede reducirse a tiempo mediante programación dinámica.
Respuestas:
El "juego de permutación" es isomorfo al siguiente juego:
El gráfico correspondiente a una permutación inicial particular π ∈ S n contiene solo aquellos bordes ( i , j ) para los cuales i - j y π ( i ) - π ( j ) tienen signos opuestos. Es decir, cada par de números en el incorrectoGπ π∈Sn (i,j) i−j π( i ) - π( j ) El orden en la permutación está asociado con un borde. Claramente, los movimientos permitidos son isomórficos para aquellos en el juego de permutación (eliminar un número = eliminar un nodo), y las condiciones ganadoras también son isomorfas (sin pares en orden descendente = sin bordes restantes).
Se obtiene una vista complementaria considerando jugar un juego "dual" en el complemento gráfico , que contiene los bordes ( i , j ) para los que i y j están en el orden correcto en la permutación. El doble juego para desconectar es:solCπ= GR ( π) ( i , j ) yo j
Dependiendo de la permutación particular, uno de estos juegos puede parecer más simple de analizar que el otro. La ventaja de la representación gráfica es que está claro que los componentes desconectados del gráfico son juegos separados, por lo que se espera una reducción en la complejidad. También hace que las simetrías de la posición sean más evidentes. Desafortunadamente, las condiciones ganadoras no son estándar ... el juego de permutación siempre terminará antes de que se agoten todos los movimientos, dándole un carácter algo misère . En particular, el valor nim no puede calcularse como la suma nim (XOR binario) de los valores nim de los componentes desconectados.
Para Desconectar, no es difícil ver que para cualquier gráfico y cualquier par n , el juego G ∪ ˉ K n es equivalente a G (donde ˉ K n es el gráfico sin bordes en n vértices). Para demostrarlo, debemos demostrar que la suma disyuntiva G + G ∪ ˉ K n es una victoria para el segundo jugador. La prueba es por inducción en | G | + n . Si Gsol norte G ∪ K¯norte sol K¯norte norte G + G ∪ K¯norte El | G | +n sol no tiene bordes, entonces el primer jugador pierde inmediatamente (ambos juegos han terminado). De lo contrario, el primer jugador puede moverse en , y el segundo jugador puede copiar su movimiento en el otro (reduciendo a G ′ + G ′ ∪ ¯ K n con | G ′ | = | G | - 1 ); o, si n ≥ 2 , el primer jugador puede moverse en la pieza desconectada, y el segundo jugador puede hacer lo mismo (reduciendo a G + G ∪ ˉ K n - 2 ).sol sol′+ G′∪ Knorte¯ El | sol′El | = | G | -1 n ≥ 2 G + G ∪ K¯n - 2
Esto demuestra que cualquier gráfico es equivalente a H ∪ K p , donde H es la parte de G con no hay vértices desconectados, y p = 0 o 1 es la paridad del número de vértices desconectados en G . Todos los juegos en una clase de equivalencia tienen el mismo valor nim, y además, la relación de equivalencia respeta la operación de unión: si G ∼ H ∪ K p y G ′ ∼ H ′ ∪ K p ′ entonces Gsol H∪ Kpag H sol p = 0 1 sol G ∼ H∪ Kpag sol′∼ H′∪ Kpag′ . Además, se puede ver que los juegos en [ H ∪ K 0 ] y [ H ∪ K 1 ] tienen valores nim diferentes a menos que H sea el gráfico nulo: cuando se juega H + H ∪ K 1 , el primer jugador puede tomar el aislado vértice, dejando H + H , y luego copia los movimientos del segundo jugador a partir de entonces.G ∪ G′∼ ( H∪ H′) ∪ Kp ⊕ p′ [ H∪ K0 0] [ H∪ K1] H H+H∪K1 H+H
No conozco ningún resultado de descomposición relacionado para Reconectar.
Dos tipos especiales de permutaciones corresponden a juegos de montón particularmente simples.
Un pequeño pensamiento muestra que estos dos juegos diferentes en montones (podemos llamarlos 1- montones y One-Heap , con cierto riesgo de confusión) son, de hecho, isomórficos. Ambos pueden representarse mediante un juego en un diagrama de Young (como lo propuso inicialmente @domotorp) en el que los jugadores alternan quitando un cuadrado inferior derecho hasta que solo quede una sola fila. Obviamente, este es el mismo juego que 1-Heaps cuando las columnas corresponden a los montones, y el mismo juego que One-Heap cuando las filas corresponden a los montones.
Un elemento clave de este juego, que se extiende a Desconectar y Reconectar, es que la duración está relacionada con el estado final del juego de una manera simple. Cuando sea tu turno, ganarás si el juego tiene un número impar de movimientos restantes, incluido el que estás a punto de hacer. Dado que se elimina un solo cuadrado en cada movimiento, esto significa que desea que el número de cuadrados restantes al final del juego tenga la paridad opuesta que tiene ahora. Además, el número de cuadrados tendrá la misma paridad en todos tus turnos; para que sepa desde el principio qué paridad desea que tenga el conteo final. Podemos llamar a los dos jugadores Eve y Otto, según si el conteo final debe ser par o impar para que ganen. Eva siempre se mueve en estados con paridad impar y produce estados con paridad par, y Otto es lo contrario.
En su respuesta, @PeterShor ofrece un análisis completo de One-Heap. Sin repetir la prueba, el resultado es el siguiente:
Como se señaló, esto también proporciona estrategias óptimas para 1-Heaps, aunque son algo más incómodas de expresar (y bien podría estar cometiendo un error en la "traducción" de primaria a dual). En el juego de 1-Heaps:
Como señala @PeterShor, no está claro cómo (o si) estos análisis podrían extenderse a los juegos más generales de Disconnect and Reconnect.
fuente
En su respuesta, domotorp sugiere analizar un caso especial del juego. Este caso especial surge cuando la permutación es una serie de secuencias crecientes, cada una de las cuales es más grande que la siguiente, como (8,9,5,6,7,4,1,2,3). En este juego, comienzas con una colección de montones de piedras, y los jugadores eliminan alternativamente una piedra de un montón. El jugador que deja un solo montón gana. Diremos el º montón tiene h i piedras en ella, y se supone que la h i se dan en orden decreciente. Por ejemplo, para la permutación anterior, la h iyo hyo hyo hyo son 3,3,2,1. Intenté dar el análisis de este juego en los comentarios a la respuesta de domotorp, pero (a) me equivoqué y (b) no hay suficiente espacio en los comentarios para dar una prueba real.
Para analizar este juego, necesitamos comparar dos cantidades: , el número de montones que contienen piedras individuales y t = ∑ i ≥ 2 , h i > 2s ; tenga en cuenta que ignoramos el montón más grande en la suma. Este es el número de piedras que deberías eliminar para asegurarte de que todos los montones, pero uno, no contengan más de dos piedras. Afirmamos que las posiciones perdedoras son las siguientes:t = ∑i ≥ 2 , hyo> 2hyo- 2
Posiciones donde contiene un número impar de piedras.t ≤ s - 2
Posiciones donde contiene un número par de piedras.t ≥ s
Es fácil demostrar que desde una posición perdedora, debes ir a una posición ganadora, ya que solo puede cambiar como máximo 1 en cada turno, y la cantidad de piedras disminuye en 1 en cada movimiento.t - s
Para terminar de mostrar que esto es correcto, debemos mostrar que desde cualquier posición que no esté en la categoría (1) o (2), el primer jugador puede, en un movimiento, alcanzar una posición en la categoría (1) o (2), o ganar directamente.
Hay dos casos:
Posiciones donde contiene un número impar de piedras. Aquí, si s > 0 , elimine una piedra de un montón con una sola piedra. Si solo queda un montón, hemos ganado. De lo contrario, ahora tenemos t ≥ s . Si no hay montones con una sola piedra, retire una piedra de un montón con al menos tres piedras. (Dado que había un número impar de piedras, esto es posible). Como s = 0 , tenemos t ≥ s .t≥s−1 s>0 t≥s s=0 t≥s
Posiciones donde contiene un número par de piedras. Aquí, si hay montones con al menos dos piedras que no sean el montón más grande, retire una piedra de una de ellas. Si este montón tiene tres o más piedras, t disminuye en uno. Si tiene exactamente dos piedras, s aumenta en una. Ahora tenemos t ≤ s - 2 . El último caso es cuando todos los montones excepto uno consisten en piedras individuales; En este caso, es fácil comprobar si el primer jugador gana si hay un número par de piedras.t≤s−1 t s t≤s−2
He intentado generalizar esta estrategia al juego original, y no he descubierto cómo hacerlo.
fuente
He implementado una solución para la verificación rápida de hipótesis. Siéntase libre de jugar con él . Si no tiene el compilador C ++ localmente, puede ejecutarlo en diferentes entradas de forma remota utilizando el enlace "cargar con nueva entrada".O(2nn)
@ Jɛ ff E Sucedió que (1,4,3,2) tiene el valor * 1, no * 2 como usted sugirió.
fuente
Editar 5 de enero: De hecho, el juego One Heap descrito a continuación es un caso especial del problema, es decir, cuando los números se siguen entre sí de una manera específica, de modo que el primer grupo es más grande que el segundo grupo, que es más grande que el tercero, etc. . y los números en cada grupo están aumentando. Por ejemplo, 8, 9, 4, 5, 6, 7, 2, 3, 1 es tal permutación. Entonces propongo resolver este caso especial primero.
Descargo de responsabilidad: ya no afirmo que la prueba a continuación es correcta, vea, por ejemplo, el comentario de Tsuyoshi que muestra que eliminar un número de una permutación dará un diagrama que no se puede obtener al eliminar un cuadrado del diagrama de la permutación. Dejé la respuesta aquí para mostrar que este enfoque no funciona, además, ya que contiene otro juego simple.
El juego tiene una formulación muy simple gracias a Young Tableaux. Estoy seguro de que se puede analizar desde allí como otros juegos y producirá un algoritmo de tiempo lineal.
Primero defina el siguiente juego en Young Diagrams: en cada turno, si el diagrama actual es horizontal (todos los cuadrados en una línea), el jugador actual pierde y el otro jugador gana; de lo contrario, el jugador actual elimina uno de los cuadros de abajo a la derecha y pasa pases al otro jugador.
Ahora ordene la secuencia de números en un cuadro joven. La afirmación principal es que el ganador del juego original es el mismo que el ganador del juego de diagrama que comienza con esta forma. Para ver esto, observe que cada vez que los jugadores eliminan un número, el diagrama de la nueva secuencia se puede lograr eliminando un cuadrado inferior derecho del diagrama. Además, cualquier diagrama de este tipo se puede lograr eliminando el número del cuadrado inferior derecho respectivo. Estas declaraciones se desprenden de la teoría estándar de Young Tableaux.
Aunque este juego de diagramas es bastante simple, es trivialmente equivalente al siguiente juego, que parece más estándar:
One Heap Game: los jugadores reciben algunos montones con algunos guijarros en cada uno. En cada turno, si queda solo un montón, el jugador actual pierde y el otro jugador gana; de lo contrario, el jugador actual elimina un guijarro de un montón y pasa los pases al otro jugador.
Si hay una solución simple para el juego dinámico (y creo firmemente que hay una), también obtenemos una solución para el juego original: simplemente coloque la secuencia en un Tableaux joven y transforme su diagrama en montones.
Desafortunadamente, no veo qué posiciones de montón están ganando / cómo determinar los valores de Sprague-Grundy. Revisé algunos casos a mano, y las siguientes son las posiciones perdedoras con un máximo de 6 piedras:
un montón (1,1,1); (2,2); (3,1,1); (2,1,1,1); (1,1,1,1,1); (4,2); (3,3); (2,2,2).
¿Alguien puede resolver este juego?
Editar: Peter Shor puede, ver su respuesta!
fuente