博弈论之Nim游戏

在网上看到了很多关于此类的文章,大多都讲了什么N必胜态P必败态之类的,证明也是十分的专业,数学渣渣表示都看不懂啊。经过我努力的理解,总算懂得了它的精髓,让我来谈谈对它的理解吧。

先介绍一下Nim游戏,有n堆石子,A和B轮流取任意一堆(只能一堆)中的任意数量的石子(不能不取),谁先取完谁就赢,两人总是用最优策略

Nim游戏的精髓(结论):当a1^a2^a3^……^an=0(ai表示第i堆石子的数量)时,后手必胜,否则先手必胜

^就是异或,当他们全部异或等于零时,说明每个二进制为上的1的总数量都是偶数,比如这个例子:

n=3

a=15 , 41 , 38

转成二进制就是:

15:001111
41:101001

38:100110

这样他们异或之后就是零,在三个数字中的每一个二进制位上,1的总数量总是偶数,看过其他文章的人大多都知道这么个经典的后手必赢局势:有两堆石子,它们数量相同。那么无论先手怎么取,后手在另一堆中取数量相同的石子即可,最后后手一定赢。那么在这个例子中也一样,无论先手怎么取,后手只要在某一堆中取若干个石子使得每个二进制位上的1的总数量仍是偶数即可,不一定取数量相同的,先手取完后,后手取的方法就是先找到所有一共只有奇数个1的二进制位,取它们中位数最高的那个,对那上面的1做操作,也就是去掉若干个石子,使得这个1变为0,其他的1一共只有奇数个的二进制位上各得到一个1,这样说可能十分抽象,我结合这个例子来讲吧

假如先手在第一堆取14个石子,那么就会变成:

000001
101001

100110

然后发现有三个二进制位上的1的总数为奇数

博弈论之Nim游戏_第1张图片

找到三个多出来的1,它们里面位数最高的已经标出来了,所以我们只需要对它做操作,应该说是对它所在的那堆石子做操作,因为它位数最高,所以它总有一种办法,使得减掉一些石子后使得其他的只有奇数个1的二进制位的1的数量+1,也就是变成偶数,这个例子可以这么动:后手在第二堆中取走2个,那么就会变成:

000001
100111

100110

这样子的话,每一个二进制位上的1的总数就仍然是偶数了,那么取到最后,就一定是后手获胜。

假如a1^a2^a3^……^an0时,先手只要像上面的后手一样走,先去掉一些石子,使得a1^a2^……^an=0,然后就必胜了

所以当a1^a2^a3^……^an=0时,后手必胜,否则先手必胜

你可能感兴趣的:(博弈论)