SG函数学习总结

有点散乱, 将就着看吧.
首先是博弈论的基础, 即 N 和 P 两种状态: N 为必胜状态, P 为必败状态.
对于N, P两种状态, 则有
1. 没有任何合法操作的状态, P;
2. 可以移动到P局面的情况为N状态;
3. 可以移动到的所有状态均为N状态, 则当前情况为P状态.
然后就可以引入SG函数了.

首先定义mex运算, 这是施加于一个集合的运算, 表示最小的不属于这个集合的非负整数。
for instance,
mex{0, 1, 2, 4} = 3、mex{2, 3, 5} = 0、mex{} = 0。
对于一个给定的有向无环图, 定义关于图的每个顶点的Sprague-Grundy函数g如下:g(x) = mex{ g(y) | y是x的后继}, 这里的g(x)即
sg[x]。

例如:取石子问题, 有1堆n个的石子, 每次只能取{1, 3, 4}个石子, 先取完石子者胜利, 那么各个数的SG值为多少?
sg[0] = 0, f[] = {1, 3, 4},
x = 1时, 可以取走1-f{1}个石子, 剩余{0}个, mex{sg[0]} = {0}, 故sg[1] = 1;
x = 2时, 可以取走2-f{1}个石子, 剩余{1}个, mex{sg[1]} = {1}, 故sg[2] = 0;
x = 3时, 可以取走3-f{1, 3}个石子, 剩余{2, 0}个, mex{sg[2], sg[0]} = {0, 0}, 故sg[3] = 1;
x = 4时, 可以取走4-f{1, 3, 4}个石子, 剩余{3, 1, 0}个, mex{sg[3], sg[1], sg[0]} = {1, 1, 0}, 故sg[4] = 2;
x = 5时, 可以取走5-f{1, 3, 4}个石子, 剩余{4, 2, 1}个, mex{sg[4], sg[2], sg[1]} = {2, 0, 1}, 故sg[5] = 3;

以此类推…..

x   0   1   2   3   4   5   6   7   8
sg  0   1   0   1   2   3   2   0   1

这里的sg函数与上面提到的N, P两种状态实际上是吻合的, 当 sg[i] == 0 时, 处于P状态; 否则处于N状态.

转载于:https://www.cnblogs.com/ZeonfaiHo/p/6402847.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值