ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:833.70KB ,
资源ID:18152964      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18152964.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(趣味象棋双炮禁双炮局与Nim数学游戏Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

趣味象棋双炮禁双炮局与Nim数学游戏Word格式.docx

1、5. 炮5进1 6. 炮一进二炮5退1 7. 炮五进一炮5进1(和局) 这个丙局取和的关键在于双方边炮的运用以及三路兵和七路卒的挺进,只要边炮立河头,对方即进攻无望。以上只是依书直说,但笔者感到这个丙局尚有不少微妙变化难以说清,欢迎网友提出疑窦,互相观摩,以丰富它的变化。附录一、抢三堆的简单判别法则把三堆物件的数量化为二进制数字,然后把各位数按十进制数相加,要是相加后得到的全是偶数,则这种局势是必胜形势!比如开始始有三堆小石子,数量是3, 5, 7,把对应的二进位数字按位相加: 011 101 +) 111 223其中有一個数字是奇数,所以它不是胜利形势。此时,先取石子的一方只要从任意的一堆里

2、取走一枚石子,就都是胜利形势。附录二:原古局的致胜口诀棋局研究专家家瞿问秋早于1974年曾发表有关竹香棋局双炮禁双炮的致胜口诀:一兵动则炮齐二炮齐则兵动三兵不动则5,4,3,2,1,0用方程法只是揭示象棋古局与数学的关系,增加兴味。同时也早就说 明用传统术语难以表示“双炮 禁双炮”的全部必胜着法,而 “文字叙述法”则是最清楚的。 现简文叙述于后:“曹操逼宫”的红先胜法很简单,一。边兵已挺时,保持两组炮的距离相同,即成44;33;22; 11;00;二。边兵未挺时(如图),红方保持两组炮的距离为 54;32;l0;如此就战无不胜了。版主:雁点青天第1局着法(红先胜) 1. 炮三进一 炮进 2.

3、炮五进二 卒进 3. 炮三进一 炮退 4. 炮三进二 炮进 5. 炮三进一 炮进 6. 炮五进一 第2局着法(红先胜) 1. 炮三进一 炮5 进1 2. 炮三进三 炮进 3. 兵九进一 第3局着法(红先胜) 1. 炮三进一 卒进 2. 炮三进一 炮进2 3. 炮三进二 炮进 4. 炮五进一 “双炮禁双炮”是一盘对称型的单双步红先胜排局,以双炮进逼双炮,使黑方欠行而取胜。特点如下:第一、对头边兵(卒)具有迷惑性,他们之间的距离是而不是。第二、两对儿炮除可以进外还可以退,同样具有迷惑性。第三、三、路炮不能平中打将。只能在直线上运动。 近代许多棋手对此提出一些科学方法,但仍没有揭示出最根本的规律性。

4、笔者从数学角度出发,得出其狭义和广义结论如下,供大家参考。设中路两炮的距离为x,三()路两炮的距离为y(x、y为自然数)。获胜的方程式为x=y+a或y=x+a (a为对头边兵(卒)之间的距离,取值范围为或),方程左边为胜方取值。 获胜的方程解为:、当败方进边兵(卒)时,即a=0,则x=y,即胜方保持两对儿炮之间的距离相等(x、y为自然数)。、当败方不进边兵(卒)时,即a=1,则x=y+1或y=x+1,胜方保持方程左边为奇数则胜,偶数则败。、当败方使x=y时,a的取值为0,即胜方进边兵(卒)。 结论:如上分析,“双炮禁双炮”先走方必胜,且红方获胜的唯一着法为炮三进一。以后根据黑方的应着,按方程决

