算法的优雅(六):天才的必胜法(一)

首先,我们用一个非常简单问题引入:

在初中的时候,想必数学老师都出过这样的问题(反正我们数学老师出过,大爱强姐~~~~~!!!!):两个人从1开始轮流报数,最少1个,最多3个,抢到24为胜。

分析一下,要抢到24,那么你就不能抢23,22,21了,所以,你抢到20是安全的,同理往下推,16——12——8——4——0,这些都是安全的,也是必抢的,所以可以看出来,后手通过这个策略是必胜的。

这就是我们要引出的东西,博弈问题。

提到博弈问题,就不得不说古老的NIM游戏。

NIM游戏叙述:有N个石子,两个人轮流取,可以任意取一个,或者取相邻的两个石子,期间石子的位置不能移动,最后一个将剩下石子一次取光的人获胜。

逐步分析一下

(1)N=1的时候或者N=2

只有1个石头或2个石头,显然先手的人获胜。

(2)N=3的时候

如果先手取中间的那块石头,则后手只能取第一个或者第三个,从而留下一个给先手,显然先手必胜。

(3)N=4的时候

同理(2),先手先拿走中间的2,3块石头,留下1,4,则先手必胜。

(4)N>4的时候

通过对前面的总结,我们不难发现,当N>4,先手取中间一个石子(N为奇数)或者两个石子(N为偶数),那么保证两边的石子一样多,之后先手只要根绝后手的每次取法,对称那堆取相同数目的石子,就可以保证每次都有石头取,所以先手必胜。

例如:

1 2 3 4 5 6 7 8 9

1 2 3 4 |  6 7 8 9   第一次先手取走了5,同时这个位置就是对称轴了。

1 2    4 |  6 7 8 9   第二次后手取走了3,(不一定对于后手是最优策略,只是举例而已。)

1 2    4 |  6    8 9   3和7是关于对称轴对称的,所以先手仿照后手,取走7.


总结整个问题,都是先手必胜。



如果,有N个石子,A和B两个玩家,A将石子分成若干堆,之后依次BABABABA....选取,每次每个人只能在若干堆中选取一堆从中任意数目的石子(大于0),而将剩下一次取光为胜,问A该怎么分配。


展开阅读全文

没有更多推荐了,返回首页