Il s'agit d'une reformulation d'une question antérieure .
Considérez le jeu d' information parfait et impartial suivant entre deux joueurs, Alice et Bob. Les joueurs reçoivent une permutation des nombres entiers 1 à n. A chaque tour, si la permutation actuelle augmente, le joueur actuel perd et l'autre joueur gagne; sinon, le joueur actuel supprime l'un des numéros et le jeu passe à l'autre joueur. Alice joue en premier. Par exemple:
(1,2,3,4) - Bob gagne immédiatement, par définition.
(4,3,2,1) - Alice gagne après trois tours, peu importe la façon dont on joue.
(2,4,1,3) - Bob peut gagner à son premier tour, peu importe comment Alice joue.
(1,3,2,4) - Alice gagne immédiatement en supprimant le 2 ou le 3; sinon, Bob peut gagner à son premier tour en supprimant le 2 ou le 3.
(1,4,3,2) - Alice gagne finalement si elle prend le 1 à son premier tour; sinon, Bob peut gagner à son premier tour en ne retirant pas le 1.
Existe-t-il un algorithme polynomial pour déterminer quel joueur remporte ce jeu à partir d'une permutation de départ donnée, en supposant un jeu parfait ? Plus généralement, comme il s'agit d'un jeu impartial standard, chaque permutation a une valeur Sprague – Grundy ; par exemple, (1,2,4,3) a la valeur * 1 et (1,3,2) a la valeur * 2. Est-il difficile de calculer cette valeur?
L'algorithme de retour en arrière évident s'exécute en temps O (n!), Bien que cela puisse être réduit à via la programmation dynamique.
Réponses:
Le "jeu de permutation" est isomorphe au jeu suivant:
Le graphe correspondant à une permutation initiale particulière π ∈ S n contient uniquement les arêtes ( i , j ) pour lesquelles i - j et π ( i ) - π ( j ) ont des signes opposés. Autrement dit, chaque paire de chiffres dans le mauvaisGπ π∈Sn (i,j) i−j π(i)−π(j) l'ordre dans la permutation est associé à une arête. De toute évidence, les mouvements autorisés sont isomorphes à ceux du jeu de permutation (supprimer un nombre = supprimer un nœud), et les conditions gagnantes sont également isomorphes (pas de paires dans l'ordre décroissant = pas de bords restants).
Une vue complémentaire est obtenue en considérant jouer un jeu "dual" sur le complément graphique , qui contient les arêtes ( i , j ) pour lesquelles i et j sont dans le bon ordre dans la permutation. Le double jeu à déconnecter est:Gcπ=GR(π) (i,j) i j
Selon la permutation particulière, l'un de ces jeux peut sembler plus simple que l'autre à analyser. L'avantage de la représentation graphique est qu'il est clair que les composants déconnectés du graphique sont des jeux séparés, et donc on espère une certaine réduction de la complexité. Cela rend également les symétries de la position plus apparentes. Malheureusement, les conditions gagnantes ne sont pas standard ... le jeu de permutation se terminera toujours avant que tous les mouvements ne soient utilisés, ce qui lui donne une sorte de caractère misère . En particulier, la valeur nim ne peut pas être calculée comme la somme nim (XOR binaire) des valeurs nim des composants déconnectés.
Pour Déconnecter, il n'est pas difficile de voir que pour tout graphique et tout n pair , le jeu G ∪ ˉ K n est équivalent à G (où ˉ K , et le deuxième joueur peut copier son coup dans l'autre (réduisant à G ′ + G ′ ∪ ¯ K n avec | G ′ |G n G∪K¯n G est le graphe sans bord sur n sommets). Pour le prouver, nous devons montrer que la somme disjonctive G + G ∪ ˉ K n est une victoire du second joueur. La preuve est par induction sur | G | + n . Si GK¯n n G+G∪K¯n |G|+n G est sans bord, puis le premier joueur perd immédiatement (les deux parties sont terminées). Sinon, le premier joueur peut se déplacer dans l'un ou l'autre ).G G′+G′∪Kn¯ ); ou, si n ≥ 2 , le premier joueur peut se déplacer dans la pièce déconnectée, et le deuxième joueur peut faire de même (en réduisant à G + G ∪ ˉ K n - 2|G′|=|G|−1 n≥2 G+G∪K¯n−2
Cela montre que tout graphique est équivalent à H ∪ K p , où H est la partie de G sans sommets déconnectés, et p = 0 ou 1 ′ ∼ ( H ∪ H ′ ) ∪ K p ⊕ p ′ . De plus, on peut voir que les jeux de [ H ∪ K 0G H∪Kp H G p=0 1 est la parité du nombre de sommets déconnectés dans . Tous les jeux d'une classe d'équivalence ont la même valeur nim, et de plus, la relation d'équivalence respecte l'opération d'union: si G ∼ H ∪ K p et G ′ ∼ H ′ ∪ K p ′G G∼H∪Kp G′∼H′∪Kp′ alors H , puis copiez les mouvements du deuxième joueur par la suite.G∪G′∼(H∪H′)∪Kp⊕p′ et [ H ∪ K 1 ] ont des valeurs nim différentes sauf si H est le graphique nul: en jouant H + H ∪ K 1 , le premier joueur peut prendre l'isolement sommet, laissant H +[H∪K0] [H∪K1] H H+H∪K1 H+H
Je ne connais aucun résultat de décomposition associé pour Reconnecter.
Deux types spéciaux de permutations correspondent à des jeux de tas particulièrement simples.
Une petite réflexion montre que ces deux jeux différents sur des tas (on peut les appeler 1-tas et un-tas , à un certain risque de confusion) sont, en fait, eux-mêmes isomorphes. Les deux peuvent être représentés par un jeu sur un diagramme de Young (comme proposé initialement par @domotorp) dans lequel les joueurs alternent en supprimant un carré en bas à droite jusqu'à ce qu'il ne reste qu'une seule ligne. C'est évidemment le même jeu que 1-tas lorsque les colonnes correspondent à des tas, et le même jeu que One-Heap lorsque les lignes correspondent à des tas.
Un élément clé de ce jeu, qui s'étend à Disconnect and Reconnect, est que la durée est liée à l'état final du jeu de manière simple. Quand c'est votre tour, vous gagnerez si le jeu a un nombre impair de coups restants, y compris celui que vous êtes sur le point de faire. Puisqu'un seul carré est supprimé à chaque coup, cela signifie que vous voulez que le nombre de carrés restant à la fin de la partie ait la parité opposée qu'il a maintenant. De plus, le nombre de cases aura la même parité sur tous vos tours; vous savez donc dès le départ quelle parité vous voulez que le décompte final ait. On peut appeler les deux joueurs Eve et Otto, selon que le décompte final doit être pair ou impair pour qu'ils gagnent. Eve se déplace toujours dans des états avec une parité impaire et produit des états avec une parité paire, et Otto est le contraire.
Dans sa réponse, @PeterShor donne une analyse complète de One-Heap. Sans répéter la preuve, le résultat est le suivant:
Comme indiqué, cela donne également des stratégies optimales pour les 1-tas, bien qu'elles soient un peu plus gênantes à exprimer (et je peux très bien faire une erreur dans la "traduction" primaire à double). Dans le jeu de 1-tas:
Comme le note @PeterShor, il n'est pas clair comment (ou si) ces analyses pourraient être étendues aux jeux plus généraux de déconnexion et de reconnexion.
la source
Dans sa réponse, domotorp propose d'analyser un cas particulier du jeu. Ce cas particulier se produit lorsque la permutation est une série de séquences croissantes, chacune étant plus grande que la suivante, comme (8,9,5,6,7,4,1,2,3). Dans ce jeu, vous commencez avec une collection de tas de pierres, et les joueurs retirent alternativement une pierre d'un tas. Le joueur qui laisse un seul tas gagne. Nous dirons que le ème tas contient h i pierres, et supposons que le hi hi sont donnés en ordre décroissant. Par exemple, pour la permutation ci-dessus, le h ihi hi sont 3,3,2,1. J'ai essayé de donner l'analyse de ce jeu dans les commentaires à la réponse de domotorp, mais (a) je me suis trompé et (b) il n'y a pas assez de place dans les commentaires pour donner une vraie preuve.
Pour analyser ce jeu, nous devons comparer deux quantités: , le nombre de tas contenant des pierres simples et t = ∑ i ≥ 2 ,s ; notons que nous ignorons le plus grand tas de la somme. Il s'agit du nombre de pierres que vous devez retirer pour vous assurer que tous les tas sauf un ne contiennent pas plus de deux pierres. Nous affirmons que les positions perdantes sont les suivantes:t=∑i≥2,hi>2hi−2
Positions où contenant un nombre impair de pierres.t≤s−2
Positions où contenant un nombre pair de pierres.t≥s
Il est facile de montrer qu'à partir d'une position perdante, vous devez aller à une position gagnante, car les ne peuvent changer que d'au plus 1 à chaque tour et le nombre de pierres diminue de 1 à chaque mouvement.t−s
Pour finir de montrer que c'est correct, nous devons montrer que depuis n'importe quelle position qui n'est pas dans la catégorie (1) ou (2), le premier joueur peut d'un seul coup atteindre une position dans la catégorie (1) ou (2), ou gagnez directement.
Il y a deux cas:
Positions où contenant un nombre impair de pierres. Ici, si s > 0 , retirez une pierre d'un tas avec une seule pierre. S'il ne reste qu'un tas, nous avons gagné. Sinon, nous avons maintenant t ≥ s . S'il n'y a pas de tas avec une seule pierre, retirez une pierre d'un tas avec au moins trois pierres. (Puisqu'il y avait un nombre impair de pierres, c'est possible). Puisque s = 0 , nous avons t ≥ s .t≥s−1 s>0 t≥s s=0 t≥s
Positions où contenant un nombre pair de pierres. Ici, s'il y a des tas avec au moins deux pierres autres que le plus gros tas, retirez une pierre de l'une d'elles. Si ce tas contient trois pierres ou plus, t diminue d'une unité. S'il contient exactement deux pierres, s augmente d'une unité. Nous avons maintenant t ≤ s - 2 . Le dernier cas est celui où tous les tas sauf un sont constitués de pierres simples; dans ce cas, il est facile de vérifier si le premier joueur gagne s'il y a un nombre pair de pierres.t≤s−1 t s t≤s−2
J'ai essayé de généraliser cette stratégie au jeu original, et je n'ai pas compris comment le faire.
la source
J'ai implémenté une solution pour la vérification rapide des hypothèses. N'hésitez pas à jouer avec . Si vous n'avez pas de compilateur C ++ localement, vous pouvez l'exécuter à distance sur différentes entrées en utilisant le lien "upload with new input".O(2nn)
@ Jɛ ff E Il est arrivé que (1,4,3,2) ait la valeur * 1, pas * 2 comme vous l'avez suggéré.
la source
Modifier le 5 janvier: En fait, le jeu de tas décrit ci-dessous est un cas particulier du problème, c'est-à-dire lorsque les chiffres se suivent de manière spécifique de sorte que le premier groupe est plus grand que le deuxième groupe qui est plus grand que le troisième, etc. et les nombres dans chaque groupe augmentent. Par exemple 8, 9, 4, 5, 6, 7, 2, 3, 1 est une telle permutation. Je propose donc de résoudre ce cas spécial en premier.
Avertissement: je ne prétends plus que la preuve ci-dessous est correcte, voir par exemple le commentaire de Tsuyoshi qui montre que la suppression d'un nombre d'une permutation donnera un diagramme qui ne peut pas être obtenu en supprimant un carré du diagramme de la permutation. J'ai laissé la réponse ici pour montrer que cette approche ne fonctionne pas, d'autant plus qu'elle contient un autre jeu simple.
Le jeu a une autre formulation très simple grâce à Young Tableaux. Je suis sûr qu'il peut être analysé à partir de là comme d'autres jeux et qu'il produira un algorithme de temps linéaire.
Définissez d'abord le jeu suivant sur les jeunes diagrammes: à chaque tour, si le diagramme actuel est horizontal (toutes les cases sur une ligne), le joueur actuel perd et l'autre joueur gagne; sinon, le joueur actuel supprime l'un des carrés en bas à droite et le jeu passe à l'autre joueur.
Commandez maintenant la séquence de nombres dans un Young Tableaux. La revendication principale est que le gagnant du jeu original est le même que le gagnant du jeu de diagramme commençant par cette forme. Pour voir cela, notez que chaque fois que les joueurs suppriment un nombre, le diagramme de la nouvelle séquence peut être réalisé en supprimant un carré en bas à droite du diagramme. De plus, un tel diagramme peut être obtenu en supprimant le nombre du carré inférieur droit respectif. Ces déclarations découlent de la théorie standard des Young Tableaux.
Bien que ce jeu de diagrammes soit assez simple, il est trivialement équivalent au jeu suivant, qui semble plus standard:
Un jeu de tas: les joueurs reçoivent des tas avec des cailloux dans chacun. A chaque tour, s'il ne reste qu'un tas, le joueur actuel perd et l'autre joueur gagne; sinon, le joueur actuel retire un caillou d'un tas et le jeu passe à l'autre joueur.
S'il existe une solution simple au jeu de tas (et je crois fermement qu'il y en a une), nous obtenons également une solution au jeu original: il suffit de mettre la séquence dans un Young Tableaux et de transformer son diagramme en tas.
Malheureusement, je ne vois pas quelles positions de tas gagnent / comment déterminer les valeurs Sprague – Grundy. J'ai vérifié quelques cas à la main, et voici les positions perdantes avec au plus 6 cailloux:
un tas; (1,1,1); (2,2); (3,1,1); (2,1,1,1); (1,1,1,1,1); (4,2); (3,3); (2,2,2).
Tout le monde peut résoudre ce jeu?
Edit: Peter Shor peut, voir sa réponse!
la source