取石子游戏完全揭秘
- 格式:doc
- 大小:156.50 KB
- 文档页数:18
取石子游戏
取石子游戏是一种经典的策略游戏,通常由两名玩家轮流进行。
游戏开始时,一堆石子被放在桌子上。
每个玩家在自己的回合中可以选择取走一定数量的石子,但不能取走超过规定的最大数量。
目标是在游戏结束时,取走最后一个石子的玩家获胜。
以下是一种常见的取石子游戏规则:
1. 游戏开始时,一堆石子被放在桌子上。
2. 两名玩家轮流进行,每个玩家在自己的回合中可以选择取走1到M个石子,其中M为规定的最大数量。
3. 玩家必须至少取走1个石子,但不能超过M个石子。
4. 最后一个石子被取走的玩家获胜。
游戏的策略通常是基于数学原理和对对手的预测。
在某些特定的游戏规则下,可以使用数学公式来计算最优策略。
例如,在一堆有N个石子的游戏中,如果规定每个玩家最多可以取走M个石子,那么可以使用以下公式来计算最优策略:
1. 如果N%(M+1)等于0,那么第一个玩家将会输掉游戏。
2. 否则,第一个玩家可以选择取走N%(M+1)个石子,然后无论第二个玩家取走多少个石子,第一个玩家总是可以以同样的方式回应,直到最后一个石子被取走。
这个公式可以帮助玩家计算出在给定规则下的最优策略,从而提高胜利的机会。
需要注意的是,取石子游戏有很多种不同的规则和变体,上述的规则只是其中一种常见的形式。
具体的规则可能会有所不同,所以在参与游戏之前最好明确规定好游戏的规则。
捡石子游戏玩法讲解教案一、游戏背景。
捡石子游戏是一种古老的游戏,可以锻炼孩子的动手能力、思维能力和团队合作能力。
这个游戏简单易学,适合各个年龄段的孩子参与。
二、游戏准备。
1. 石子,准备一些小石子,可以在户外找到,也可以购买。
2. 场地,选择一个平坦的场地进行游戏,可以是室内也可以是室外。
3. 篮子或容器,准备几个篮子或容器,用来放置捡到的石子。
三、游戏规则。
1. 确定捡石子的数量,首先确定每个队伍或者每个孩子要捡的石子数量,可以根据参与者的年龄和能力来确定。
2. 分组,将参与者分成若干个小组,每个小组至少有两个人。
3. 开始游戏,在游戏开始之前,每个小组站在起点,准备好捡石子的篮子或容器。
然后在场地上撒下一定数量的石子。
4. 捡石子,一声令下,孩子们开始捡起场地上的石子,放入自己的篮子或容器中。
5. 计分,游戏结束后,每个小组的石子数量进行统计,数量最多的小组获胜。
四、游戏注意事项。
1. 安全第一,在游戏过程中,要注意孩子的安全,避免发生摔倒或者碰撞的情况。
2. 石子大小,为了避免孩子受伤,建议选择一些较小的石子,避免使用尖锐的石子。
3. 观察游戏,在游戏过程中,要时刻观察孩子的情况,及时指导和帮助他们。
五、游戏扩展。
1. 增加难度,随着孩子们的能力增强,可以逐渐增加捡石子的数量,或者增加一些障碍物,增加游戏的难度。
2. 创新玩法,可以在捡石子的基础上,引入一些新的元素,比如规定捡石子的方式、增加一些特殊规则等,让游戏更加有趣。
六、游戏收获。
1. 锻炼动手能力,捡石子游戏可以让孩子们锻炼手部的灵活性和协调能力,提高他们的动手能力。
2. 培养思维能力,在捡石子的过程中,孩子们需要根据场地上的石子分布情况,灵活地选择捡取的顺序和方式,培养他们的思维能力。
3. 提高团队合作能力,在小组游戏中,孩子们需要相互配合,共同完成任务,这可以提高他们的团队合作能力和沟通能力。
七、总结。
捡石子游戏是一种简单而有趣的游戏,可以在家庭、学校或者其他场所进行。
取石子游戏完全揭秘由感性认识到理性认识一、游戏 (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)。
取石子游戏详细解答取石子游戏(取石子游戏)现有 5 堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。
甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?最佳答案这是数论中的最优策略问题,没有平均数原理。
我好好想想再给你答案。
要上班了,下班继续思考……(时间不多,才回复,见谅)1. 从50中取走32粒剩余18粒是正确的。
2. 算法:从其中一堆中取n个,使得剩余的所有数目正好是“必负局(此时先取必输的局面)”。
3. 所谓“必负局”是指把剩余的每一堆的数目都转化成二进制的数,然后把它们相加,规定做不进位的加法(也就是异或运算),即0+0=0,1+0=0,0+1=1,1+1=0(不进位),如果所得和是0(多个0),那么此种局势称为“必负局”。
4. “必负局”原理:一个“必负局”,一次改动任何一个数,都将不再是“必负局”,同时,任何一个“非必负局”,通过正确地减少某个数,一定能变成“必负局”,并且这种操作是唯一的。
设想现在是“必负局”,假如你先取,势必把其中的某个数的1改成了0,0改成了1,一定不再是“必负局”了,而我一定可以在把它变会“必负局”。
其实这样的局势,相当于偶数,你取了,必定有对应我取的,所以我一定拿到最后一个。
简单的想,考虑只有两堆,那么如果原来不相等,那就是“非必负局”,先取者有必胜方式,只要取多的一堆使得两堆相等,之后你取几个,我就从另一堆取几个。
5. 应用:(也许格式会改变)19 0100117 0001115 0001013 000011010010 (18)10也就是,还要18才能变成“必负局”,所以50-18=32所以第1次只能在第5堆石子中取32粒,使得取出32粒后为“必负局”,即异或运算结果为0。
对于只有两堆的只要取完后保证两堆的数目相同就能赢了0 :00000 6 :001106 :00110 第二人在第一堆中取走3个: 0 :00000 3 :00011 6 :00110 第一人也在第二堆中取走3个: 0 :00000 3 :00011 3 :00011 知道第二人会必输了吧不妨第二人取走第一堆吧,变成: 0 :00000 0 :00000 3 :00011 第一人取走最后一堆: 0 :00000 0 :00000 0 :00000 第一人胜! 如: 17 :100018 :010009 :01001 第一列的和不为偶数(1+0+0=1) 第一步: 第一人在第一堆中取走16个变成 1 :00001 8 :01000 9 :01001 第二人取,不论怎么取,都会使某一列的和不为偶数,如: 1 :00001 6 :00110 9 :01001 第一人现在在9中取走2个变成:1 :00001 6 :00110 7 :00111 第二人不妨取走第一堆变成0 :00000 6 :00110 7 :00111 别讲那么说专业术语嘛看这个行不行把每堆的数目用二进制表示每行一个写成一列(多少堆就多少行) 右对齐,左边不足的补0,保证每个二进制数有相同的位数然后取子取完后保证二进制数每一位所对应的那一列的和是偶数即可如果一开始就已满足每列的和都是偶数,那第一个取的人就必输无疑其实如果游戏人双方都知道了这个规律,那这个游戏的输赢就在于谁先走,也就没有意思了。
博弈问题分析——取石子游戏实例解答<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个。
博弈论取石子问题
博弈论取石子问题是一类经典的博弈问题,也被称为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个。
分析:若先取的把只有一个的一堆取完,则变成上篇中的第二种情况,后取的赢;若先取的从两个的一堆中取一个,则后取的把三个的一堆取完,变成第一种情况,后取的赢;若先取的把两个的一堆取完,变成上篇中的第二种情况,还是后取的赢。
先取的从三个的一堆中取,不论取几个,用同样的方法进行分析,后取的都有办法赢。
所以,先取的不论如何取法,后取的都有应对之策保证必赢。
一、有三堆石子,个数分别是1、3、4个。
分析:先取的只要从4个一堆中取出2个,就变成上篇中的第四种情况,所以先取的必赢。
二、有三堆石子,个数分别是1、4、5个。
分析:若先取的把只有一个的一堆取完,则变成上篇中的第二种情况,后取的赢;若先取的从4个的一堆中取一个,则后取的从5个的一堆中取3个,变成上篇中的第四种情况,后取的赢;其他情况不论先取的从4个或5个的一堆中取几个,后取的都有应对之策取胜;所以,后取的必赢。
三、有三堆石子,个数分别是1、5、6个。
分析:先取的只要从6个一堆中取出2个,就变成第二种情况,所以先取的必赢。
四、有三堆石子,个数分别是1、6、7个。
分析:若先取的把只有一个的一堆取完,则变成上篇中的第二种情况,后取的赢;若先取的从6个的一堆中取一个,则后取的从7个的一堆中取3个,变成第二种情况,后取的赢;其他情况不论先取的从6个或7个的一堆中取几个,后取的都有应对之策取胜;所以,后取的必赢。
五、有三堆石子,个数分别是1、7、8个。
分析:先取的只要从8个一堆中取出2个,就变成第四种情况,所以先取的必赢。
根据以上五种情况可以得出:三堆石子中有一堆是1个,其他两堆的个数是相邻数的输赢规律及取胜策略是:石子个数在中间的数若是偶数,先取的必输,因为先取的不论怎么取都会使后取的有机会找到取后最终出现两堆石子个数相同的情况,所以先取的必输;石子个数在中间的数若是奇数,先取的必赢,因为先取的只要从个数最多的一堆中取出2个就变成上一种情况,所以先取的必赢。
取⽯⼦游戏的策略及其应⽤有⼀种很有意思的游戏,就是有物体若⼲堆,可以是⽯⼦或是围棋⼦等等均可。
两个⼈轮流从堆中取物体若⼲,规定最后取光物体者取胜。
取⽯⼦游戏是我国民间流传已久的⼀种博奕,在国外亦称Nim游戏。
别看这游戏极其简单,却蕴含着深刻的道理。
下⾯我们来分析⼀下要如何才能够取胜。
游戏Ⅰ有若⼲堆任意数⽬的⼩⽯⼦{a1,a2,…,a m}(m≥1),两⼈轮流取⽯⼦,每⼈每次可以从其中任意⼀堆中取,每次可以取1、2、3、……或k(1≤k≤ min{a1,a2,…,a m})颗⽯⼦,把⽯⼦取完的⼈为胜者。
采⽤符号{a1,a2,…,a m;k}来代表游戏Ⅰ中⼩⽯⼦的初始状况和限制条件,⼀个⼈取⼀次⽯⼦实际上就是把{a1,a2,…,am;k}中某个分量ai(1≤i≤m)减⼩为ai′,即{a1,a2,…,ai,…,a m;k}—→{a1,a2,…,ai′,…,a m;k}(0≤a i<a i),我们把这种取⼀次⽯⼦使数组发⽣的变换称为T变换,根据现成博奕论先驱冯·诺伊曼(VonNeumann)的“完全确定信息游戏必定存在⼀种确定的获胜策略”的经典理论,要么对先取者存在某种取法,即某个T变换,⽆论后取者如何取,先取者总有相应对策,直⾄最终取得胜利;要么⽆论先取者如何取,后取者可以找到某种T变换,保证后取者总有相应策略获胜。
为了解决游戏{a1,a2,…,am;k}的对策,我们先看⼀个简单的例⼦。
例1 桌上放着⼀堆⼩⽯⼦⼀共100颗,两⼈(甲、⼄)轮流取,每次可以取1⾄10颗,取完的⼈为胜者,怎样才能取胜?分析这个问题实际上是取⽯⼦游戏的特殊情形{100;10},我们利⽤倒推法:容易看出11是取胜的关键数学,因为到此时,不论对⽅(甲)取多少颗(⼤于0且⼩于11),总留下⼤于0且⼩于11颗⽯⼦,这样⼄⽅⼀次取完即获得胜利。
同样地分析,要取到11必须取到22,33,44,55,66,77,88,99,这样我们就知道了获胜之道:①先取1颗⽯⼦,留下99颗,然后对⽅取a(1≤a≤10)颗,⼰⽅取(11—a)颗,就总能掌握这种致胜的关键数,从⽽确保获胜。
由感性认识到理性认识一、游戏 (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)。
☞对于局面A, B, S,若S=A+B,则称局面S可以分解为“子局面”A和B。
☝局面(3, 3, 1)可以分解为(3, 3)和(1)。
如果初始局面可以分成两个相同的“子局面”,则乙有必胜策略。
设初始局面S=A+A,想象有两个桌子,每个桌子上放一个A局面;若甲在一个桌子中取石子,则乙在另一个桌子中对称的取石子;根据对称性,在甲取了石子之后,乙总有石子可取;石子总数一直在减少,最后必定是甲无石子可取。
☝初始局面(2, 2, 5, 5, 5, 5, 7, 7),可以分成两个(2, 5, 5, 7),故乙有必胜策略。
☞对于局面S,若先行者有必胜策略,则称“S胜”。
☞对于局面S,若后行者有必胜策略,则称“S负”。
☝若A=(1),B=(3, 3),C=(2, 2, 5, 5, 5, 5, 7, 7),则A胜,B负,C负。
☝我们所关心的,就是如何判断局面的胜负。
如果局面S胜,则必存在取子的方法S→T,且T负。
如果局面S负,则对于任意取子方法S→T,有T胜。
设初始局面S可以分解成两个子局面A和B(分解理论)。
若A和B一胜一负,则S胜。
不妨设A胜B负;想象有两个桌子A和B,桌子上分别放着A局面和B局面;因为A胜,所以甲可以保证取桌子A上的最后一个石子;与此同时,甲还可以保证在桌子B中走第一步的是乙;因为B负,所以甲还可以保证取桌子B中的最后一个石子;综上所述,甲可以保证两个桌子上的最后一个石子都由自己取得。
若A负B负,则S负。
无论甲先从A中取,还是先从B中取,都会变成一胜一负的局面;因此,乙面临的局面总是“胜”局面,故甲面临的S是“负”局面。
若B负,则S的胜负情况与A的胜负情况相同。
若A胜B胜,则有时S胜,有时S负。
如果S=A+C+C,则S的胜负情况与A相同。
令B=C+C,则S=A+B且B负,故S的胜负情况与A相同。
☝图1所示的初始局面(3, 3, 1) = (3) + (3) + (1),与局面(1)的胜负情况相同。
☝图1中所示的初始局面(3, 3, 1)是“胜”局面,甲有必胜策略。
☞称一个石子也没有的局面为“空局面”。
空局面是“负”局面。
☞如果局面S中,存在两堆石子,它们的数目相等。
用T表示从S中把这两堆石子拿掉之后的局面,则称“S可以简化为T”。
☝局面(2, 2, 2, 7, 9, 9)可以简化为(2, 2, 2, 7),还可以进一步简化为(2, 7)。
一个局面的胜负情况,与其简化后的局面相同。
☝三个局面(2, 2, 2, 7, 9, 9)、(2, 2, 2, 7)和(2, 7),胜负情况都相同。
☞不能简化的局面称为“最简局面”。
☝局面(2, 7)是最简局面。
最简局面中不会有两堆相同的石子,故可以用一个集合来表示最简局面。
☝最简局面(2, 7)可以用集合{2, 7}来表示。
✉如果只关心局面的胜负,则一个局面可以用一个集合来描述。
☝图1所示的局面(3, 3, 1),可以用集合{1}来描述。
如果用搜索(搏弈树)的方法来解这个游戏,则采用集合来表示一个局面,比采用多元组来表示一个局面,搜索量将有所减少,但时间复杂度仍然很高。
能不能进一步简化一个局面的表示呢?三、类比与联想二进制加法11 + 0 = 1;0 + 1 = 1;0 + 0 = 0;1 + 1 = 0。
二进制的加法VS 局面的加法大写字母AB表示局面,小写字母ab表示二进制若A和B相同,则A+B负;若a和b相等,则a+b=0若A胜B负,则A+B胜;若a=1且b=0,则a+b=1若B胜A负,则A+B胜;若b=1且a=0,则a+b=1若A负B负,则A+B负;若a=0且b=0,则a+b=0……☪如果用二进制1和0,分别表示一个局面的胜或负局面的加法,与二进制的加法有很多类似之处。
✗若A胜B胜,则A+B有时胜,有时负;若a=1且b=1,则a+b=0。
1本文的“二进制加法”,是指不进位的二进制加法,也可以理解为逻辑里的“异或”操作。
☞ 二进制数的加法:对二进制数的每一位,都采用二进制的加法。
☝,。
二进制数的加法 VS 局面的加法大写字母AB 表示局面,小写字母ab 表示二进制数若A 和B 相同,则A+B 负;若a 和b 相等,则a+b 为0若A 胜B 负,则A+B 胜;若a ≠0且b=0,则a+b ≠0若B 胜A 负,则A+B 胜;若b ≠0且a=0,则a+b ≠0若A 负B 负,则A+B 负;若a=0且b=0,则a+b=0若A 胜B 胜,则A+B 有时胜,有时负若a ≠0且b ≠0,则有时a+b ≠0,有时a+b=0……☪ 如果用二进制数s 来表示一个局面S 的胜或负,S 胜则s ≠0,S 负则s=0 局面的加法,与二进制数的加法,性质完全相同。
☪ 能否用一个二进制数,来表示一个局面呢?☞ 用符号#S ,表示局面S 所对应的二进制数。
☪ 如果局面S 只有一堆石子,则用这一堆石子数目所对应的二进制数来表示S 。
☝ #(5)=5=101。
1010+ 10100000 0011 + 1010 1001☪ 若局面S=A+B ,则#S=#A+#B 。
☝ 局面(3, 3)=(3)+(3),所以#(3, 3)=#(3)+#(3)=11+11=0。
☝ 局面(3, 3, 1)=(3, 3)+(1),所以#(3, 3, 1)=#(3, 3)+#(1)=0+1=1。
☞ 函数f :若局面S 只有一堆石子,设S={a 1},则f(a 1)=#S ,即f(a 1)=#(a 1)。
☝ 对于游戏A 来说,#(5)=101,所以f(5)=101。
☝ 对于游戏A 来说,f(x)就是x 所对应的二进制数。
换句话说,f(x)=x 。
设局面S=(a 1, a 2, …, a n ),即S=(a 1)+(a 2)+…+(a n ),则#S=f(a 1)+f(a 2)+…+f(a n )。
☝ #(3, 3, 1)=#((3)+(3)+(1))=#(3)+#(3)+#(1)=f(3)+f(3)+f(1)=11+11+1=1。
☪ 对于局面S ,若#S=0,则S 负;若#S ≠0,则S 胜。
四、 证明二进制数a, b ,若a + b = 0,当且仅当a = b 。
☝二进制数a, b, s ,若a + b = s ,则a = b + s 。
☝1011 + 1011 00001011+ 10010010二进制数a1+a2+…+a n=p≠0,则必存在k,使得a k+p<a k。
因为p≠0,所以p的最高位是1;设p的最高位是第q位;至少存在一个k,使得a k的第q位也是1;a k+p的第q位为0,所以a k+p<a k。
☝若#S=0,则无论先行者如何取子S→T,都有#T≠0。
先行者只能从某一堆中取若干石子,不妨设他选择的就是第1堆;设先行者从第1堆中取了x个石子,用T表示取完之后的局面;设S=(a1, a2, …, a n),则T=(a1–x, a2, …, a n);#S=f(a1)+#(a2, …, a n)=0,故f(a1)=#(a2, …, a n);#T=f(a1–x)+#(a2, …, a n)=f(a1–x)+f(a1);x>0→f(a1)≠f(a1–x)→f(a1)+f(a1–x)≠0→#T≠0。
☝00101 a110011 a210111 a3+ 00001 a400000 p=000101 a100101 a2+a3+a4=a1+00000 p=0x≠a1a1+p≠0 11001 a101101 a k+ 10010 a300110 pq01101 a k+ 00110 p01011 a k+pq若#S ≠0,则先行者必然存在一种取子方法S→T ,且#T=0。
设S=(a 1, a 2, …, a n ),p=#S=f(a 1)+f(a 2)+…+f(a n ); 因为p ≠0,所以必然存在k ,使得f(a k )+p<f(a k ),不妨设k=1,f(a 1)+p=x ; 先行者将第1堆的石子的数目从a 1变成x ,用T 表示这个局面; p=#S=f(a 1)+#(a 2, …, a n ),故#(a 2, …, a n )=f(a 1)+p=x ; #T=f(x)+#(a 2, …, a n )=f(x)+x=0。
☝☞ 若S 是空局面,则#S=0。
✉ 若#S=0,则S 负;若#S ≠0,则S 胜。
☝ #(1, 2, 3)=01+10+11=0,故局面(1, 2, 3)负。
☝ #(1, 2, 3, 4)=001+010+011+100=100,故局面(1, 2, 3, 4)胜。
对于游戏A 来说,任意的一个初始局面S=(a 1, a 2, …, a n ),我们把这里的a i 都看成是二进制数。