经典的博弈问题及算法(适合新手学习)

博弈是一个神奇的算法,想要搞懂它的原理并且推导出来是很难的,所以这里咱们就只写一些基本的博弈算法及其结果常见的博弈问题

一.巴什博弈

n个石子,每次至少取1,至多取m,如果n是(m+1)的倍数则后者胜

变形:条件不变,改为最后取光的人输。

如果条件是最后取光者失败,那么当先手面临的局势是(n-1)%(m+1)==0时,先手必败。

二.斐波那契博弈

一堆石子,每次至少取1,至多取上次的2倍 若n为斐波那契数列,则后手胜

三.威佐夫博弈:

有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。

直接说结论了,若两堆物品的初始值为(x,y),且x

记w=(int)[((sqrt(5)+1)/2)*z ];

若w=x,则先手必败,否则先手必胜。
四.尼姆博弈

尼姆博弈指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。

结论就是:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜。

五.环形博弈

n个石子围成一个环,每次可取走1个或相邻的两个,注意若两个石子之间的石子被取走,这两个石子仍然是不相邻的

这个博弈若n<=2则先手胜,否则后手胜
六.对称博弈

    n个石子围成环,每次只能取相邻的一个到k个之间

      如果k < n:

                    对k=1,如果n能被2整除,则后手赢

                    如果k>1,后手赢(先手取什么位置后手就取对称的位置,这样保证后手永远能取到)

       如果k>=n:

                    先手赢.  

七.减法博弈
规则如下:

有两个游戏者,A和B。
桌上有n颗石子。
每次操作可以取走1或2或3颗石子,不可以不取。
从A开始取,AB轮流操作。
最后一个可以取石子的人赢。没有石子可取的人输。
我们从结局开始分析到初始状态,这个方法有时被称为逆向归纳法。
我自己感觉这个方法对我启发很大。

如果只剩下1,2 或 3 颗石子,下一个操作的人可以拿走全部石子成为赢家。

假设剩下 4 颗石子,下一个操作的人必须要拿走1,2 或 3 颗石子,那么他的对手成为赢家。所以面对 4 颗石子的人会输,前一个留下这 4 颗石子的人会赢。

如果剩下5,6 或 7 颗石子,那么下一个操作的人可以取到剩下 4 颗石子,他就赢了。

如果剩下 8 颗石子,那么下一个操作的人肯定会取到剩下5,6,7 颗石子,那么前一个人就赢了。

我们可以看到 0,4,8,12,16… 是目标局面,我们希望操作之后转移到目标局面。

我们现在可以分析这个游戏。n是否是4的倍数是关键。

你可能感兴趣的:(知识整理)