NIM游戏的理解
今天学习了NIM游戏的理论。
NIM游戏:给出若干堆石子,每一堆石子有若干个石头,有两个人参与游戏,每一次可以在一堆石子中拿走>= 1个石头,也不能超过该堆石子石头数。问如果双方都是大佬都以最优
拿石头,先手玩家是否必赢?
结论:对于每一堆石头取异或和,如果结果为0,即为必输,否则必赢。
概念:
必输情况:每一堆石头数量都为0,异或和也为0;
先手必输状态:当前每一堆石子的异或和为0
先手必赢状态:当前每一堆石头的异或和不为0
证明:给出n堆石头s1, s2, s3 ... ,sn
1:先手必赢状态都可以一步到达先手必输状态(也就是让对手处于先手必输状态),
s1 ^ s2 ^ s3 ^ ... ^ sn = x;
x的最高位的位置是k,容易知道,一定存在奇数个石子堆的第k位也为1.
从这些石子堆任意挑选一个和x异或操作可知:
我们可以在第si中拿走(si - (si ^ x)) 个石头
故si就变成了si - (si - (si ^ x)) = si ^ x;
原来的式子就变成
s1 ^ s2 ^ s3 ^ ... ^ si ^ x ^ ... ^ sn = x ^ x = 0;
2:先手必输状态只能转化先手必赢状态,不能转变为先手必输。
反证:假设先手必输状态->先手必输状态。
s1 ^ s2 ^ s3 ^ ... ^ si ^ ... ^ sn = 0;
从第i个挑走一些得到:
s1 ^ s2 ^ s3 ^ ... ^ si` ^ ... ^ sn = 0;
由一式异或二式得到si ^ si` = 0, si = si`,矛盾。
故结论成立。
经过若干次先手必赢状态转换成先手必输,石子数只增不减,最后留个另一个玩家的先手必输状态就会变成0 0 0 0 0 ... 0;
游戏结束。