Anti - SG 游戏-----SJ定理

 一、Anti-SG

    定义:桌子上有N堆石子,游戏者轮流取石子。

          每次只能从一堆中取出任意数目的石子,但不能不取。

          取走最后一个石子者败。

 

    因为要求是取走最后一个石子的人败,那么,想赢的人,肯定是想,我就要留一个石子让你去取。

    所以,我们在考虑条件的时候,就要加上石子数是不是1这个条件了。当然,还有SG函数本身。

 

    贾志豪发明的SJ定理(Sprague Grundy——Jia Zhihao)解决了这个问题。

   (PS一小段:这个定理名太太太雷人了,我以后也要发明下什么***——ccy,%%%——ccy定理。)

 

    SJ定理:

    对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束。

    先手必胜当且仅当:(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于1;(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。

 

    我们提出定理里的两个限制:1、SG函数为不为0。2、有没有某单一游戏的SG函数大于1。

    通过这两个限制,我们可以组合出4种情况:

    (1)SG==0,有某单一游戏的SG>1。

    (2)SG!=0,有某单一游戏的SG>1。(必胜SJ)

    (3)SG==0,无某单一游戏的SG>1。(必胜SJ)

    (4)SG!=0,无某单一游戏的SG>1。

 

    对于情况(1):

    当SG==0,存在某单一游戏的SG>1,因为SG==0,所以一定存在至少两个单一游戏的SG>1。而一次操作只能改变一个单一游戏的SG值,那么,操作后,一定到情况(2)。所以情况(1)是先手必败。

 

    对于情况(2):

    当SG!=0时,<1>若只有一个单一游戏的SG>1,我们一定可以通过一次操作,使得剩下的单一游戏一共有奇数个1,这样就先手必胜。<2>若不只一个单一游戏的SG>1,我们可以通过一次操作,使得情况变为SG==0,有某单一游戏的SG>1。对于情况(2)来说,都有子状态是必败状态,所以,情况(2)是先手必胜。

 

    对于情况(3):

    当SG==0,并且没有一单一游戏的SG>1,说明这里只存在偶数个1。如果1的个数为0,则先手必胜。如果1个个数大于0,说明一共有偶数个1,依然是先手必胜。

 

    对于情况(4):

    当SG!=0,无某单一游戏的SG>1,说明现在有奇数个SG==1,操作有两种。

    <1>将某一单一游戏的SG值变成大于1,转移后SG依然不等于0,且有一个单一游戏的SG>1,这就到了情况(2)。

    <2>将一个SG==1的转移为SG==0,这样就到了情况(3)。

    所以情况(4)下是先手必败。

转载http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html

猜你喜欢

转载自blog.csdn.net/qq_41593380/article/details/80036622
sg