您的位置:首页 > 其它

Nim Game (博弈论)

2012-12-04 12:40 190 查看
Nim 游戏类型

简介:

有两个玩家;

有n堆扑克牌(比如:有三堆,可以分别是 5,7,9张);

游戏双方轮流操作;

玩家的每次操作是选择其中某一堆牌,然后从中取走任意张;

最后一次取牌的一方为获胜方;



定义P-position和N-position,其中P代表Previous,N代表Next。直观的说,上一次move的人有必胜策略的局面是P-position,也就是“后手可保证必胜”或者“先手必败”,现在轮到move的人有必胜策略的局面是N-position,也就是“先手可保证必胜”。

x更严谨的定义是:1.无法进行任何移动的局面(也就是terminal position)是P-position;2.可以移动到P-position的局面是N-position;3.所有移动都导致N-position的局面是P-position.



nim-sum :

定义: 假设 (xm · · · x0)2 和(ym · · · y0)2 的nim-sum是(zm · · · z0)2,则我们表示成 (xm · · · x0)2 ⊕ (ym · · · y0)2 = (zm · · · z0)2, 这里,zk = (xk + yk) mod 2(k=0…m).

亦即异或运算。

按位异或运算符"^"是双目运算符。其功能是将参与运算的两操作数各对应的二进制位进行异或操作。只有对应的两个二进位不相同时,结果的对应二进制位才是 1,否则为 0。

例如:表达式“21 ^ 18 ”的值是 7(即二进制数 111)。

异或运算的特点是: 如果 a^b=c, 那么就有 c^b == a 以及 c^a==b。



结论:

对于一个Nim游戏的局面(a1,a2,...,an),它是P-position(必败点)当且仅当 a1^a2^...^an=0 反之,当a1^a2^...^an != 0 时是N-position(必胜点).



根据定义,证明一种判断position的性质的方法的正确性,只需证明三个命题: // 证明的重点

1、这个判断将所有terminal position判为P-position;

2、根据这个判断被判为N-position的局面一定可以移动到某个P-position;

3、根据这个判断被判为P-position的局面无法移动到某个P-position



证明1:结束位置(terminal position) 必然是P点(必败点)

证明2:对于某个局面(a1,a2,...,an),若a1^a2^...^an != 0,一定存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an = 0。

取出ai: 设: a1 ^ a2 ^ ... ^ ai-1 ^ ai+1 = k 将k转换成二进制不为零的数。 则定可找出一个 ai* 使k(2) ^ ai 变为 0. ai -> ai* (即合法的移动一步)

证明3: 对于某个局面(a1,a2,...,an),若a1^a2^...^an=0,一定不存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。

假设成立,则有 a1 ^ a2 ^...^ ai ^ ... ^ an = 0 且 a1 ^ a2 ^...^ ai* ^ ... ^ an = 0

因为异或运算满足消去率,由a1^a2^...^an=a1^a2^...^ai*^...^an可以得到ai=ai*。所以将ai改变成ai*不是一个合法的移动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: