码迷,mamicode.com
首页 > 其他好文 > 详细

基础博弈论

时间:2019-05-05 21:55:57      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:理想   情况   最小   无法   这一   条件   分析   十分   一个   

基础博弈论

博弈论,又称对策论,是现代数学的一个分支,强调一个对策,看起来十分深奥,好像古代那些军师的计谋。的确,博弈论是一门非常深奥的学科,在生活中也有不少运用,但作为信息学奥赛选手,我们没有必要去专业的学习博弈论,只需要知道一些常见的博弈论以及它的结论和证明即可。


1、巴什博弈

这是一个最常见的博弈论,我们小学都玩过。这个博弈讲的是有n个石子,两个人轮流取,每次至少要取一个,最多取m个,谁先取完谁胜,判断谁有必胜策略。

我们假设希望后手赢,那么最理想的状态就是,轮到后手取了,而剩下的石子数不超过m。记石子数为x,不难得出,这时候x的取值范围在1~m。那么,我们再往前推一步,先手还没取时x的取值范围应该在2~2m之间。但是,这里面并不是所有情况下我们都能保证后手必胜,这时候我们分别讨论它的两个边界:

①∵先手取完后剩下的石子数量必须大于0,得x-m>=1,即x>=m+1;

②∵先手取完后剩下的石子数量还不能大于m,得x-1<=m,即x<=m+1.

∴综上所述:x=m+1。也就是说,在一轮内后手必胜的情况当且仅当x=m+1。说明一下讨论的过程:我们的目的是想让后手在先手->后手这一轮内必胜,所以先手肯定不能把石子取完,换句话说就是先手取完后剩下的石子数必须不小于1;但是,既然要保证在一轮内结束,先手->后手以后不能再有剩下的石子,换句话说就是先手取完后剩下的石子数不能超过m,于是就得出了我们的结论。

既然这样,那这个问题就变得很简单了:我们已经知道一轮内后手必胜的条件,那我们如果能使整个局面划分成很多这样的“一轮”,结果不就很明显了吗?如果n可以被m+1整除,那么后手就可以控制整个局面,只要每一轮取得石子与先手取的石子的和都保持在m+1,就相当于玩了很多轮,每轮都胜,最后必胜;反之,如果无法整除,那么先手的人就可以把n取到可以被m+1整除,然后,原来的后手就处于先手的位置上了,原来的先手扮演的角色就变成了后手,谁胜谁负不言而喻。

所以,巴什博弈的结论就是:如果n除以m+1余数为0,则后手必胜;否则先手必胜。


2、尼姆游戏
尼姆游戏是一种两个人玩的回合制数学战略游戏。游戏者轮流从一堆棋子(一共有好几堆,一次只能从其中一堆拿)中取走一个或者多个,最后不能再取的就是输家。当然,这是最基本的尼姆游戏,在这个规则上可以加上五花八门的规则,使这个游戏更有趣味,思维也更加复杂。所以,我们会拿具体的例子来分析,也会随时拿新的规则来试玩。

(1)给出n堆石子,从1到n标号,每堆若干个。两个人轮流取石子,每次只能从有石子的,且标号最小的那一堆取石子,不能不取,取的数量不限,取走最后一个石子的玩家获胜。

什么意思呢?假如说我有n堆石子,那我们两个人必须先把第一堆石子取完,才能取第二堆,取完第二堆才能取第三堆,取完第三堆才能取第四堆......这样的话,我想要取胜,就要保证最后取完n-1堆后轮到我,这样我就可以直接取完。那么,我肯定要找到一种能让我在小范围必胜的策略,而且要能够将整个局面划分成很多个这样的小范围。所以,不妨先考虑对于两堆石子我们的策略,一堆就是先手必胜了,不必考虑。假设我是先手,那么两堆石子,我想要让这堆石子由后手取完,我该怎么做?实际上,让后手取完这堆石子,实际上就是让我在开始取新的一堆石子时保持先手,这要如何实现呢?

不要着急,我们缩小规模,从两堆石头开始讨论,注意是两堆,一堆的话没啥好说的。现在要让先手赢,先手有这两种操作:取完,不取完。取完的话,先手就输了。那么我们肯定不能取完。来到后手,根据上面的推导,同样可以得出后手不能取完,于是就这样僵持着......会不会有个尽头呢?会!因为题目有说,每一次不能不取,也就是最少取一个,那如果取到只剩下一个石子,你不想取也得取,这就是我们的突破口:

如果石子的数量为1,那么下一堆石子的先手权就到了另一个人手上。因此,如果我们想要让先手得到下一轮的先手权,我们的做法就是将这堆石子取到只剩一个,那后手只好取完这堆石子,我们拿到了下一堆石子的先手权,可以用同样的方法,获得再下一堆的先手权......这样,最后一堆石子必然是由我们取完。

但是,如果中间原先就有数量为1的石子堆,怎么办?1的作用是让先手权转移,假如下一堆只有1个石子,那这时候我就不会再想要下一轮的先手权了,因为再下一轮我就没有先手权了,那么我们可以把当前这堆石子取完,让另一个人拿到下一堆石子的先手权,那再下一堆石子先手权又回到我们手上了。如果有连续的1呢?实际上,连续的1是可以抵消的,偶数个1其实就相当于没有1,奇数个1就相当于一个1,因为你的先手权转移两次相当于没转。所以,我们采取必胜策略的情况下,当有奇数个1的时候,我们就把当前这堆石子取完;否则就按照正常的情况,取到剩下一个。综上所述,只要我们当前的石子数量不为1,我们总有方法掌控全局,让先手必胜。

但是!如果我们开头就是1呢?那这样的话,先手就没有任何策略可以使用了,只能乖乖地将先手权让出去,这是先手唯一可能失败的情况。如果开头就是1,我们就要判断连续1的个数是奇数还是偶数,如果是奇数那先手必败,这时候的先手的处境就像我们上文的后手。如果是偶数,那么先手又赢了。说了半天,我们最终得到一个结论:对于这道题,判断胜负的依据就是开头连续1的个数。所以我们只需记录开头1的个数即可,但值得一提的是,我们对于这些石子堆的讨论终止于第n-1堆石子,什么意思?我们不需要考虑第n堆石子,因为第n-1堆石子就可以决出胜负了,所以,在记录连续1的个数是,最多只能记录到第n-1堆,也就是说如果用i来表示当前堆的编号,那么i<n。

来源于YZOJ 1698(作者争取尽快弄到洛谷上)

未完待续

基础博弈论

标签:理想   情况   最小   无法   这一   条件   分析   十分   一个   

原文地址:https://www.cnblogs.com/wuxiangnong/p/10787390.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!