下面的所有知识均属博弈论范畴。
SG \operatorname{SG} SG 函数
Nim \operatorname{Nim} Nim 博弈
在介绍 SG \operatorname{SG} SG 函数前,我们先介绍一种经典的博弈—— Nim \operatorname{Nim} Nim 博弈,并从中获得一定的启发。
-
问题:有 n n n 堆石子,第 i i i 堆石子里面有 A i A_i Ai 枚石子,每人每次可从任意且至多一堆石子里取出任意多枚石子扔掉,可以取完,不能不取,最后无石子可取的人判负。假如甲是先手,且告诉你这 n n n 堆石子的数量,他想知道是否存在先手必胜的策略。
-
结论:若 xor i = 1 n A i ≠ 0 \operatorname{xor}_{i = 1}^n A_i \ne 0 xori=1nAi=0,先手必胜,否则后手必胜。
我们发现,当甲做完最后一步操作,将所有石子取完时,甲就赢了。此时,说明每堆石子均为 0 0 0 是一个必胜态。
所以,甲要进行的操作一定要使得自己最终一定要到达必胜态,并且对方永远不可能到达必胜态。
可以发现,如果甲操作后 xor i = 1 n A i = 0 \operatorname{xor}_{i = 1}^n A_i = 0 xori=1nAi=0,那么对方操作一次一定会使得 xor i = 1 n A i ≠ 0 \operatorname{xor}_{i = 1}^n A_i \ne 0 xori=1nAi=0。
所以,甲只要保持自己每次操作后 xor i = 1 n A i = 0 \operatorname{xor}_{i = 1}^n A_i = 0 xori=1nAi=0,就会使得对方永远到达不了必胜态,同时若干次操作后甲一定能够到达必胜态(因为石子数只会减少)。
实际上,我们可以称所有 xor i = 1 n A i = 0 \operatorname{xor}_{i = 1}^n A_i = 0 xori=1nA