5、定我方的应着,直至困毙黑方。 棋局的数学演化:三堆棋子为1、4、6枚,比赛双方依次任意从任意一堆中取走若干棋子,谁最终取完者获胜。 按棋局及方程分析,获胜的唯一方法第一步为从第三堆的6枚棋子中先取走一枚,以后根据对方的取量,按方程决定我方的取量,直至胜利。 广义推论:设有三堆棋子x、y、z枚(x、y、z为任意自然数且xyz),比赛双方依次任意从任意一堆中取走若干棋子,谁最终取完者获胜。 x=y+z 获胜方的基本原则是保持两堆之和等于第三堆,即:y=z+x z=x+y除保持上述方程的平衡外,方程简化后还要注意方程左边的奇偶性。二、Nim游戏 Nim游戏是博弈论中最经典的模型(之一),它又有着十分

6、简单的规则和无比优美的结论 Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在(一般而言)有限的合法移动集合中任选一种进行移动;3、对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作、以前的任何操作、骰子的点数或者其它什么因素; 4、如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是说此时无法进行移动),则这

7、名选手负。根据这个定义,很多日常的游戏并非ICG。例如象棋就不满足条件3,因为红方只能移动红子,黑方只能移动黑子,合法的移动集合取决于轮到哪名选手操作。定义通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。这游戏看上去有点复杂,先从简单情况开始研究吧。如果轮到你的时候,只剩下一堆石子,那么此时的必胜策略肯定是把这堆石子全部拿完一颗也不给对手剩,然后对手就输了。如果剩下两堆不相等的石子,必胜策略是通过取多的一堆的石子将两堆石子变得相等,以

8、后如果对手在某一堆里拿若干颗,你就可以在另一堆中拿同样多的颗数,直至胜利。如果你面对的是两堆相等的石子,那么此时你是没有任何必胜策略的,反而对手可以遵循上面的策略保证必胜。如果是三堆石子好像已经很难分析了,看来我们必须要借助一些其它好用的(最好是程式化的)分析方法了,或者说,我们最好能够设计出一种在有必胜策略时就能找到必胜策略的算法。定义P-position和N-position,其中P代表Previous,N代表Next。直观的说,上一次move的人有必胜策略的局面是P-position,也就是“后手可保证必胜”或者“先手必败”,现在轮到move的人有必胜策略的局面是N-position,也

9、就是“先手可保证必胜”。更严谨的定义是:1.无法进行任何移动的局面(也就是terminal position)是P-position;2.可以移动到P-position的局面是N-position;3.所有移动都导致N-position的局面是P-position。 按照这个定义,如果局面不可能重现,或者说positions的集合可以进行拓扑排序,那么每个position或者是P-position或者是N-position,而且可以通过定义计算出来。计算以Nim游戏为例来进行一下计算。比如说我刚才说当只有两堆石子且两堆石子数量相等时后手有必胜策略,也就是这是一个P-position,下面我们依

10、靠定义证明一下(3,3)是一个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,

11、3)也是N-position。同样可以证明(2,3)是N-position。所以(3,3)的所有子局面都是N-position,它就是P-position。通过一点简单的数学归纳,可以严格的证明“有两堆石子时的局面是P-position当且仅当这两堆石子的数目相等”。根据上面这个过程,可以得到一个递归的算法对于当前的局面,递归计算它的所有子局面的性质,如果存在某个子局面是P-position,那么向这个子局面的移动就是必胜策略。当然,可能你已经敏锐地看出有大量的重叠子问题,所以可以用DP或者记忆化搜索的方法以提高效率。但问题是,利用这个算法,对于某个Nim游戏的局面(a1,a2,.,an)来说

12、,要想判断它的性质以及找出必胜策略,需要计算O(a1*a2*.*an)个局面的性质,不管怎样记忆化都无法降低这个时间复杂度。所以我们需要更高效的判断Nim游戏的局面的性质的方法。结论(Boutons Theorem)对于一个Nim游戏的局面(a1,a2,.,an),它是P-position当且仅当a1a2.an=0,其中表示异或(xor)运算。怎么样,是不是很神奇?我看到它的时候也觉得很神奇,完全没有道理的和异或运算扯上了关系。但这个定理的证明却也不复杂,基本上就是按照两种position的证明来的。证明根据定义,证明一种判断position的性质的方法的正确性,只需证明三个命题: 1、这个判

