[学习笔记]Nim游戏&SG函数

SG函数

定义

  • P-position(Previous): 当前选手的必败态
  • N-position(Next): 当前选手的必胜态

状态转移方式

  • 无路可走时是P-position
  • 如果存在能让游戏状态变成P-position的走法,则当前状态为N-position
  • 如果所有能到达的游戏状态都是N-position,则当前状态为P-position

性质

由状态转移方式推得

  1. 所有terminal position为P-position
  2. N-position的游戏状态一定可以转移到某个P-position
  3. P-position的游戏状态不可能转移到别的P-position

只要满足上面三条性质,则游戏状态合法.

应用

  • mex运算: 表示最小的不属于这个集合的非负整数

  • 对游戏状态建DAG

  • SG函数f(x)=mex{f(y)|x->y\(\in\)DAG}
    假设f(x)=0为必败态(P-position),反之为必胜态(N-position)

    1. 所有terminal position无出边,f(x)=0
    2. f(x) \(\neq\) 0时,存在一条出边指向的y满足f(y) \(=\) 0
    3. f(x) \(=\) 0时,所有出边指向的y满足f(y) \(\neq\) 0

    满足三条性质

Nim游戏及其变体

Nim Game

n堆石子, 两个人轮流操作, 每次可从任意一堆中取出任意多>0的石子, 无法操作者输.

  • 结论:P-position为所有石子数的异或和=0.
  • 证明:
  1. terminal position,即石子数都为0,为P-position.

  2. 若当前为N-position,即异或和k(设最高位为x)不为0,则必存在石子数\(a_i\)的位x为1,满足\(a_i\;xor\;k<a_i\).
    \(a_i-a_i\;xor\;k\)即可.

    \(\begin{aligned}&a_1\;xor\;a_2\;xor...xor\;(a_i\;xor\;k)\;xor...xor\;a_n\\=&a_1\;xor\;a_2\;xor...xor\;a_i\;xor...xor\;a_n\;xor\;k\\=&k\;xor\;k\\=&0\end{aligned}\)

    转移到了某个P-position.

  3. 若当前为P-position,即异或和为0,则无论怎么取,取后异或和必不为0,即不可能转移到别的P-position.

Nimk Game

n堆石子, 两个人轮流操作, 每次可从任意\(\small{\leq}\)k堆中取出任意多>0的石子, 无法操作者输.

  • 结论:P-position为在二进制下,每一位上的1的个数和mod (k+1)都为0.
  • 证明:
  1. terminal position,即石子数都为0,为P-position.
  2. 若当前为N-position,即存在某一位上的1的个数和mod (k+1)不为0,从高位往低位确定每堆石子取的个数.
    假设已经使前i-1上的1的个数和mod (k+1)=0,现在考虑第i位.
    对于已经改变的m堆,当前位可以自由选择变与不变(不会增加取的堆数).
    记n为除已经改变的m堆外,当前位为1的堆数mod (k+1)的值.
    若n+m\(\leq\)k,则直接全取这n+m堆这一位的1,m=n+m. 此时转移到了某个P-position.
    否则,n+m>k即n+m\(\geq\)k+1,此时n\(\geq\)k+1-m,在这m堆中,留k+1-n堆这一位的1,其余1全取走. 此时转移到了某个P-position.
  3. 若当前为P-position,即每一位上的1的个数和mod (k+1)都为0,则无论怎么取,取后必存在某一位上的1的个数和mod (k+1)不为0,即不可能转移到别的P-position.

Bash Game

n堆石子,两个人轮流操作,每次可从任意一堆中取出[1,m]个石子,无法操作者输.

  • 结论:P-position为所有石子数\(mod\;(m+1)\)后的异或和=0.

  • 证明:

  1. terminal position,即石子数都为0,为P-position.

  2. 若当前为N-position,即异或和k(设最高位为x)不为0,则必存在石子数\(a_i\;mod\;(m+1)\)的位x为1,满足\(a_i\;mod\;(m+1)\;xor\;k<a_i\).
    \(a_i-a_i\;mod\;(m+1)\;xor\;k\)即可.

    \(\begin{aligned}&(a_1\;mod\;(m+1))\;xor...xor\;(a_i\;mod\;(m+1)\;xor\;k)\;xor...xor\;(a_n\;mod\;(m+1))\\=&(a_1\;mod\;(m+1))\;xor...xor\;(a_i\;mod\;(m+1))\;xor...xor\;(a_n\;mod\;(m+1))\;xor\;k\\=&k\;xor\;k\\=&0\end{aligned}\)

    转移到了某个P-position.

  3. 若当前为P-position,即异或和为0,则无论怎么取,取后异或和必不为0,即不可能转移到别的P-position.

Staircase Nim

n阶台阶, 每次可以从一个台阶上拿掉任意数量石子放到下一层台阶, 无法操作者输(第1级可以往地面上放).

  • 结论:P-position为所有奇数级的石子数的异或和=0.
  • 证明:
  1. terminal position,即所有石子都在第0级,奇数级石子数异或和为0,为P-position.
  2. 若当前为N-position,即若当前奇数级异或和不为0,则必存在奇数级石子数\(a_i\)的位x为1,满足\(a_i\;xor\;k<a_i\). 取\(a_i-a_i\;xor\;k\)即可转移到某个P-position.
  3. 若当前为P-position,即若当前奇数级异或和为0,则移奇数级到偶数级后,奇数级异或和不为0,即不可能转移到别的P-position.

Anti Nim

n堆石子, 两个人轮流操作, 每次可从任意一堆中取出任意多>0的石子, 取走最后一颗石子的人输.

  • 结论:N-Position为以下两种情况之一:
    1. 所有堆石子数都为1且堆数为偶数
    2. 存在某堆石子数大于1且石子堆的异或和≠0
  • 证明 :
  1. terminal position,即只剩一个石子数为1的堆,为P-position.
  2. 若当前为N-position,
    1. 若所有堆石子数都为1且堆数为偶数,任取一堆即可转移到某个P-position.
    2. 若存在某堆石子数大于1且石子堆的异或和≠0,参考Nim Game,可转移到某个P-position.
  3. 若当前为P-position,
    1. 若所有堆石子数都为1且堆数为奇数,无论取哪堆都会转移到某个N-position,即不可能转移到别的P-position.
    2. 若存在某堆石子数大于1且石子堆的异或和=0,由异或和=0得至少存在两堆得石子数>1. 无论取哪堆都会使石子堆的异或和≠0(转移到某个N-position),即不可能转移到别的P-position.

2017-10-25 20:40:09

原文地址:https://www.cnblogs.com/AireenYe/p/NimAndSG.html