SG函数

Nim:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,每次最少取一件,取到最后一件物品的人获胜。
结论:把每堆物品数全部异或起来,如果得到的值为0,那么后手胜,否则先手胜。

现在对于N堆物品,重新定义取石子方式,那什么策略才能先手赢?
SG函数:就是把新Nim回归到原始Nim,然后按照原始Nim进行各种操作.

SG[x]=Rmax(SG[u]|uϵ S G [ x ] = R m a x ( S G [ u ] | u ϵ {x子节点} ) ) <script type="math/tex" id="MathJax-Element-12">)</script>,SG函数就是对子节点u和Rmax(SG自定义函数)的理解.
例如:你的操作方式为每次取2,3,4个石子,那么你取的那堆石头(x个石子)所剩下的石子数就是子节点(如下图).
这里写图片描述
以上就是对于子节点的定义.

Rmax其实也很简单,就是SG[u]在自然数(0,1,2,3…)中没有出现的最小数字(如下图).
这里写图片描述
此时sg[5] = 0; 倘若sg[u] = {0,1,3},那么sg[x] = 2;倘若sg[u] = {0,1,2},那么sg[x] = 3 …

SG函数弄懂之后,就是回归到原始Nim。其实可以发现,原始Nim的sg[x] = x。所以同理,每一堆的sg[x]异或之后等于1先手胜,否则后手胜,回归到最原始的Nim操作,注意sg[x]是一种映射关系。
SG例题.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值