13、断将所有terminal position判为P-position;2、根据这个判断被判为N-position的局面一定可以移动到某个P-position;3、根据这个判断被判为P-position的局面无法移动到某个P-position。第一个命题显然,terminal position只有一个,就是全0,异或仍然是0。第二个命题,对于某个局面(a1,a2,.,an),若a1a2.an!=0,一定存在某个合法的移动,将ai改变成ai后满足a1a2.ai.an=0。不妨设a1a2.an=k,则一定存在某个ai,它的二进制表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。这时aikai

14、一定成立。则我们可以将ai改变成ai=aik,此时a1a2.ai.an=a1a2.ank=0。第三个命题,对于某个局面(a1,a2,.,an),若a1a2.an=0,一定不存在某个合法的移动,将ai改变成ai因为异或运算满足消去率,由a1a2.an=a1a2.ai.an可以得到ai=ai。所以将ai改变成ai不是一个合法的移动。证毕。根据这个定理,我们可以在O(n)的时间内判断一个Nim的局面的性质,且如果它是N-position,也可以在O(n)的时间内找到所有的必胜策略,Nim问题就这样基本上完美的解决了。本世纪初,哈佛大学数学系副教授查理士理昂纳德包顿 (Chales Leonard B

15、outon) 提出一篇极详尽的分析和证明,利用数的二进位表示法,解答了这个游戏的一般法则:对任意列数的铜板,每列有任意枚数,如何取得致胜之道?在包顿的术语中,拿过后剩下的残局不是安全 (safe) 就是不安全 (unsafe) 的局面。在所有安全的情况下,不管对方如何拿总是到一不安全的情况,你可以再取适当枚数的铜板(在适当的某一列),达到另一安全的情况,这样一直到拿光铜板为止,当然最后一次拿光铜板的一定是你。反之,你如果留下不安全的情况,对方必有方法在适当的某一列,取走适当枚数的铜板,达到他的安全情况,也就是说你输定了。包顿的方法很简单。首先,将各列铜板的枚数化成二进位数,相加,但不进位,然后

16、再看和的各个位数。如果和的各个位数都是偶数,则表示一安全残局;否则,如果有一位是奇数,则为不安全残局。例如三、四、五游戏,一开始就是不安全残局,先拿的人可以适当取二枚而造成他的安全残局。为什麼安全残局和不安全残局可以利用上述的方法判定呢?这个道理其实很简单。首先,如果将各列铜板数化为二进位表示法,相加,但不进位,得到的各个位数都是偶数的话,不论对方取那一列,多少枚铜板,则那一列铜板数所对应的二进位表示法中,必有某一位或数位由 0 变成 1 或者由 1 变成 0,其相加的和也相对的有某一位或数位由偶数变成奇数相反的,如果和的某一位或数位是奇数,则我们有办法在某一列取走适当枚数的铜板,使得新的和的

17、各个位数都是偶数。首先,选取和中所有为奇数的各个位数;其次看这些位数中那一个是最左边一位;找某一列,使其二进位表示法在此位上刚好是 1;然后将此列的铜板数所对应的二进位数中,凡是第 ai 位,都改变其数值,亦即若为 0 则变为 1,若为 1 则变为 0,如列铜板此得到一新数,我们只要在此取走适当的数目,使达到这新的枚数,即可以使新的和的各个位数都是偶数;我个人都觉得我解释得很好,但是你居然不理解你想赢,那就这样。你把各行的数先变成二进纸,然后相加,但是不进位得到的结果只要全是偶数,就是安全残局。得到的结果有一个或者多个是奇数,就是不安全残局。所以每次轮到你,你都要拿走某一行,使它是安全残局。这

