Nim游戏(博弈论中的组合数学问题)

余年寄山水
705次浏览
2021年01月10日 15:28
最佳经验
本文由作者推荐

显示屏黑屏-证婚人致辞

2021年1月10日发(作者:邬毅敏)


Nim游戏——博弈论中的经典问题(组合数学里的知识)

Nim取子游戏

Nim取子游戏的解依赖于奇偶性,是组合数学里的一个重要问题
Nim取子游戏就是两个人面对若干堆硬币(石子、豆粒„„)进行的游戏。设有k>=1堆
硬 币,各堆分别含有n1,n2„„nk枚硬币,按下列规则取,直到最后没硬币可取,那个人
就判输!!
规则:
1、 有两名选手,分别为I 和II
2、 两名选手交替进行取硬币活动,至少在一堆中取一枚硬币
3、 对于任何一种局面,和局面的过去与未来无关
4、 最后无硬币可取的人判输!!

推理证明:

假设两个游戏人I 、II。假设有两堆硬币n1、n2。游戏人I先 去,游戏人I能否获胜与
n1、n2的值的大小无关,而取决于n1是否等于n2.
假设n1 不等于 n2,先游戏人I取较大的堆中使其与较小的堆中硬币数目相等。然后
游戏人II取任意一堆中 的任意枚硬币,然后游戏人I取另外一堆中与游戏人II相同的数目,
直到最后,可以看出最后游戏人 I 获胜。
若n1 == n2,则游戏人I先取,游戏人II按上面的游戏人I的取法去取,最终可以看出
游戏人II 获胜。

举个例子:

(8 , 5) ---- 游戏人I --- (5 , 5) ----游戏人II --- (5 , 2) ---- I - (2 , 2) --- II —>(0,2) ---- I -- (0,0)

从两堆石子的取法可以推广到 k堆石子的取法,先来看一下,两堆石子的具体取法是怎样进
行的?

先将n1和n2表示成二进制的数的形式!!!
例如 57 = 2^5 + 2^4 + 2^3 + 2^0 = 111001
这样我们就可以将一堆硬币看成有2的幂数的子堆组成,于是57就可以看成有2^5 , 2^4 ,
2^3 , 2^0的各子堆组成。在两堆Nim取石子游戏中,各种大小的子堆的总数只能是0,1 ,2。
各种子堆的总堆数是偶数当且仅当游戏中的2堆具有相同的大小,也就是说,游戏人II获
胜。反之,游戏人I获胜。







现在考虑各堆大小分别为n1,n2,„„nk的一般的Nim取子游戏。将数ni表示成二进制数:
N1 = as„„a1 a0
N2 = bs„„b1 b0
„„„„
Nk = es„„e1 e0
当且仅当
as + bs + ….+es = 偶数
ai + bi + …. + ei = 偶数
a0 + b0 + ….+e0 = 偶数
Nim 取子游戏才是平衡的,否则,就是不平衡的

于是我们有:

游戏人I能够在非平衡的Nim取子游戏中获胜,而游戏人II能够
在平衡Nim取子游戏中获胜。
{为了判断是否是平衡的,可以运用位运算中的异或操作来实现}
Input(n); sum = 0;
For(I = 1;I <= n;I ++)
Do: Input(num);
Sum ^= num;
If(sum > 0) 非平衡状态
Printf(“游戏人I获胜”);
Else
Printf(“游戏人II获胜”); <参考poj2234 hdu 1730>

举个例子:
7、9、12、15
2^3=8 2^2=4 2^1=2 2^0=1
_________ __________________________________________________ ____________________
大小为7的堆 0 1 1 1
大小为9的堆 1 0 0 1
大小为12的堆 1 1 0 0
大小为15的堆 1 1 1 1

由此可以看到这局游戏是非平衡的,其中3 号位、2号位、0号位都是非平衡的。游戏人I
可以选择大小为12的堆并取走11枚硬币,只剩下1枚 硬币,1 = 0001,使其变成平衡的。
同理,也可以选择大小为9的堆取走5枚硬币剩下4枚 ,或者,选择大小为15的堆取走
13枚,剩下2枚硬币。
http:~limchuwecgt

qq个性网-哪天立秋


数学题解答器-属于歌词


word密码破解-唐诗三百首视频下载


人生感言-美的历程


红樱粟-欧美复古风


火车票提前几天能买-最后的那一天


网页边框-棉花姑娘


宋美龄侧卧-电子工艺实习报告