• 博弈——翻硬币游戏


    翻硬币游戏

        一般的翻硬币游戏的规则是这种:

          N 枚硬币排成一排。有的正面朝上。有的反面朝上。我们从左開始对硬币按编号。

    第一,游戏者依据某些约束翻硬币,但他所翻动的硬币中,最右边那个硬币的必须是从正面翻到反面。

    比如,仅仅能翻3个硬币的情况。那么第三个硬币必须是从正面翻到反面。假设局面是正正反。那就不能翻硬币了,由于第三个是反的。

    第二,谁不能翻谁输。

        有这种结论:局面的SG 值为局面中每一个正面朝上的棋子单一存在时的SG 值的异或和。

    即一个有k个硬币朝上,朝上硬币位置分布在的翻硬币游戏中,SG值是等于k个独立的開始时仅仅有一个硬币朝上的翻硬币游戏的SG值异或和。

    比方THHTTH这个游戏中,2号、3号、6号位是朝上的,它等价于THTTHTTTTTH三个游戏和,即sg[THHTTH]=sg[TH]^sg[TTH]^sg[TTTTTH].我们的重点就能够放在单个硬币朝上时的SG值的求法。

    约束条件一:每次仅仅能翻一个硬币。

        一般规则中。所翻硬币的最右边必须是从正面翻到反面,由于这题是仅仅能翻一个硬币。那么这个硬币就是最右边的硬币,所以,每次操作是挑选一个正面的硬币翻成背面。

        对于随意一个正面的硬币,SG值为1

        有奇数个正面硬币。局面的SG==1,先手必胜,有偶数个正面硬币,局面的SG==0。先手必败。

     约束条件二:每次能翻转一个或两个硬币。

    (不用连续)

        每一个硬币的SG值为它的编号。初始编号为0。与NIM游戏是一样的。

        假设对于一个局面。把正面硬币的SG值异或起来不等于0,既a1^a2^a3^^an==x,对于an来说一定有an'=an^x<an

        假设an'==0,意思就是说。把an这个值从式子中去掉就能够了。

    相应游戏。就是把编号为an的正面硬币翻成背面就能够了。

    由于an^x==0。而a1^a2^a3^^an==x,即an^a1^a2^a3^^an==0,即a1^a2^a3^^an-1==0,仅仅要在原来的x里面去掉an就能够了。

        假设an'!=0,意思就是说。把an这个值从式子中去掉后再在式子中加上an'an'<an。相应游戏,去掉an就是把编号为an的正面硬币翻成背面。加上an',假设编号为an'的硬币是正面,我们就把它翻成背面。是背面就翻成正面。总之,就是翻转编号为an'的硬币。

    由于an^x!=0,所以an^a1^a2^a3^^an!=0。即a1^a2^a3^^an-1!=0,而这里的

    an'=a1^a2^a3^^an-1,所以在x中去掉an后,要对an'进行异或。也就是翻转,正转反,反转正。

    约束条件三:每次必须连续翻转k个硬币。

    我们以k==3为例。

    我们计算的是个数为N的硬币中,当中最后一个硬币为正面朝上,sg值。

    N==1时。硬币为:正,先手必输,所以sg[1]=0

    N==2时,硬币为:反正。先手必输,所以sg[2]=0

    N==3时,硬币为:反反正,先手必胜。所以sg[3]=1

    N==4时,硬币为:反反反正。先手操作后为:反正正反,子状态局面的SG=0^1=1,那么sg[4]=0

    N==5时,硬币为:反反反反正。先手操作后为:反反正正反。子状态局面的SG=1^0=1。那么sg[5]=0

    N==6时,硬币为:反反反反反正。先手操作后为:反反反正正反。子状态局面的SG=0^0=0。那么sg[6]=1

    依据观察,能够知道。从编号为1開始,sg值为:001 001 001 001……

    依据观察,能够知道,sg的形式为00001 00001,当中一小段0的个数为k-1

    约束条件4:每次翻动一个硬币后。必须翻动其左側近期三个硬币中的一个,即翻动第x个硬币后。必须选择x-1x-2x-3中的当中一个硬币进行翻动,除非x是小于等于3的。(Subtraction Games

    N==1时,硬币为:正,先手必赢,所以sg[1]=1

    N==2时。硬币为:反正,先手必赢,由于先手能够翻成反反或正反。可能性为2。所以sg[2]==2

    N==3时,硬币为:反反正,先手操作后能够为:反正

    位置x1  2  3  4  5  6  7  8  9  10  11  12  13  14...

    sg[x]:  1  2  3  0  1  2  3  0  1   2     3     0    1     2

    这个与每次最多仅仅能取3个石子的取石子游戏的SG分布一样,相同还有相似的这类游戏,约束条件5也是一样。

    约束条件5:每次必须翻动两个硬币,并且这两个硬币的距离要在可行集S={1,2,3}中。硬币序号从0開始。(Twins游戏)

    N==1时,硬币为:正,先手必输,所以sg[0]=0

    N==2时,硬币为:反正,先手必赢。所以sg[1]=1

    N==3时。硬币为:反反正。先手必赢,所以sg[2]=2

    N==4时,硬币为:反反反正,先手必赢,所以sg[3]=3

    N==5时。硬币为:反反反反正,先手必输,所以sg[4]=0

    位置x0  1  2  3  4  5  6  7  8  9  10  11  12  13  14...

    sg[x]:  0  1  2  3  0  1  2  3  0  1   2     3     0    1     2

    约束条件6:每次能够翻动一个、二个或三个硬币。

    Mock Turtles游戏)

    初始编号从0開始。

    N==1时。硬币为:正,先手必胜,所以sg[0]=1.

    N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]=2

    N==3时,硬币为:反反正。先手必赢,先手操作后可能为:反反反、反正反、正反正、正正反。方案数为4。所以sg[2]=4

    位置x0  1  2  3  4   5    6   7    8     9  10  11  12  13  14...

    sg[x]:  1  2  4  7  8  11 13 14  16  19  21  22  25  26  28

    看上去sg值为2x或者2x+1。我们称一个非负整数为odious,当且仅当该数的二进制形式的1出现的次数是奇数,否则称作evil。所以1247odious由于它们的二进制形式是1,10,100,111.0,3,5,6evil,由于它们的二进制形式是0,11,101,110

    而上面那个表中。貌似sg值都是odious数。所以当2xodious时,sg值是2x,当2xevil时。sg值是2x+1.

    这样怎么证明呢?我们会发现发现,

                                                          evil^evil=odious^odious=evil

                                                          evil^odious=odious^evil=odious

    如果刚才的假说是成立的,我们想证明下一个sg值为下一个odious数。注意到我们总能够在第x位置翻转硬币到达sg0的情况;通过翻转第x位置的硬币和两个其他硬币。我们能够移动到全部较小的evil数,由于每一个非零的evil数都能够由两个odious数异或得到。可是我们不能移动到下一个odious数,由于不论什么两个odious数的异或都是evil数。

    假设在一个Mock Turtles游戏中的首正硬币位置x1,x2,,xn是个P局面。即sg[x1]^^sg[xn]=0.那么无可置疑的是n必然是偶数,由于奇数个odious数的异或是odious数,不可能等于0。而由上面可知sg[x]2x或者2x+1sg[x]又是偶数个,那么x1^x2^^xn=0。相反。假设x1^x2^^xn=0n是偶数,那么sg[x1]^^sg[xn]=0。这个假设不太理解的话,我们能够先这么看下。2x在二进制其中相当于把x所有左移一位,然后补零,比方说2的二进制是10。那么4的二进制就是100。而2x+1在二进制其中相当于把x所有左移一位,然后补1,比方说2的二进制是105的二进制是101。如今看下sg[x1]^^sg[xn]=0,由于sg[x]2x或者2x+1。所以式子中的2x+1必须是偶数个(由于2x的最后一位都是0,2x+1的最后一位都是1,要最后异或为0,2x+1必须出现偶数次)。实际上的情况可能是这种:

    博弈-翻硬币游戏

    MT游戏其中的P局面是拥有偶数堆石子的Nim游戏的P局面。

    约束条件7:每次能够连续翻动随意个硬币,至少翻一个。

    Ruler游戏)

    初始编号从1開始。

    那么这个游戏的SG函数是g(n)=mex{0,g(n-1),g(n-1)^g(n-2),,g(n-1)^^g(1)}

    依据SG函数能够得到SG值表例如以下。

    位置x1  2  3  4  5  6  7  8  9  10  11  12  13  14  15   16...

    g(x):       1  2  1  4  1  2  1  8  1    2    1     4    1    2     1   16

    所以sg值为x的因数其中2的能达到的最大次幂。比方14=2*7,最大1次幂。即216=2*2*2*2。最大4次幂,即16

    这个游戏成为尺子游戏是由于SG函数非常像尺子上的刻度。

    约束条件8:每次必须翻转4个对称的硬币,最左与最右的硬币都必须是从正翻到反。(開始的时候两端都是正面)(Grunt游戏)

    这是Grundy游戏的变种,初始编号从0開始。

    当首正硬币位置为0,1,2时是terminal局面,即 终结局面,sg值都是0。当首正硬币位置n大于等于3的时候的局面能够通过翻0,x,n-x,n四个位置得到(当中x<n/2可保证胜利)

    这就像是把一堆石子分成两堆不同大小石子的游戏,也就是Grundy游戏。

    附注:

    參考资料http://blog.sina.com.cn/s/blog_51cea4040100h3wl.html

    部分内容还是《Game Theory》翻译过来的


  • 相关阅读:
    计算器部分代码
    学写压缩壳心得系列之二 掌握PE结构 ,曲径通幽
    headerfiles
    VC实现文件拖拽
    学写压缩壳心得系列之三 模拟加载,步步为营
    ASPack 2.x (without poly) > Alexey Solodovnikov [Overlay]脱壳
    学写压缩壳心得系列之一 熟悉概念,未雨绸缪
    upx最新壳脱壳测试
    正则表达式大全
    win7 iis http 500 错误
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7259456.html
Copyright © 2020-2023  润新知