18、个时候对方再拿,肯定就是不安全残局。你再让它变成安全残局,就行了。这样下去你肯定赢。如果你还是不懂,就请说清楚,你是不懂什么样的情况才是安全残局,还是不懂怎么拿。从抢30到NIM游戏的取胜策略 (一)倒推法抢30是我国民间的一个两人游戏,具有很强的对抗性和娱乐性。抢30游戏通常有两种玩法。(1)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。(2)两人从1开始轮流报数,每人每次可报一个数或两个连续的数,同时把两个人报出的所有数累加,谁先使这个累加数最先达到30,谁就为胜方。解决最个问题的一般策略是用倒推法。以(1)为例,要抢到30,必须抢到27;要抢到27,必

19、须抢到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=

20、10。报数获胜的策略就是:(1)让对方先报数;(2)每次报数为关键因子减去对方所报数。这样自己每次所报数都是关键数。如果对方一定要先报,你只能期待对方不懂策略或者大意出错了。(三)不平衡因子在上述的抢30或者抢100的游戏中,最后数30是关键因子3的整数倍,最后数100是关键因子10的整数倍。我们可以把这样的游戏称为平衡游戏,也就是最后报数与关键因子相除余数为0。如果最后报数与关键因子相除有余数,这个游戏就可以称为不平衡游戏,其余数就是不平衡因子。抢数不平衡游戏也是不公平的游戏,先报数者有必胜策略。先报数者的获胜策略就是先消除不平衡因子,使其变成一个平衡游戏,先报数者随后就成为平衡游戏的后报数

21、者。例如,在抢30游戏中,两人从1开始轮流报数,每人每次可报1到3个连续的数,谁先报到30,谁就为胜方。在这里,关键因子是4,不平衡因子是2。又例如,抢100报数游戏中,如果每人可报数为1至10个连续的自然数,谁先报到100谁就是胜利者。在这里,关键因子是11,不平衡因子是1。在不平衡游戏中,如果先报数者不懂得游戏策略,懂得这个策略的后报数者需要不断计算不平衡因子,以便最后获胜。(四)更多例子报数游戏里的最后数都是些比较小的数,因此用倒推法比较容易得到策略。当我们把数变得大一些的时候,就变成了小学奥赛题。如果掌握上述讨论中的关键因子和不平衡因子的计算,奥数题也变得迎刃而解了。下面就是两个奥数例

22、题。(1)2008个空格子排成一排,第一格放有一个棋子。两人做游戏,轮流移动这枚棋子。每个人每次可前移1到5个格子,谁先把棋子移到最后一格,谁就是获胜者。问怎样的策略才能保证获胜。(2)桌上放着一堆火柴,共有5000根。两个人轮流从中取火柴,每人每次取的火柴根数为1到8根,谁取了最后一根谁就输。(五)进一步扩展到NIM游戏抢30的游戏是中国NIM游戏(也叫筹码游戏)的一种特例。NIM游戏的一种经典表述为:有n堆火柴,每堆各有若干根。两人轮流取出火柴,每次取出的根数不限但至少取1根,每次也只能从1堆里取火柴。谁最后把火柴取完,谁就是获胜者。问如何才能保证获胜。获胜策略已由美国数学家C.L.Bou

23、ton分析完成,用到的是二进制和平衡状态概念。其结论是:如果一开始火柴的总根数转化成二进制后各位数上的数字和都是偶数时,则是平衡状态,后取者必胜。最简单的平衡态是(1,1),即2堆火柴,每堆各1根。如果开始时火柴的状态处于不平衡状态,先取者必胜,其策略是取完后使火柴根数保持为平衡状态。最简单的不平衡态是(1),即1根火柴。例如,2堆火柴数都为2根,二进制记为(10,10),各位数之和为20,这是一个平衡态,则后取者必胜。3堆火柴数分别为1根、2根、1根,二进制记为(1,10,1),各位数之和为12,这不是一个平衡态。先取者先取掉中间一堆2根火柴,变成平衡状态(1,1),则先取者必胜。下面的一道

