拈及其各种变形游戏 张镇华.docx
《拈及其各种变形游戏 张镇华.docx》由会员分享,可在线阅读,更多相关《拈及其各种变形游戏 张镇华.docx(16页珍藏版)》请在冰豆网上搜索。
![拈及其各种变形游戏 张镇华.docx](https://file1.bdocx.com/fileroot1/2022-12/1/4edab588-0400-46a4-b209-221f03f236d0/4edab588-0400-46a4-b209-221f03f236d01.gif)
拈及其各种变形游戏张镇华
拈及其各种变形游戏
张镇华
(一)拈(Nim)这种游戏
(二)威氏游戏(Wythoff'sGame)
(三)费氏数列及进位法
(四)威氏游戏的致胜方法
(五)单堆游戏
(六)结语
(一)拈(Nim)这种游戏
就像物理的不共容原理一样,数学游戏的趣味性和其数学理论的完整性,成为互相排斥的两部份。
一种游戏完全被数学决定以后,玩的人只要晓得其中的理论,无不处于优势。
游戏本身则成为数学的计算,玩起来必索然无味;但如果将它视为数学问题处理,则蕴藏有甚多美妙的理论在其中。
富有挑战性的游戏,则没有固定的规律可寻,必须随机应变,靠临场的机智和以往的经验取胜,玩者有味;但在数学理论上则没有什么可言。
拈及其各种变型游戏大都属于前者。
当做一种学问,我们只关心其富有趣味的数学理论。
在所有双人对局游戏中,拈是极其古老且饶富兴趣的一个课题。
据说,拈源自中国,经由被贩卖到美洲的奴工们外传。
辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞。
流传到高级人士,则用辨士(Pennils),在酒吧柜台上玩。
最有名的是将十二枚辨士分三列排成「三、四、五」的游戏,如下图:
游戏的规则很简单。
两人轮流取铜板,每人每次需在某一列取一枚或一枚以上的铜板,但不能同时在两列取铜板,直到最后,将铜板拿光的人赢得此游戏。
也可以做相反的规定:
最后将铜板拿光的人输。
一个头脑灵活的赌棍不久就会发现,先取的人,在第一列的三枚铜板中取走二枚,就能稳操胜算。
一个显而易见的规律是,只要你留下两列枚数相同的铜板,必可获胜。
在这里对称扮演极重要的角色。
如果这个游戏只是「三、四、五」型态,那么不久后,大部份人就能熟悉其中规律,并且变得没有兴趣。
有一个改变的方法是,将铜板的列数增加,每一列的枚数改变。
这样的做法,的确使人有毫无规律的感觉,至少不至于像「三、四、五」型态的拈一样易于把握。
直到本世纪初,哈佛大学数学系副教授查理士.理昂纳德.包顿(ChalesLeonardBouton)提出一篇极详尽的分析和证明,利用数的二进制表示法,解答了这个游戏的一般法则:
对任意列数的铜板,每列有任意枚数,如何取得致胜之道?
在包顿的术语中,拿过后剩下的残局不是安全(safe)就是不安全(unsafe)的局面。
在所有安全的情况下,不管对方如何拿总是到一不安全的情况,你可以再取适当枚数的铜板(在适当的某一列),达到另一安全的情况,这样一直到拿光铜板为止,当然最后一次拿光铜板的一定是你。
反之,你如果留下不安全的情况,对方必有方法在适当的某一列,取走适当枚数的铜板,达到他的安全情况,也就是说你输定了。
包顿的方法很简单。
首先,将各列铜板的枚数化成二进制数,相加,但不进位,然后再看和的各个位数。
如果和的各个位数都是偶数,则表示一安全残局;否则,如果有一位是奇数,则为不安全残局。
例如「三、四、五」游戏,一开始就是不安全残局,先拿的人可以适当取二枚而造成他的安全残局。
[例一]
另一个不安全残局的例子如下:
[例二]
或者
为什么安全残局和不安全残局可以利用上述的方法判定呢?
这个道理其实很简单。
首先,如果将各列铜板数化为二进制表示法,相加,但不进位,得到的各个位数都是偶数的话,不论对方取那一列,多少枚铜板,则那一列铜板数所对应的二进制表示法中,必有某一位或数字由0变成1或者由1变成0,其相加的和也相对的有某一位或数位由偶数变成奇数。
例如,{1,4,5}这个安全残局,从第二列的4枚铜板取走2枚,则
相反的,如果和的某一位或数字是奇数,则我们有办法在某一列取走适当枚数的铜板,使得新的和的各个位数都是偶数。
首先,选取和中所有为奇数的各个位数
;例如在{14,15,18,22}的例子中和的第1和第3位是奇数。
其次看这些位数中那一个是最左边一位;本例中当然是第3位。
找某一列,使其二进制表示法在此位上刚好是1;本例中,可以找第一例的14,也可以找第二列的15。
然后将此列的铜板数所对应的二进制数中,凡是第ai位,都改变其数值,亦即若为0则变为1,若为1则变为0,如此得到一新数,我们只要在此列铜板取走适当的数目,使达到这新的枚数,即可以使新的和的各个位数都是偶数;例如,若考虑第一列的14=1110枚铜板,将其第1和第3位改变得到1011=11枚铜板,所以要在第一列取走3枚铜板。
相反规定,拿光铜板的人算输峙,只耍将上面的规律略加修饰,也可以控制局面。
如果你一直拥有安全残局,对方一直处于不安全的情况,到某一时候,对方留下来的不安全残局一定会出现一种特殊型态,即是,除某一列铜板的枚数大于1,其他各列均只有一枚铜板(拿光的各列不管它),这时候你的拿法要开始注意,你需将较多枚铜板这一列全部取光,或者拿到只剩下一枚,决定采取何者,完全看你拿了之后,要能使剩下的列数为奇数,当然每一列均只有一枚铜板。
显而易见的是,以后一人都取一列,也是一枚,到最后拿的一定是对方,于是你就赢了。
有很多人把这个方法写成计算机程序,来和人对抗,不知就理的人被骗得团团转,无不惊叹计算机的神奇伟大。
其实说穿了,只因为它计算比人快,数的转化为二进制其速度快得非人能比,如此罢了。
(二)威氏游戏(Wythoff'sGame)
用来玩拈的道具不限于铜板。
工余之时,石头可以玩;无聊磕瓜子时,瓜子可以玩;围棋子可以玩……。
也可以将石头分堆放置,一堆相当于一列。
这些都不是重点,我们甚至可以改变取铜板的规定,最后取光时输赢的规定……,于是,各种不同的变型游戏遂产生。
在拈的游戏中,如果只有两列铜板,则很容易看出来,留下两列枚数相同的铜板是致胜的安全残局。
也就是我们一开始说的对称这个想法。
事实上,包顿很巧妙的将对称化成二进制和的各个位数为偶数,将问题给一般化,这是很天才的想法。
所以两列的拈是没有什么可说的。
将拈的规定略加修改,成为只有两列的威氏游戏,却极其有意思。
规定是这样的,铜板只有两列,每列的枚数随玩者任意规定,两人轮流取铜板,取的时候,需要任一列中取一枚或多枚铜板,或者同时在两列取同样枚数的铜板,直到最后将铜板取光的人赢。
当然也可以像拈一样有相反的规定,最后将铜板取光的人输。
今只讨论前者。
拈的玩法完全不能适用于威氏游戏。
所有拈的安全残局{n,n},在威氏游戏中都是不安全残局。
因为我们加了一个规定,可以从两列铜板中同时取相同枚数的铜板。
[例3]若n是正整数,则{0,n}和{n,n}都是不安全残局。
[例4]{1,2}是安全残局。
因为
不管如何取,总是成为不安全残局。
[例5]{3,5}是安全残局。
因为
不管对方如何取,不是到达例3的不安全残局,就是你可以再适当取,使成例4的安全残局。
继续推演下去,可以得到许多组安全残局{1,2},{3,5},{4,7},{6,10},…。
一般而言,第n组安全残局{an,bn}可由下式定义得到
(1)a1=1,b1=2。
(2)若
已经求得,则定义an为未出现在以上这2n-2个数中的最小整数。
(3)bn=an+n。
做成表就是
n
1
2
3
4
5
6
7
8
9
10
an
1
3
4
6
8
9
11
12
14
16
bn
2
5
7
10
13
15
18
20
23
26
由
(1)、
(2)、(3)所定义的二数列
和
,具有下列特性:
(甲)数列
和
均是严格递增数列,而且bn=an+n。
(乙)
其中N表示正整数的集合,
(丙)若{an,bn}={am,bm},则n=m,即an=am,bn=bm。
事实上,相反的,具有(甲)、(乙)性质的数列,也就是具有
(1)、
(2)、(3)性质的数列。
[定理]{an,bn}是威氏游戏的安全残局,其余的组合{x,y}都是不安全残局。
[证]我们只要证明下面二点即可。
(1)由任何一组{an,bn}取铜板,不管如何取,都不会成为另一组{am,bm}。
假设从一组{an,bn}中的an取x,bn取y而能达到另一组{am,bm},则an-x=am,bn-y=bm。
(i)当x=0,y>0时,an=am则n=m,得y=0,矛盾。
(ii)当x>0,y=0时,bn=bm则n=m,得x=0,矛盾。
(iii)当x=y>0时,m=bm-am=(bm+y)-(am+x)=bn-an=n,矛盾。
(2)由任一组不是{an,bn}型的{x,y}可以适当取铜板使成某一组{am,bm}。
为方便计,可假设
。
(i)当x为某个bm时,y-am=y-(bm-m)=(y-x)+m>0,可在y中取y-am,变成{bm,am}。
(ii)当x为某个am,且y>bm时,在y中取y-bm,变成{am,bm}。
(iii)当x为某个am,且
时,y-x0。
在x中取x-ak,在y中取y-bk=x-ak则变成{ak,bk}。
这个定理不但告诉我们{an,bn}是威氏游戏的安全残局,其证明过程更暗含从不安全残局取铜板变成安全残局的法则。
我们只要记住这个法则,还有{an,bn}组合,则无不处于优势。
但是有一个问题是,当数目很大的时候,要记住一大堆{an,bn}是一件非常吃力不讨好的工作。
我们于是自然会问,有没有像拈类似的法则用来判断任何一组{x,y}是否为威氏游戏的安全残局,而不必逐一计算{a1,b1},{a2,b2}…。
答案是有的,在解答这之前,我们需要谈谈费氏数列及相关的问题。
(三)费氏数列及进位法
费氏数列是指无穷数列1,2,3,5,8,13,21,…而言,它的一般表示式是f0=1,f1=2,fn+2=fn+1+fn真正把它计算出来是
计算的过程和我们要讨论的没有太大关系,兹从略。
有一点可以注意的是,{fn}几乎成一等比级数。
因为
,其绝对值小于1,当n很大时,
变得很小,几乎可以省略不计。
也就是说
,几乎是等比级数型式增加。
费氏级数最有趣的特性是,自然界许多生长的过程或多或少和它有点关联。
可参考《数学漫谈》第四章(下)。
通常我们所熟悉的阿拉伯数字表示自然数的方法是利用0,1,2,3,4,5,6,7,8,9十个数字为基础,借「位」的观念,和「逢十进一」的方法组织而成。
这就是十进制法。
举例来说,345=3x102+4x101+5。
仿照这个道理,有各种进位法,例如计算机所熟悉的二进制法,仅有0和1两种基本数字,10110表示1x24+0x23+1x22+1x21+0=16+4+2=22。
八进制法,则仅有0,1,2,3,4,5,6,7八个数字。
标准的进位法中,各位都是满一个固定数就进位。
例如:
十进制法是满十进一,即个位数满十进一到十位数,十位数满十进一到百位数,百位数满十进一到千位数,……等。
考虑一个自然数的无穷数列B0,B1,B2,…其中B0=1,其余各Bn均大于1。
我们可以采取一种名为B进位法的记数法则:
由右边算起,第一位满B1进一到第二位,第二位满B2,进一到第三位,……,第n位满Bn,进一到第n+1位。
任何一个自然数x可以有唯一的B进位表示法
,其中
。
则
标准十进制法是取Bi=10,i=1,2,…。
各种k进位法是指Bi=k,i=1,2,…而言。
[例6]Bn=n+1,求347的B进位表示法。
所以347=2x(2x3x4x5)+4x(2x3x4)+1x(2x3)+2x2+1=24121B
假设Pn=B0B1…Bn则
成为一个以1为起点的严格递增无穷自然数列。
自然数N的B进位表示法
如果我们一开始就取一个以1为起点的严格递增无穷自然数列
,对于任何自然数N表示成
有无困难?
答案是有的。
在B进位表示法中,每一个自然数恰有唯一的一种表示法;但是在这种新的表示法中,不一定每个自然数均只有一种表示法。
[例6.1]数列
定义为Pn=2n+1,则
有趣的是,自然数的P数列表示法一定有解。
[定理2]
是一个以1为起点的严格递增无穷自然数列,则每一自然数N至少可以表示成一种P数列表示法
[证]利用数学归纳法证明:
N。
n=1时,N=l0,其中l0(P)=N。
若n=k时本定理成立,则n=k+1时,利用除法公式,可以找到lk及r使得
由归纳法假设
而且
。
故
将上面这种理论用到费氏数列{fn}因为
,所以费氏表示法中的各个「位数」只能是0或1。
费氏数列表示法不具有唯一性。
[例7]化60为费氏数列表示法。
n
0
1
2
3
4
5
6
7
8
fn
1
2
3
5
8
13
21
34
55
因为fn+2=fn+1+fn,费氏数列表示法中有一种有趣的「进位法」:
第n位和第n+1位都是1时,可以进位到第n+2位。
如上例10110110(f)的第5和第6位都是1,故可以进位到第7位,将原数化成11000110(f);同理,可将11000110(f)的第2和第3位进位到第4位,成为11001000(f)。
利用这个性质,在一数的某一费氏数列表示法中,如果有相邻的两位均是1,则可以进位到左边一位,化成另一个不同的表示法,继续化简,到最后,可以得到一种表示法,其中li各数目,相邻两个不同时为1(否则,再进位即可),每一个数都有一种唯一的如此表示法,称之为标准表示法。
另一有趣的性质是:
如果lnln-1…l1l0(f)中各位数字0和1相间出现,例如101010(f)或10101(f)则
(四)威氏游戏的致胜方法
现在回到第
(二)节的数列{an}和{bn}。
一个相当有趣的事实是,如果将威氏游戏的各组安全残局{an,bn}用费氏数列标准表示法表示出来,如下表:
仔细观察,各个bn恰好是an后面加一个0,每个an最右边有偶数个连续的0(包括没有0),当然bn最右边有奇数个连续的0。
有了这个结果,我们要检查一组{x,y}(其中
)是否安全残局,就可以将x和y表成费氏数列标准表示法,再看看是否合于上述的条件即可。
这中间的优点是,我们不必再计算所有
的安全残局{an,bn},以决定{x,y}是否安全。
更重要的是,我们将有一种简便的方法,可以将不安全残局{x,y}适当的取成某一安全残局{an,bn}。
当然,数论上的一些结果告诉我们
([x]表示小于或等于x的最大整数,例如[2.99]=[2.0]=[2]=2)由定理1,我们几乎要求出2x/(sqrt5-1)组{an,bn}才能顺利的判定安全残局,以及由不安全残局拿成安全残局的方法。
当x大的时候,这么多的数据处理起来必然不方便。
上述{an,bn}的性质,只是依观察而得,现在我们要证明其真实性。
我们所以要这样做,不光是因为数学上的严密性,在证明的过程中,用到的一些计算,将很有用处。
首先将自然数分成A和B两部份,A是所有费氏标准表示法中右边有偶数个连续0的自然数的集合,B则是所有费氏漂准表示法中右边有奇数个连续0的自然数的集合。
将A中之数由小而大排成一数列
设bn'是an'费氏标准表示法右边再加一个0者。
我们将证明
且合于第
(二)节的(甲)(乙)条件。
所以,事实上就是
因此证明了上述的性质。
(乙)易于知道成立。
因为
和
都是严格增加数列,为了证明(甲),我们只要证明bn'=an'+n就可以,兹分下面两步骤,证明之。
(第一)bn'-an',随n增加而增加。
也就是,当n>m时,bn'-an'>bm'-am'。
[证]假设
上面均是标准表示法,但左边有的填0(即lr或
可能为
等)以便对齐。
n>m表示an'>am',也就是有一个s对每一个i>s成立,
。
因为
可见
bn'-an'>bm'-am'
(第二)对于任一自然数x,有一组{an',bn'}使得bn'=an'+x。
[证]当x的费氏标准表示法右边有奇数个连续的0时,取an'=x0(f),bn'=x00(f)即可以。
当x的费氏标准表示法右边有偶数个连续的0时,即
取
利用
可见bn'=an'+x成立。
(第一)和(第二)证明了bn'=an'+n的确成立。
上面的证明不但说明了{an,bn}具有所述的性质,即是an为第n个费氏标准表示法之最右边有偶数个连续0的自然数,bn是第n个费氏标准表示法之最右边有奇数个连续0的自然数,尤有进者,bn的表示法等于an表示法右边再加一个0而已。
而且由(第二)可以知道,对于任何一个自然数x,不必用归纳法从a1,b1,a2,b2,…算起,一直求至ax,bx。
直接就可以算出ax和bx来。
所以在利用定理1的时候,我们就可以不必记忆一大堆{an,bn}值了。
(五)单堆游戏
在所有拈的变型游戏中,单堆游戏似乎是比较简单的。
最常见而为大众熟悉的玩法是这样的:
「两人轮流取一堆石头,每人每次最少取1个,最多取k个,最后取光石头的人赢得此游戏。
」请问有何致胜之道?
和前面一样,所有的情况,可以分为安全和不安全两种。
在这里k+1这个数扮演着极重要的角色,因为每次某一人拿的石头数i,合于
,可见
,另一人总是可以取k+1-i个石头,使这两次所取的石头共有k+1个,由是可见k+1是安全残局,利用归纳法则k+1的倍数必为安全残局。
反之,不是k+1倍数的任一自然数n=q(k+1)+r,其中
,一次拿r个石头就能到达q(k+1),即某一安全残局,可见此时为不安全残局。
相反的规定:
「最后取光石头的人输」,也可以分析知道,安全残局是q(k+1)+1这种型态的数。
并不是所有单堆游戏都是如此容易的,例如「奇偶游戏」则是较复杂的一种。
所谓「奇偶游戏」只是将上述的问题略加修改,最后取光石头时的输赢的规定不同,即「两人轮流取一堆石头,每人每次最少取1个,最多取k个,到最后石头被取光时,若手中所有石头总数为奇数,则此人赢得此游戏。
(也可以规定石头总数为偶数的人赢得此游戏)。
」显而易见的是,原先这堆石头的总数要是奇数才有意义。
这个游戏较前者更复杂,其安全残局视k的奇偶和k+1或k+2的倍数有关系。
另一个和骰子有关的单堆游戏由古先生1提出来,问题是这样的:
「有一堆石头,数目不拘。
首先任意掷一骰子,看出现几点,就取去几个石头。
然后两人轮流翻转骰子到前次骰子出现那一面的旁边四面中任一面,但不可以翻到对面,也不可以不翻,翻到几点,就取去几个石头,如此轮流玩到一方没有办法拿石头,也就是说,剩下的石头数比他翻到的数目还小的时候,则他就算输了。
」
首先要了解的一点是,骰子上面六个数目安排的方法。
从1到6的各个自然数在骰子上各出现一次,1的对面是6,2的对面是5,3的对面是4。
这个游戏和第一个单堆游戏有点类似,却不相同。
如果骰子出现i的时候,轮到你,则从1到6中的各数有两个,即是i和7-i,你不能翻到,其余四个随你高兴爱翻那一个都可以。
所以每次你能够取的石头数,依前次对方所翻到的数目而定,而对方翻的数又因你前次翻的而定,如此相互影响,就显得很复杂了。
仔细分析的结果,可以发现其安全残局和8的倍数有密切关系。
有兴趣的读者可以自已试试看。
如果把骰子加成两个,然后规定每次翻两个骰子,把翻到的两个数字和算出来,取掉同样数目的石头,则又如何呢?
如果还是有两个骰子,但每次只任选其中一个将它翻到新数目,看这数目是多少,就取掉多少石头,则又如何?
或者,还是两个骰子,每次只任意翻转其中一个到新数目,但把这个新数目和另一个未翻的骰子相加,算出其和,取掉同样数目的石头,则又如何?
当然,增加骰子的数目,则游戏更复杂。
最后我们想仔细讨论的一个单堆游戏叫做「双倍游戏」。
这个游戏和骰子的单堆游戏有一共同的特性:
每次所拿石头的个数受上次对方所拿石头的个数影响。
问题是这样的:
「两人轮流取石,每人每次至少取1个石头,至多取上次对方所拿石头数目的两倍;最后拿光石头的人赢得此游戏。
当然,第一个人不能第一次就取光所有石头。
」
[例8]2是安全残局,因对方只能取1。
[例9]3是安全残局。
因
[例10]5是安全残局。
因
如此继续推演下去,一个很有意思的结论是,所有费氏级数的项fn均是安全残局其余都是不安全残局。
要证明这件事情可以分几步完成,主要的概念还是在于自然数的费氏数列标准表示法。
(i)如果
,则fn[证明]因为f1=2,f2=3,f3=5,所以n=1,2,时易知为对。
若n两式相加
由归纳法得证。
(ii)如果你留下x=fk1+fk2+…+fkn-1+fkn个石头,其中
i=1,2,…,n-1,而且对方下次所能取走的石头数目小于fkn则你留下的是一安全残局。
[证明]假设对方拿走
个石头,其中
i=1,2,…,m-1。
当
时,
则
所以你可以取走y'个石头,使剩下x'=fk1+fk2+…+fkn-1个石头,而且
也就是对方下次所能取走的石头数目小于fkn+1如此又可用归纳法继续推演本定理。
其次,如果kn>2+kn+1分解
其中t为
为奇数,而且kn-t=kn+1或1+kn+1。
所以你可以取走y'个石头,使剩下
个石头,而且
2y'<2fkn-t也就是下次对方所能取走的石头数目小于fkn-t+2。
同理可用归纳法。
(iii)双倍游戏中的安全残局是fn,n=1,2,…。
[证明]x=fn时就如(ii)所述,对方所取的石头不超过
,所以你是留下安全残局。
若一开始x不是fn型态,化为费氏标准式,
对方可以取去fkm剩下
;轮到你时不得取超过
,由(ii)可知他留下了他的安全残局,所以一开始是你的不安全残局。
(六)结语
有兴趣吗?
让我们随便规定一个玩法:
「一堆石头有100个,两人轮流取石,每次每人至少取一个,最多取上次对方取走石数的三倍。
最后取光的赢得游戏。
当然,第一个拿的人不可以第一次就取光所有石头。
」
笔者不晓得其中有何规则。
来吧!
你先?
还是我先?
东南亚电影外加牛肉面一碗。
1.《数学漫谈》,戴维.柏佳米尼及《时代生活》杂志社编辑部着,傅溥译着,美亚书局发行。
2.A.M.YaglomandI.M.Yaglom,《ChallengingMathematicalProblemswith