取子游戏博弈简单分析
Nim游戏(博弈论中的组合数学问题).
Nim 游戏——博弈论中的经典问题(组合数学里的知识 Nim 取子游戏Nim 取子游戏的解依赖于奇偶性,是组合数学里的一个重要问题Nim 取子游戏就是两个人面对若干堆硬币(石子、豆粒……进行的游戏。
设有k>=1堆硬币,各堆分别含有n1, n2…… nk 枚硬币,按下列规则取,直到最后没硬币可取,那个人就判输! !规则:1、有两名选手,分别为 I 和 II2、两名选手交替进行取硬币活动,至少在一堆中取一枚硬币3、对于任何一种局面,和局面的过去与未来无关4、最后无硬币可取的人判输! !推理证明:假设两个游戏人 I 、 II 。
假设有两堆硬币 n1、 n2。
游戏人 I 先去,游戏人 I 能否获胜与 n1、 n2的值的大小无关,而取决于 n1是否等于 n2.假设 n1 不等于 n2,先游戏人 I 取较大的堆中使其与较小的堆中硬币数目相等。
然后游戏人 II 取任意一堆中的任意枚硬币,然后游戏人 I 取另外一堆中与游戏人 II 相同的数目, 直到最后,可以看出最后游戏人 I 获胜。
若 n1 == n2,则游戏人 I 先取,游戏人 II 按上面的游戏人 I 的取法去取,最终可以看出游戏人 II 获胜。
举个例子 :(8 , 5 ---- 游戏人 I ---→ (5 , 5 ----游戏人 II ---→ (5 , 2 ---- I -→ (2 , 2 --- II — >(0,2 ---- I --→ (0,0从两堆石子的取法可以推广到 k 堆石子的取法, 先来看一下, 两堆石子的具体取法是怎样进行的?先将 n1和 n2表示成二进制的数的形式 !!!例如 57 = 2^5 + 2^4 + 2^3 + 2^0 = 111001这样我们就可以将一堆硬币看成有 2的幂数的子堆组成, 于是 57就可以看成有2^5 , 2^4 , 2^3 , 2^0的各子堆组成。
在两堆 Nim 取石子游戏中, 各种大小的子堆的总数只能是 0,1,2。
博弈论取石子问题
博弈论取石子问题
博弈论取石子问题是一类经典的博弈问题,也被称为Nim游戏。
这个问题一般描述为:有一堆石子,两名玩家轮流从中取出若干个石子,每次取石子的数量有限制(例如,每次最多只能取1个或者2个),最终取光所有石子的玩家获胜。
在这个问题中,两位玩家都采取最优策略,并且可以假设每位玩家都会尽力阻止对方获胜。
这样,对于每一轮的取石子操作,可以通过数学的方法来判断哪位玩家有必胜策略。
一般来说,博弈论取石子问题可以通过异或运算来求解。
具体思路如下:
1. 通过异或运算计算出所有石子数量的异或和。
2. 如果异或和为0,表示当前状态下无论怎么取石子,都无法保证必胜,此时当前玩家必输。
3. 如果异或和不为0,表示当前状态下存在某种取法,可以保证必胜。
具体的取法是找到最高位上的1,然后将某一堆石子数量减去该最高位1的数量,使得新的异或和为0。
通过上述思路,可以快速计算出哪位玩家具有必胜策略。
当然,如果可以通过编程的方式来模拟和计算,会更加直观和方便。
博弈之取石子经典游戏
由poj 1067引发的——取石子游戏【转自各类博弈】(2011-07-25 23:46:54)[编辑][删除]分类:编程道路~标签:杂谈上次做poj 1067的取石子游戏,只用到了whthoff博弈,未涉及到取石子的异或方法,今天重新搜索,整理了一遍。
搜罗各种资料,加上自己整理,终于成篇啦!……噼里啪啦取石子问题有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。
两个人轮流从堆中取物体若干,规定最后取光物体者取胜。
这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。
下面我们来分析一下要如何才能够取胜。
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。
最后取光者得胜。
显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。
因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。
总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
即,若n=k*(m+1),则后取着胜,反之,存在先取者获胜的取法。
n%(m+1)==0. 先取者必败。
这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。
从一堆100个石子中取石子,最后取完的胜。
(二)威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
这种情况下是颇为复杂的。
我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。
取子游戏_博弈简单分析
一局游戏在两个游戏人之间如下交替进行:游戏从一空堆开始。
当轮到一个游戏人时,他可以往堆中加进1,2,3或4枚硬币。
往堆中加进第100枚硬币的游戏人为得胜者。
确定在这局游戏中是游戏人A还是游戏人B能够确保取胜。
取胜的策略是什么?在学术论坛有博士家园,组合图论论坛确保取足5个硬币即可例题:两个人玩移火柴的游戏,桌子上有1000根火柴,每个人每次可以拿走1-7根火柴,拿走桌子上最后那根火柴的算输,问第一个人第一次要拿多少根火柴才能保证赢7根。
以后对方拿几根,你都要拿够凑足8根的数。
1000根和8根性质是一样的。
从抢30到NIM游戏的取胜策略(一)倒推法抢30是我国民间的一个两人游戏,具有很强的对抗性和娱乐性。
抢30游戏通常有两种玩法。
(1)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。
(2)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,同时把两个人报出的所有数累加,谁先使这个累加数最先达到30,谁就为胜方。
解决最个问题的一般策略是用倒推法。
以(1)为例,要抢到30,必须抢到27;要抢到27,必须抢到24。
如此倒推回去,可得到一系列关键数30、27、24、21、18、……9、6、3。
根据以上分析,抢30游戏本身并不是一个公平的游戏,初始数和先后顺序已经决定了最后的结果,因为只有后报数者才能抢到3的倍数,后报数者有必胜策略。
(二)关键因子所有这些关键数都是3的倍数。
3是两个报数者年内能够报出的最大数与最小数的和。
在类似游戏中,我们把游戏者所能用到的最大数和最小数之和称之为关键因子k,关键数就是k的倍数.。
在抢30的游戏中,关键因子k等于3。
又例如,抢100报数游戏中,如果每人可报数为1至9个连续的自然数,谁先报到100谁就是胜利者。
这里的关键因子k就是可报最大数9和可报最小数1的和,即k=10。
报数获胜的策略就是:(1)让对方先报数;(2)每次报数为关键因子减去对方所报数。
博弈论入门-取石子游戏
博弈论⼊门-取⽯⼦游戏
引导游戏
1. 玩家:2⼈
2. 道具:23张扑克牌
3. 规则: - 游戏双⽅轮流取牌 - 每⼈每次仅限于取1张、2张或3张 - 扑克牌取光,则游戏结束 - 最后取牌的⼀⽅为赢家。
什么是组合游戏?
- 有两个玩家 - 游戏的操作状态是⼀个有限的集合(⽐如:限定⼤⼩的棋盘) - 游戏双⽅轮流操作 - 双⽅的每次操作必须符合游戏规定 - 当以放不能将游戏继续进⾏时,游戏结束,同时,对⽅为获胜⽅ - ⽆论如何操作,游戏总能在有限次操作后结束
概念:必胜点N和必败点P
必胜点(N):下⼀个选⼿将取胜的位置称为必胜点。
必败点(P):前⼀个选⼿将取胜的位置称为必败点。
必胜点N和必败点P属性:
- 所有终结点时必败点P - 从任何必胜点操作,⾄少有⼀种⽅法可以进⼊必败点 - ⽆论如何操作,从必败点都只能进⼊必胜点
取⼦游戏算法实现:
- 步骤⼀:将所有终结位置标记为必败点 - 步骤⼆:将所有⼀步操作能进⼊必败点的位置标记为必胜点 - 步骤三:如果从某个点开始的所有⼀步操作都只能进⼊必胜点,则将该店标记为必败点 - 步骤四:如果在步骤三未能找到新的必败点,则算法终⽌,否则返回步骤⼆。
-
栗⼦:
set:1 3 4
x:0 1 2 3 4 5 6 7 8 9 10 11 12 13
k:p n p n n n n p n p n n n n。
取石子游戏
从三道例题来看一类常见博弈问题的思维方法。
长郡中学金恺在博弈问题中,有一类最为一般与常见,概括来说满足4个基本要点:1、双人轮流取子,输赢只与当前的局面有关,而与之前怎么取的无关;2、取子的方法可以是多种不同的取法相结合。
13、某个人无法按规则取了就算输——即没有后继状态的状态为败局;4、石子越取越少,或者存在某种特殊的性质,使得状态不可能出现循环——状态存在拓扑顺序,能够采用递推的方法解决(但效率不高,因为没有利用走棋规则的特点);对于这类博弈题,我们往往希望根据走棋特点找到一种简单的性质,然后根据这个性质将Array所有状态进行划分:即将所有状态分为两部分W、L,满足性质A的状态划到集合L,不满足性质A的状态划到集合W:对于集合L中的状态l,证明l的后继状态都在W中;对于集合W中的状态w,证明w至少有一个后继在L中。
则W中的所有状态都是胜局,L中的所有状态都是败局。
对于输入的一个状态,只要判断它是否满足性质A即可以知道它是胜是败。
但是性质A可能非常隐蔽、复杂,要找到性质A可能却要花费很多时间和心智。
这类问题由于取子方法有很多很多,所以没有约定俗成的公式2。
抓住取子方法的特点、周密深入的分析、找到问题的本质是解决这类问题的最直接的办法。
在很多情况下,找规律也是一个不错的选择,因为大多数情况下性质A的形式是非常简单的(这正体现了数学中简单即美的最高境界),往往可以通过观察+猜想找到正确的结果。
而一旦找到了某个性质A对于小数据都成立(可用程序检测),那么用归纳法证明是比较简单的。
本文就通过几个例子,来探索解决这类问题的思维方法。
问题1:取火柴游戏题目来源:姚金宇原创题目描述:有三堆火材,分别为a,b,c根。
有两个人在做如下游戏:游戏者任意拿走其中一堆火柴,再在剩下的两堆里任取一堆任意分成两堆(每堆至少1根)。
两人轮流如此,谁无法这样做就算输了。
输入格式:有n组数据:每一行三个数a,b,c,满足1≤a,b,c≤1,000,000,000。
取石子问题
取石子问题有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。
两个人轮流从堆中取物体若干,规定最后取光物体者取胜。
这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。
下面我们来分析一下要如何才能够取胜。
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。
最后取光者得胜。
显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。
因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。
总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。
(二)威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
这种情况下是颇为复杂的。
我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。
前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。
可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而bk= ak + k,奇异局势有如下三条性质:1。
任何自然数都包含在一个且仅有一个奇异局势中。
由于ak是未在前面出现过的最小自然数,所以有ak > ak-1 ,而bk= ak + k > ak-1 + k -1 = bk-1 > ak-1 。
取石子游戏
取石子游戏简介取石子游戏是一种古老且经典的游戏,通常在孩子们之间进行。
这个游戏的目标是通过每一步的策略来获得尽可能多的石子。
在这个游戏中,两个玩家轮流从一堆石子中取出石子,每次取的数量可以是任意正整数,但不能超过规定的最大值。
最后,拿到最多石子的一方将获胜。
游戏规则1.游戏开始时,准备一堆石子。
这种游戏一般使用小石子或棋子来代表石子。
2.两个玩家轮流进行操作,根据规定的规则取石子。
3.每一步,玩家可以从堆中取出任意数量的石子,但不能超过规定的最大值。
4.游戏继续直到没有石子可供取出。
5.最后,拿到最多石子的一方将获胜。
游戏策略在取石子游戏中,玩家之间进行的是一种全信息博弈。
这意味着玩家可以完全了解整个游戏状态,包括对手的策略和目标。
因此,玩家可以通过一定的策略来优化自己的收益。
基本策略保证胜利的策略如果游戏的规则允许,玩家可以通过以下策略保证胜利:1.规定每次取石子的数量为1个,那么先手的玩家总是可以取到最后一个石子,从而获胜。
2.如果规定每次取石子的数量有上限,而且堆中的石子数量是该上限的倍数加1,那么先手的玩家总是可以通过合理的策略来使得每一步的石子数量维持在上限倍数上,从而保证最后一个石子留给对方。
最优策略对于一般的取石子游戏,玩家可以通过数学方法找到最优策略。
最佳策略取决于堆中石子的数量和规定的最大取石子数量。
例如,假设堆中有13个石子,规定一次最多取5个石子。
通过计算,可以得出以下最佳策略:•如果堆中石子数量是5的倍数加1,先手的玩家会输。
•如果堆中石子数量是5的倍数,先手的玩家会赢。
通过数学分析,可以得出结论:对于先手玩家,在石子数量是(m×n+1)的情况下,先手玩家会输;在石子数量是m×n的情况下,先手玩家会赢。
其中m和n是任意正整数,n是规定的规则中每一次最大取石子的数量。
取石子游戏的变种取石子游戏有许多变种,可以根据玩家的喜好和游戏的目标来选择。
Nim游戏在Nim游戏中,有几堆石子,两个玩家轮流进行操作,每次可以从一堆石子中取出任意数量的石子。
10颗轮流取棋子的必胜教案1到2
《轮流取棋子的必胜教案》1. 引言在游戏世界中,有许多简单而有趣的游戏,其中一款引人入胜的游戏便是轮流取棋子。
这款游戏规则简单,但其中隐藏着许多策略和技巧。
今天,我们将深入探讨这款游戏并提供一到两颗棋子情况下的必胜教案。
2. 游戏规则让我们回顾一下轮流取棋子的基本规则。
游戏开始时,有一排棋子,玩家们轮流取走一定数量的棋子,每次可以取一到两颗。
最后取光最后一颗棋子的玩家将获得胜利。
这是一款简单而优美的游戏,但赢得胜利却并非易事。
3. 一颗棋子情况下的策略我们来讨论一颗棋子情况下的必胜教案。
当游戏开始时,如果只有一颗棋子,那么首先取走的玩家将处于劣势。
我们可以利用数学的方法来求解这个问题。
当只有一颗棋子时,先手玩家无法取胜,无论他如何取,后手玩家都可轻松取胜。
一颗棋子情况下的必胜教案是不存在的。
4. 两颗棋子情况下的策略让我们思考两颗棋子的情况。
这是另一种情况,也是我们将要重点讨论的。
在两颗棋子的情况下,玩家的策略将会有所不同。
我们可以通过列举所有可能的情况并分析每种情况来找到必胜的方案。
经过深入思考和数学分析,我们可以得出结论:当只有两颗棋子时,先手玩家只需取走一颗棋子,就能确保获得胜利。
这是一种简单而有效的策略,可以帮助玩家在最短的时间内找到必胜的方案。
5. 个人观点和总结轮流取棋子是一款考验玩家策略和智慧的游戏。
通过深入分析和思考,我们可以找到在不同情况下的必胜策略,并且这种分析和思考能力也能够应用到生活的各个方面。
在解决问题或应对挑战时,我们可以借鉴轮流取棋子的策略,从简单的情况开始,逐步思考,最终找到最优的解决方案。
结语轮流取棋子这款简单而有趣的游戏,深藏着许多策略和技巧。
通过深入的思考和分析,我们可以找到必胜的方案,并且这种分析能力也能够在生活中发挥巨大的作用。
希望大家在玩游戏的也能够从中受益,提升自己的思维能力和智慧。
6. 三颗棋子情况下的策略接下来,让我们继续深入探讨轮流取棋子游戏的策略。
组合博弈 取石子游戏.
博弈问题分析——取石子游戏实例解答<1>小红是个游戏迷,他和小蓝一起玩拿石子游戏。
游戏规则为2个人轮流拿石子。
一次可以拿1颗或3颗,规定谁取到最后一颗石子谁就胜出。
最后决定由小红先取。
两人都是游戏高手,该赢的绝不会输(表示不会失误)。
问在知道石子总数的情况下,怎样快速预测谁将会胜出。
分析:小红和小蓝各取一次共有三种情况:②共取走2颗石子(1,1)② 共取走4颗石子(1,3)③ 共取走6颗石子(3,3)设方案①取了N1次,方案②取了N2次,方案③取了N3次后,还剩下K(k<6,否则可以再取几轮,导致剩余量<6)个石子。
最后K的取值有三种情况:0,1,3。
这个要解释一下:剩下的石子个数总共有0,1,2,3,4,5几种可能,2可以再取一轮(1,1)剩下0,4可以再取一轮(1,3)或者两次(1,1)剩下0,5可以再取(1,1)、(1,3)等的组合剩下1或3个,所以综合是最终会剩下0、1、3三种可能。
设有石子S.则S=2*N1+4*N2+6*N3+K.其中2*N1+4*N2+6*N3=(1+1)*N1+(1+3)*N2+(3+3)*N3,说明取的过程为偶数次,所以剩下K时该最先取石子的人取。
K=1,3则先取方胜。
反之,另一方胜。
又2*N1+4*N2+6*N3=2*(N1+2*N2+3*N3)为偶数,所以S的奇偶性取决于K,当K为偶数时,后取方胜,反之,先取方胜。
总结:计算时可以先对6取余,如果余数为0、2、4,则K为0(偶数,后取者胜),如果余数为1、3、5则K为1或3(奇数,先取者剩)。
<2>有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。
两个人轮流从堆中取物体若干,规定最后取光物体者取胜。
这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。
下面我们来分析一下要如何才能够取胜。
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。
POJ取石子游戏(威佐夫博弈)
POJ取⽯⼦游戏(威佐夫博弈)取⽯⼦游戏Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)Total Submission(s) : 1 Accepted Submission(s) : 1Problem Description有两堆⽯⼦,数量任意,可以不同。
游戏开始由两个⼈轮流取⽯⼦。
游戏规定,每次有两种不同的取法,⼀是可以在任意的⼀堆中取⾛任意多的⽯⼦;⼆是可以在两堆中同时取⾛相同数量的⽯⼦。
最后把⽯⼦全部取完者为胜者。
现在给出初始的两堆⽯⼦的数⽬,如果轮到你先取,假设双⽅都采取最好的策略,问最后你是胜者还是败者。
Input输⼊包含若⼲⾏,表⽰若⼲种⽯⼦的初始情况,其中每⼀⾏包含两个⾮负整数a和b,表⽰两堆⽯⼦的数⽬,a和b都不⼤于1,000,000,000。
Output输出对应也有若⼲⾏,每⾏包含⼀个数字1或0,如果最后你是胜者,则为1,反之,则为0。
Sample Input2 18 44 7Sample Output1SourcePKU所谓威佐夫博弈,是ACM题中常见的组合游戏中的⼀种,⼤致上是这样的:有两堆⽯⼦,不妨先认为⼀堆有 10,另⼀堆有 15 个,双⽅轮流取⾛⼀些⽯⼦,合法的取法有如下两种:1、在⼀堆⽯⼦中取⾛任意多颗;2、在两堆⽯⼦中取⾛相同多的任意颗;约定取⾛最后⼀颗⽯⼦的⼈为赢家,求必胜策略。
两堆⽯头地位是⼀样的,我们⽤余下的⽯⼦数(a,b)来表⽰状态,并画在平⾯直⾓坐标系上。
和前⾯类似,(0,0)肯定是 P 态,⼜叫必败态。
(0,k),(k,0),(k,k)系列的节点肯定不是 P 态,⽽是必胜态,你⾯对这样的局⾯⼀定会胜,只要按照规则取⼀次就可以了。
再看 y = x 上⽅未被划去的格点,(1,2)是 P 态。
k > 2 时,(1,k)不是 P 态,⽐如你要是⾯对(1,3)的局⾯,你是有可能赢的。
博弈论原理与方法分析
绪论-几个典型模型
猜方
正面
猜硬币游戏
分析:
盖方
反面
正面
-1, 1
1, -1
反面
1, -1
-1, 1
在本博弈中,双方的利益是严格对立的,取
胜的关键是不能让另一方猜到自己的策略而
同时自己又要尽可能猜出对方的策略。
在一次博弈中结果取决于机会,在多次重复
中,如果双方决策都正确,则我们可求得平
and William F. Sharpe金融经济学原理。
1994年John Harsanyi, John F. Nash and
Reinhard es A. Mirrless and William Vickery
不对称信息条件下激励机制问题
绪论-博弈论的历史沿革
费效用最大化决策中的各种商品的购买量。根
据该集合是有限的还是无限的,可分为有限博
弈和无限博弈。
2001年Jeorge Akerlof、Michael Spence and
Joseph Stiglitz非对称信息市场分析
2002年丹尼尔·卡尼曼和弗农·史密斯心理和实
验经济学方面
2005年Thomas Schelling and Robert
Aumann合作博弈方面
博弈论在构成了微观经济学的基础性方法。
坦白”);
– 支付(payoffs):参与人在所选策略(策略组合,
the strategy profile)上的效用
例如如果A坦白,而B不坦白,A得0,B得-9
绪论-什么是博弈论
得益矩阵
列参与者
坦白
不坦白
巴什博奕规则范文
巴什博奕规则范文规则一:游戏的初始状态是一堆物品(通常用棋子或石头代表),这堆物品的数量可以是任意的,但不为零。
规则二:两名玩家轮流从这堆物品中拿走石子。
每次只能取1个、2个或3个石子。
规则三:玩家可以一次性取走全部石子。
但无法不取任何石子。
规则四:最后一颗石子被拿走的玩家即为输家。
以上就是巴什博弈的基本规则。
现在我们进一步深入了解一些关于巴什博弈的策略。
1.在巴什博弈中,理想的情况是由先手玩家决定。
如果初始状态的石子数量是4的倍数,那么先手玩家有一个必胜策略,即每次取走4-对手取走的石子数量。
这样无论对手怎么走,先手玩家总是可以使石子的数量维持在4的倍数,最终让对手取走最后一颗石子,从而获得胜利。
2.另一方面,如果初始状态的石子数量不是4的倍数,那么先手玩家没有必胜策略。
无论先手玩家怎么走,对手总是能够采取相同的策略使石子的数量保持4的倍数。
最终,对手取走最后一颗石子,先手玩家将输掉游戏。
3.当然,尽管先手玩家没有必胜的策略,但他仍可以利用一些策略尽量延长游戏的持续时间。
例如,假设初始石子数量是9,先手玩家可以选择取走2个石子。
这样一来,无论对手怎么走,先手玩家每次取走的石子数量都是对手所取石子数量的补数。
这样,游戏将持续下去,直到最后只剩下4个石子。
对手不得不取走最后4个石子,而先手玩家获得胜利。
4.上述策略可以简化为:无论初始石子数量是多少,先手玩家总是选择使得每次取走的石子数量加上对手所取石子数量等于4、这样,先手玩家可以确保自己始终处于有利位置。
巴什博弈是一个简单却有趣的博弈游戏,同时也是学习博弈论中一些基本概念和策略的良好起点。
通过深入理解博弈论和巴什博弈的规则和策略,我们可以在其他更复杂的博弈中更好地应用博弈论的原则。
东方博弈1213题解
东方博弈1213题解东方博弈是一种常见的思维训练游戏,也是数学中的一个经典问题。
今天我们来分析一道东方博弈的题目,题目编号为1213。
题目描述:有一堆石子,共有N个,两个人轮流从中取石子,每次可以取走1个、2个或3个石子,最后无法取石子的人视为失败者。
其中N是一个正整数。
要求:给定N,判断第一个取石子的人是否能够取胜。
解题思路:对于这道题目,我们可以使用递归的方法来解答。
首先,我们需要判断N的取值范围,因为如果N小于等于3时,无论第一个取石子的人如何取,最后都会取不到石子,所以第一个取石子的人必定失败。
因此,我们只需要考虑N 大于3时的情况。
接下来,我们可以观察到一个规律:当N为4的倍数时,无论第一个取石子的人如何取,最后都会剩下4个石子,轮到第二个人取时,无论取走几个,都会留下4个给第一个人,使得第一个人无法再取石子,最后第一个人失败。
当N不是4的倍数时,第一个取石子的人可以通过巧妙的策略来保证最后剩下4个石子给第二个人。
具体策略如下:1.第一个人取1个石子。
2.第二个人根据第一个人的取法,取相同的石子数量,使得石子的总数保持为偶数。
3.接下来,不论对手如何取石子,第一个人都可以保证剩下的石子总数为4的倍数。
因为第一个人取的数量与对手取的数量之和为3,所以第一个人取3个石子后,剩下的石子数量必定为4的倍数。
4.最后,当剩下4个石子时,无论对手如何取,第一个人都可以保证取到最后一个石子,从而获得胜利。
综上所述,对于这道题目,我们可以得出以下结论: - 当N是4的倍数时,第一个取石子的人必定失败。
- 当N不是4的倍数时,第一个取石子的人必定获得胜利。
总结:东方博弈1213题是一道经典的思维训练题,通过观察和分析石子的数量,我们可以找到一种巧妙的策略来保证第一个取石子的人获得胜利。
这道题目可以锻炼我们的逻辑思维能力和数学分析能力。
希望本文对你理解和解答东方博弈1213题有所帮助。
如果你对东方博弈和其他数学题目感兴趣,欢迎继续探索和学习。
博弈-由感性认识到理性认识
由感性认识到理性认识——透析一类搏弈游戏的解答过程一、游戏 (2)二、从简单入手 (2)三、类比与联想 (6)四、证明 (8)五、推广 (11)六、精华 (12)七、结论 (16)八、总结 (17)一、游戏游戏A:甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定。
例如图1所示的初始局面:共n=3堆,其中第一堆的石子数a1=3,第二堆石子数a2=3,第三堆石子数a3=1。
两人轮流按下列规则取走一些石子,游戏的规则如下: 每一步应取走至少一枚石子;每一步只能从某一堆中取走部分或全部石子;如果谁无法按规则取子,谁就是输家。
图 1 游戏的一个初始局面游戏B:甲乙双方事先约定一个数m,并且每次取石子的数目不能超过m个;其余规则同游戏A。
我们关心的是,对于一个初始局面,究竟是先行者(甲)有必胜策略,还是后行者(乙)有必胜策略。
下面,我们从简单入手,先来研究研究这个游戏的一些性质。
二、从简单入手☞用一个n元组(a1, a2, …, a n),来描述游戏过程中的一个局面。
☝可以用3元组(3, 3, 1)来描述图1所示的局面。
改变这个n元组中数的顺序,仍然代表同一个局面。
☝(3, 3, 1)和(1, 3, 3),可以看作是同一个局面。
如果初始局面只有一堆石子,则甲有必胜策略。
甲可以一次把这一堆石子全部取完,这样乙就无石子可取了。
如果初始局面有两堆石子,而且这两堆石子的数目相等,则乙有必胜策略。
因为有两堆石子,所以甲无法一次取完;如果甲在一堆中取若干石子,乙便在另一堆中取同样数目的石子;根据对称性,在甲取了石子之后,乙总有石子可取;石子总数一直在减少,最后必定是甲无石子可取。
☝对于初始局面(1),甲有必胜策略,而初始局面(3, 3),乙有必胜策略。
☞局面的加法:(a1, a2, …, a n) + (b1, b2, …, b m) = (a1, a2, …, a n, b1, b2, …, b m)。
☝(3) + (3) + (1) = (3, 3) + (1) = (3, 3, 1)。
取棋子必胜策略教案
《取棋子问题》讲题比赛讲稿有两堆棋子,黑子8颗、白子15颗。
现甲、乙两人轮流取棋子。
每次取棋的规则是:若一次只取一种颜色,则可取任意颗;若一次取两种颜色,则两种颜色取的颗数必须相等。
请研究这个游戏的获胜策略。
一、选题背景本题涉及到我国古代的博弈论思想。
Nim game(尼姆博弈)和Wythoff’s (威佐夫博弈)都是博弈论中典型的“双人动态”最优博弈,本题属于Wythoff Game(威佐夫博弈)的一个典型例题。
二、获胜规则Normol规则:谁最后取,谁胜。
Misère 规则:谁最后取,谁输。
此题,我们主要研究Normol规则。
三、题目分析1、难点:过程抽象,可能性很多,较难找到规律。
2、重点:找到必胜的局面。
四、思路分析1、倒推法,即从最后的结果出发。
2、排除法,逐步删去必败局面。
五、解法分析1、根据题意,甲不能留下以下2种局面:(1)只剩一种颜色的棋子(0,n)(2)剩余的不同颜色的棋子数目相同(n,n)这里的n表示黑子或白子。
可排除以下局面。
2、根据倒推法,讨论(1,2)。
甲留下(1,2)给乙,不管乙如何取,甲都可以获胜。
必胜局面(1,2)。
其实甲、乙双方,只要谁将(1,2)留给对方,谁就必胜。
3、讨论甲留下的局面含有1和2的局面。
如果甲留下(1,3)给乙,乙可取走3颗中的1颗,留下(1,2)的局面给甲,此时甲不能获胜。
(1,4)…(1,15)同样的道理。
如果甲留下(2,3)给乙,乙可取走3颗里面的2颗,留下(1,2)的局面给甲,此时甲不能获胜。
(2,4)…(2,15)同样的道理。
规律一:留下的局面不能重复必胜局面中的数字。
根据此规律可排除以下局面。
4、讨论(3,4)局面(3,4)的棋子之差与必胜局面(1,2)的相同,如果甲留下(3,4)这种局面,乙可在两边同时取走2颗,留下(1,2)的局面给甲,甲不能获胜。
规律二:留下的局面中两棋子数目之差不能与必胜局面相同。
根据此规律课排除以下局面。
Nim游戏-博弈论
1
等”,而且这两种状态之间存在某种依赖关系,从而能给某个玩家的必胜制造 了契机。 我们不妨设这两个状态分别为“V状态”和“L状态”,那么这两个状态必然满 足以下关系: 条件1 目标状态p ∈V , 无论如何操作V 状态都会变成L状态, 条件2 一定存在某种操作使得状态L能变成状态V, 条件3 譬如在n=2的时候V状态就是两堆相等,L状态就是两堆不相等。目标状态是两 堆均为0,是V状态中的一种(条件1)。如果两堆相等,从一堆中取出一些石 子,两堆必然不等。(条件2) 如果两堆的石子不等,可以从多的一堆中取出两 堆的差值,使两堆相等(条件3)。 这两种状态之间的逻辑关系如下图所示:
浅析Nim游戏
武钢三中 吴豪
一、引言 Nim游戏是一个非常经典的组合游戏,它具有很强的趣味性与数学性,而且其 解法也蕴含了一些比较具有启发性的思维方式。在本文中,我们将探讨Nim游 戏中渗透的一些数学思想。希望读者通过本文,能对Nim游戏有更加深入的认 识,并能对其中的数学思想有进一步的体会。
二、Nim游戏 Nim游戏是一个由两个玩家轮流进行的游戏:一开始,有n堆硬币,每堆分别 有p1, p2, ..., pn 枚硬币。每个回合,玩家都可以选择一堆硬币,并从中取走k枚 硬币(1 k ni ),取完最后一枚硬币的玩家获得胜利。试问,对于先手玩家是 否有必胜策略?
四、结论的抽象与泛化 在前一部分,我们分析了Nim游戏在n=2时的规律与策略。但仅凭这个特例的 结论,还不足以解决一般的Nim游戏。因此,在这里,我们需要对原结论进行 进一步抽象与泛化,来给一般Nim游戏的解决提供切入点。我们不难注意到, 必胜判定的关键在于“状态”,例如在n=2时,这个状态就是“相等”与“不相
该二进制数与各位剩余’1’的数目如下: b1 , b2 , b3 , ..., bm−1 , bm a1 , b1 , a2 , b2 , ..., am , bm 从pi 中取出一些石子,则其对应二进制数中必然存在一位bj 的值发生变化(否则 没取),那么该位上的数字和由(aj − bj ) + bj = aj 变 为(aj − bj )+(1 − bj )=aj +1−2bj 。因为取之前是V状态,有aj 是偶数,故取走 之后该位数字和aj + 1 − 2bj 是奇数,转变成了L状态。因此无论玩家如何操 作,V状态都只能转移到L状态。 接着来看条件3: 对于上述二进制数,由于当前是L状态,我们可以选择一个最高的和为奇数的 数位j,然后任意选择一堆该位为1的石子堆i,把这一位上的1改为0,接着对于 低位,无论怎么改,都比原数小,因此我们一定可以通过调整低位使得每一位上 的数字和均为偶数,所以我们一定可以通过取出一些石子,从L状态转移到V状 态。 至此,我们已经说明了这种猜想的完备性。因此我们可以认为对于一般Nim问 题,其必胜的判定,可以以石子数在二进制中每一位上1的个数的奇偶性为依 据。 我们可以把Nim游戏的结论表述如下: 对于n堆石子p1 , p2 ...pn 1. 若p1 xor p2 xor ... pn = 0 (二进制每一位上的数字和是偶数),那么后手必 胜。 2. 否则先手必胜。
取子游戏_博弈简单分析
一局游戏在两个游戏人之间如下交替进行:游戏从一空堆开始。
当轮到一个游戏人时,他可以往堆中加进1,2,3或4枚硬币。
往堆中加进第100枚硬币的游戏人为得胜者。
确定在这局游戏中是游戏人A还是游戏人B能够确保取胜。
取胜的策略是什么?在学术论坛有博士家园,组合图论论坛确保取足5个硬币即可例题:两个人玩移火柴的游戏,桌子上有1000根火柴,每个人每次可以拿走1-7根火柴,拿走桌子上最后那根火柴的算输,问第一个人第一次要拿多少根火柴才能保证赢7根。
以后对方拿几根,你都要拿够凑足8根的数。
1000根和8根性质是一样的。
从抢30到NIM游戏的取胜策略(一)倒推法抢30是我国民间的一个两人游戏,具有很强的对抗性和娱乐性。
抢30游戏通常有两种玩法。
(1)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。
(2)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,同时把两个人报出的所有数累加,谁先使这个累加数最先达到30,谁就为胜方。
解决最个问题的一般策略是用倒推法。
以(1)为例,要抢到30,必须抢到27;要抢到27,必须抢到24。
如此倒推回去,可得到一系列关键数30、27、24、21、18、……9、6、3。
根据以上分析,抢30游戏本身并不是一个公平的游戏,初始数和先后顺序已经决定了最后的结果,因为只有后报数者才能抢到3的倍数,后报数者有必胜策略。
(二)关键因子所有这些关键数都是3的倍数。
3是两个报数者年内能够报出的最大数与最小数的和。
在类似游戏中,我们把游戏者所能用到的最大数和最小数之和称之为关键因子k,关键数就是k的倍数.。
在抢30的游戏中,关键因子k等于3。
又例如,抢100报数游戏中,如果每人可报数为1至9个连续的自然数,谁先报到100谁就是胜利者。
这里的关键因子k就是可报最大数9和可报最小数1的和,即k=10。
报数获胜的策略就是:(1)让对方先报数;(2)每次报数为关键因子减去对方所报数。
博弈论略解——精选推荐
博弈论略解博弈论我们把动物利⽤⼤⾃然移动的瘾魂,在决策⼈期待的空间⾥,形成三维均衡的语⽂学理论,称为博弈论。
博弈论是⼆⼈在平等的对局中各⾃利⽤对⽅的策略变换⾃⼰的对抗策略,达到取胜的⽬的。
题⽬描述有⼀种有趣的游戏,玩法如下:玩家: ⼈;道具: 颗⽯⼦;规则:游戏双⽅轮流取⽯⼦;每⼈每次取⾛若⼲颗⽯⼦(最少取 颗,最多取 颗);⽯⼦取光,则游戏结束;最后取⽯⼦的⼀⽅为胜。
假如参与游戏的玩家都⾮常聪明,问最后谁会获胜?输⼊格式输⼊仅⼀⾏,两个整数 和 。
输出格式输出仅⼀⾏,⼀个整数,若先⼿获胜输出 ,后⼿获胜输出 。
样例输⼊23 3样例输出1数据范围与提⽰对于全部数据,。
依题意得,在⽯⼦⾜量时,每次可以取的数量为集合中的任⼀元素。
不难发现,⾸末第 对数之和、⾸末第 对数之和、,它们的值都相等且都等于 。
所以,对于后⼿玩家取的⽯头数,先⼿玩家总有⼀种取法使先后⼿玩家⼀回合内取的⽯头总和为 。
所以,第⼀回合先⼿只需要将⽯头取⾄ 的倍数,就⼀定能取到最后⼀颗⽯头。
#include <cstdio>#include <cstdlib>#include <cstring>#define reg registerint n,k;int main (){scanf ("%d%d",&n,&k);printf ((n %(k +1))?"1":"2");}题⽬描述有⼀种有趣的游戏,玩法如下:玩家: ⼈;道具: 堆⽯⼦,每堆⽯⼦的数量分别为 ;规则:N 1K N K 121≤K ≤N ≤105Solution 10241A ={1,2,3,...,K −2,K −1,K }12⋅⋅⋅K +1K +1K +1N X ,X ,⋅⋅⋅,X 12n1. 游戏双⽅轮流取⽯⼦;2. 每⼈每次选⼀堆⽯⼦,并从中取⾛若⼲颗⽯⼦(⾄少取 颗);3. 所有⽯⼦被取完,则游戏结束;4. 如果轮到某⼈取时已没有⽯⼦可取,那此⼈算负。
博弈游戏汇总
博弈游戏汇总1、巴什博弈⼀堆⽯⼦,有n个,两个⼈轮流取,每次⾄少取1个,⾄多取m个,拿⾛最后⼀个⽯⼦的⼈获胜假设⼀堆⽯⼦有 n=m+1 由于⼀次只能取m个,⽆论先⼿取多少个,后⼿总能拿⾛剩余的,这时⼀定是先⼿负于是找到取胜规则:⼀对⽯⼦ n=(m+1)*r+s对于先⼿应该先取⾛s个,设后⼿取⾛k个,先⼿再取⾛ m+1-k 剩余的⽯⼦个数为 (m+1)(r-1) 以后保持这样的取法,先取者获胜总之,就是要留给对⼿ m+1的倍数可以归结为: s=0时,后⼿胜s<>0时,先⼿胜2、简单的⽯⼦游戏有n堆⽯⼦,每次⾄少取⼀根,⾄多拿⾛整堆,两⼈轮流拿,每次限拿其中⼀堆,取⾛最后⼀根的获胜。
1902年获胜策略已由美国数学家C.L.Bouton分析完成,⽤到的是⼆进制和平衡状态概念。
其结论是:对于n堆⽯⼦,第i (1<=i<=n)堆⽯⼦的个数是Xi,该状态为必败状态当且仅当 X1 XOR X2 XOR……Xn=0。
看个例⼦:有4堆⽯⼦,数量分别为:7 9 12 15⼆进制形式为0111100111001111异或结果为:11011101^1001=0100=4 可以从第⼆堆拿⾛5个1101^1100=0001=1 也可以从第三堆拿⾛11个1101^1111=0010=2 或者从第四堆取⾛13个给定N堆⽯⼦,两⼈轮流取⽯⼦,必须先取完⼀堆⽯⼦才能取另⼀堆,⽽且另⼀堆⽯⼦的个数必须⽐之前取的那⼀堆⼩,每次只能取1个或者质数个⽯⼦。
如果没有⽯⼦可以取了,那么他就输了。
问先⼿是否有必胜策略。
其实对于这个游戏,我们只需要判断第⼀堆⽯⼦即可,也就是⽯⼦数⽬最少的那⼀堆代码:#include<iostream>#include<algorithm>#include<math.h>using namespace std;int isprime(int n){int s=(int)sqrt(n);if(n==1) return1;for(int i=2;i<=s;i++){if(n%i==0)return0;break;}return1;}int main(){int n,a[100000],x,i,j,t;while(cin>>n){for( i=0;i<n;i++)cin>>a[i]; //每堆⽯⼦的数⽬sort(a,a+n);for(j=1;j<=a[0];j++){if(isprime(j)&&j<=a[0])a[0]=a[0]-j;x=0;for(t=0;t<n;t++)cout<<"yes"<<endl;break;}elsea[0]=a[0]+j; //恢复⽯⼦数⽬}if(x!=0)cout<<"no"<<endl;}return0;}View Code3、Nim游戏有n堆⽯⼦,每堆⽯⼦的数量为 x1, x2, x3,x4......xn。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一局游戏在两个游戏人之间如下交替进行:游戏从一空堆开始。
当轮到一个游戏人时,他可以往堆中加进1,2,3或4枚硬币。
往堆中加进第100枚硬币的游戏人为得胜者。
确定在这局游戏中是游戏人A还是游戏人B能够确保取胜。
取胜的策略是什么?在学术论坛有博士家园,组合图论论坛确保取足5个硬币即可例题:两个人玩移火柴的游戏,桌子上有1000根火柴,每个人每次可以拿走1-7根火柴,拿走桌子上最后那根火柴的算输,问第一个人第一次要拿多少根火柴才能保证赢7根。
以后对方拿几根,你都要拿够凑足8根的数。
1000根和8根性质是一样的。
从抢30到NIM游戏的取胜策略(一)倒推法抢30是我国民间的一个两人游戏,具有很强的对抗性和娱乐性。
抢30游戏通常有两种玩法。
(1)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。
(2)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,同时把两个人报出的所有数累加,谁先使这个累加数最先达到30,谁就为胜方。
解决最个问题的一般策略是用倒推法。
以(1)为例,要抢到30,必须抢到27;要抢到27,必须抢到24。
如此倒推回去,可得到一系列关键数30、27、24、21、18、……9、6、3。
根据以上分析,抢30游戏本身并不是一个公平的游戏,初始数和先后顺序已经决定了最后的结果,因为只有后报数者才能抢到3的倍数,后报数者有必胜策略。
(二)关键因子所有这些关键数都是3的倍数。
3是两个报数者年内能够报出的最大数与最小数的和。
在类似游戏中,我们把游戏者所能用到的最大数和最小数之和称之为关键因子k,关键数就是k的倍数.。
在抢30的游戏中,关键因子k等于3。
又例如,抢100报数游戏中,如果每人可报数为1至9个连续的自然数,谁先报到100谁就是胜利者。
这里的关键因子k就是可报最大数9和可报最小数1的和,即k=10。
报数获胜的策略就是:(1)让对方先报数;(2)每次报数为关键因子减去对方所报数。
这样自己每次所报数都是关键数。
如果对方一定要先报,你只能期待对方不懂策略或者大意出错了。
(三)不平衡因子在上述的抢30或者抢100的游戏中,最后数30是关键因子3的整数倍,最后数100是关键因子10的整数倍。
我们可以把这样的游戏称为平衡游戏,也就是最后报数与关键因子相除余数为0。
如果最后报数与关键因子相除有余数,这个游戏就可以称为不平衡游戏,其余数就是不平衡因子。
抢数不平衡游戏也是不公平的游戏,先报数者有必胜策略。
先报数者的获胜策略就是先消除不平衡因子,使其变成一个平衡游戏,先报数者随后就成为平衡游戏的后报数者。
例如,在抢30游戏中,两人从1开始轮流报数,每人每次可报1到3个连续的数,谁先报到30,谁就为胜方。
在这里,关键因子是4,不平衡因子是2。
又例如,抢100报数游戏中,如果每人可报数为1至10个连续的自然数,谁先报到100谁就是胜利者。
在这里,关键因子是11,不平衡因子是1。
在不平衡游戏中,如果先报数者不懂得游戏策略,懂得这个策略的后报数者需要不断计算不平衡因子,以便最后获胜。
(四)更多例子报数游戏里的最后数都是些比较小的数,因此用倒推法比较容易得到策略。
当我们把数变得大一些的时候,就变成了小学奥赛题。
如果掌握上述讨论中的关键因子和不平衡因子的计算,奥数题也变得迎刃而解了。
下面就是两个奥数例题。
(1)2008个空格子排成一排,第一格放有一个棋子。
两人做游戏,轮流移动这枚棋子。
每个人每次可前移1到5个格子,谁先把棋子移到最后一格,谁就是获胜者。
问怎样的策略才能保证获胜。
(2)桌上放着一堆火柴,共有5000根。
两个人轮流从中取火柴,每人每次取的火柴根数为1到8根,谁取了最后一根谁就输。
问怎样的策略才能保证获胜。
(五)进一步扩展到NIM游戏抢30的游戏是中国NIM游戏(也叫筹码游戏)的一种特例。
NIM游戏的一种经典表述为:有n堆火柴,每堆各有若干根。
两人轮流取出火柴,每次取出的根数不限但至少取1根,每次也只能从1堆里取火柴。
谁最后把火柴取完,谁就是获胜者。
问如何才能保证获胜。
获胜策略已由美国数学家C.L.Bouton分析完成,用到的是二进制和平衡状态概念。
其结论是:如果一开始火柴的总根数转化成二进制后各位数上的数字和都是偶数时,则是平衡状态,后取者必胜。
最简单的平衡态是(1,1),即2堆火柴,每堆各1根。
如果开始时火柴的状态处于不平衡状态,先取者必胜,其策略是取完后使火柴根数保持为平衡状态。
最简单的不平衡态是(1),即1根火柴。
例如,2堆火柴数都为2根,二进制记为(10,10),各位数之和为20,这是一个平衡态,则后取者必胜。
3堆火柴数分别为1根、2根、1根,二进制记为(1,10,1),各位数之和为12,这不是一个平衡态。
先取者先取掉中间一堆2根火柴,变成平衡状态(1,1),则先取者必胜。
下面的一道例题,可以用来练习NIM游戏的上述策略:有3堆火柴,根数分别为12、9、6.。
甲乙两人轮番从其中一堆中取出1根或几根火柴,取到最后一根者获胜。
先取者还是后取者有必胜策略,如何取胜?Nim游戏Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。
满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在(一般而言)有限的合法移动集合中任选一种进行移动;3、对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其它什么因素;4、如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这名选手负。
根据这个定义,很多日常的游戏并非ICG。
例如象棋就不满足条件3,因为红方只能移动红子,黑方只能移动黑子,合法的移动集合取决于轮到哪名选手操作。
通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
这游戏看上去有点复杂,先从简单情况开始研究吧。
如果轮到你的时候,只剩下一堆石子,那么此时的必胜策略肯定是把这堆石子全部拿完一颗也不给对手剩,然后对手就输了。
如果剩下两堆不相等的石子,必胜策略是通过取多的一堆的石子将两堆石子变得相等,以后如果对手在某一堆里拿若干颗,你就可以在另一堆中拿同样多的颗数,直至胜利。
如果你面对的是两堆相等的石子,那么此时你是没有任何必胜策略的,反而对手可以遵循上面的策略保证必胜。
如果是三堆石子……好像已经很难分析了,看来我们必须要借助一些其它好用的(最好是程式化的)分析方法了,或者说,我们最好能够设计出一种在有必胜策略时就能找到必胜策略的算法。
定义P-position和N-position,其中P代表Previous,N代表Next。
直观的说,上一次move的人有必胜策略的局面是P-position,也就是“后手可保证必胜”或者“先手必败”,现在轮到move的人有必胜策略的局面是N-position,也就是“先手可保证必胜”。
更严谨的定义是:1.无法进行任何移动的局面(也就是terminal position)是P-position;2.可以移动到P-position的局面是N-position;3.所有移动都导致N-position的局面是P-position。
按照这个定义,如果局面不可能重现,或者说positions的集合可以进行拓扑排序,那么每个position或者是P-position或者是N-position,而且可以通过定义计算出来。
以Nim游戏为例来进行一下计算。
比如说我刚才说当只有两堆石子且两堆石子数量相等时后手有必胜策略,也就是这是一个P-position,下面我们依靠定义证明一下(3,3)是一个P是一个P是一个P-position。
首先(3,3)的子局面(也就是通过合法移动可以导致的局面)有(0,3)(1,3)(2,3)(显然交换石子堆的位置不影响其性质,所以把(x,y)和(y,x)看成同一种局面),只需要计算出这三种局面的性质就可以了。
(0,3)的子局面有(0,0)、(0,1)、(0,2),其中(0,0)显然是P-position,所以(0,3)是N-position (只要找到一个是P-position的子局面就能说明是N-position)。
(1,3)的后继中(1,1)是P-position(因为(1,1)的唯一子局面(0,1)是N-position),所以(1,3)也是N-position。
同样可以证明(2,3)是N-position。
所以(3,3)的所有子局面都是N-position,它就是P-position。
通过一点简单的数学归纳,可以严格的证明“有两堆石子时的局面是P-position当且仅当这两堆石子的数目相等”。
根据上面这个过程,可以得到一个递归的算法——对于当前的局面,递归计算它的所有子局面的性质,如果存在某个子局面是P-position,那么向这个子局面的移动就是必胜策略。
当然,可能你已经敏锐地看出有大量的重叠子问题,所以可以用DP 或者记忆化搜索的方法以提高效率。
但问题是,利用这个算法,对于某个Nim游戏的局面(a1,a2,...,an)来说,要想判断它的性质以及找出必胜策略,需要计算O(a1*a2*...*an)个局面的性质,不管怎样记忆化都无法降低这个时间复杂度。
所以我们需要更高效的判断Nim游戏的局面的性质的方法。
直接说结论好了。
(Bouton's Theorem)对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示异或(xor)运算。
怎么样,是不是很神奇?我看到它的时候也觉得很神奇,完全没有道理的和异或运算扯上了关系。
但这个定理的证明却也不复杂,基本上就是按照两种position的证明来的。
根据定义,证明一种判断position的性质的方法的正确性,只需证明三个命题:1、这个判断将所有terminal position判为P-position;2、根据这个判断被判为N-position的局面一定可以移动到某个P-position;3、根据这个判断被判为P-position 的局面无法移动到某个P-position。
第一个命题显然,terminal position只有一个,就是全0,异或仍然是0。
第二个命题,对于某个局面(a1,a2,...,an),若a1^a2^...^an!=0,一定存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。