24、例题,可以用来练习NIM游戏的上述策略:有3堆火柴,根数分别为12、9、6.。甲乙两人轮番从其中一堆中取出1根或几根火柴,取到最后一根者获胜。先取者还是后取者有必胜策略,如何取胜?NIm游戏三堆火柴分别有2001根、2002根、2003根。甲、乙两人轮流从中取火柴。规则是:每人每次只能从其中的一堆取,最少要取一根,最多可以全部取走,可以任意选择,谁取完最后一堆的最后一根就获胜。如果甲先取,要保证获胜,他应该制定怎样的策略。甲先把2001取剩下1个. 乙把另两堆之一取剩下A个, 如A是偶数,甲将第3堆取剩下A+1: 如A是奇数,甲将第3堆取剩下A- 1: 最后留给乙1,2,3 甲必赢.如果乙操作

25、失误,使其中两堆相等或只剩下两堆,甲会赢的更轻松!cutmiss 小豆给出了一个策略,我下面补充一些更详细些的内容。没有证明,证明是容易的,如果哪位有兴趣,希望能自己试试。我觉得重要的是想法我小小时候,玩过这个游戏,是3,5,7根火柴。当时也不知道其原理,也根本不知道啥叫2进制,只是就数论数,找出过取胜策略。现在回头看看,觉得当时的想法很幼稚。这个游戏,国外叫nim,我们一般翻译为“尼姆”,也有翻译为“拈”,似乎后者更为贴切;据说是从中国流传出去的(这叫我想起围棋和四大发明了)。原始的提法是:n堆棋子,每堆分别为m(1), m(2), ., m(n)个棋子,甲乙轮流取子,轮到者不能不取,每次只

26、能在一堆中取,且可取某堆中任意多子;取最后子者胜;问先手有必胜策略的条件是什么?在该条件满足时如何获胜?后来还有很多的变种,例如限制取子个数、改为取最后子者负等等,似乎很多。1堆2堆的情形是平凡的,这题目给出的是一个3堆的情形。这个古老的游戏的理论上的解决,是哈佛的Chales Leonard Bouton用不进位的2进制数加法来给出的一个详尽的解法。大意如下:我们把每堆火柴数用2进制描述2001=111110100012002=111110100102003=11111010011不进位相加,和为33333030022这里需要两个概念,安全(safe)状态:不论对方如何拿,我都有必胜策略;不

27、安全(unsafe)状态:不是安全状态。我们需要的是,在我拿每次过之后的状态是安全状态。那么,怎么判断是安全状态还是不安全状态?安全状态下拿子后,就一定不是安全状态吗?从不安全状态拿子后,一定可以变成安全状态吗?一个简单的原则是:如果我们按上述方式得到的2进制不进位的加法和各个数字都是偶数,那么就是一安全状态,若有奇数,就是不安全状态。如果一开始的状态是安全的,那么,无论如何拿,先手总是将不安全状态留给后手;如果一开始的状态是不安全的,那么,先手总是有策略将安全状态留给后手。因为最后的状态(无子可拿)是安全的,所以第一种情况下,后手有必胜策略;而第二种情况下,先手有必胜策略。就本题而论,开始的

28、状态是不安全的(有奇数3),所以,先手有必胜策略。最直观的想法是从某堆中取走11111010000(2进制)个,即10进制中的2000个。这样那个和就变成22222020022,从而获得安全状态。那么,无论后手如何拿,总是获得不安全状态,而先手总是能把不安全状态变成安全状态(为什么呢?)用2进制是最聪明的办法 cutmiss 可以这么考虑上述原则:我们将“2进制不进位的加法和各个数字都是偶数”的状态记为状态S;将“2进制不进位的加法和各个数字包含奇数”的状态记为状态T;那么每一状态都必定是这两种不同的状态之一。我们可以证明下面的事实:1、有确定的策略将状态T变为状态S(可从棋子最多的堆中拿子,规则是:设2进制的各位和的第i位为i(j),按位定义一个新的2进制数n,若i(j)为奇数,则n的第i位为1,若i(j)为偶数,则n的第i位为0,n计算出来后,就从最多那堆拿掉n个子);2、S状态下,无论如何

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1