博弈

博弈
        说道博弈,首先必须说起nim游戏,nim游戏指的就是有3堆石子,现在alice和bob两个人轮流在这三堆石子中任意选择一堆石块扔掉至少一个石块,如果一个人不能进行操作那么就是定义为输。整个问题可以抽象成在一个DAG图上面,游戏中的每一个状态抽象成图中的一个点,进行一次操作相当于在图中沿着有向边进行一次移动,不能移动的一方就算是输。
        那么对于任意一个组合博弈游戏有什么解法呢,我们假设在博弈中的双方都是决定聪明的,所以如果存在必胜策略的话,那么alice一定会去选择这个必胜策略,如果一个人没有必胜策略,那么肯定就是必败态,所以我们这里对于每个状态分成两种状态,必败和必胜,当然这都是对于后手来说的,首先可以确定的就是没有出度的顶点就是 必败态,能够抵达必败态的均是必胜态,如果一个状态后继均是必败的话,那么他就是必胜态,这种方法看起来真的不错呢,只要得到这个DAG的拓扑次序,就可以递推出整个图的信息。
        但是当整个图的规模很大的时候呢,比如就像nim游戏怎么去求解呢,就要引入nim和的概念,nim和指的就是三堆石子数的异或和,有结论表明如果nim和为0,那么这个状态就是必败态,非零就是必胜态,是不是很神奇,这就要从异或的性质上去解释,将某一堆的石子减少到某一个数量对应的操作在相当于减少一个数字,很明显,最终状态异或是0,如果一个状态nim和是0,那么肯定有至少一种减少某一个数值的方法使得异或值变成0,并且如果nim和是0的话,显然所有操作方法的后继状态全部是非零的。所以异或值就等价于我们上面说的必胜必败态。
       虽然我们最开始介绍的第一种必胜必败理论能够很好的结论单个游戏中的胜负情况,但是如果是多个游戏的组合呢,状态数会大大增加,能不能像上面的nim和一样存在一种简便的方法呢,答案就是SG函数。
        SG函数就是的定义就是在一个DAG当中,如果当前状态是S,那么SG(S) = 所以后继状态中SG值中没有出现过的最小值,根据相似的定义,SG值为0 当且仅当该状态是必败态。SG函数强大的地方就在于在多个组合游戏当中,整体的SG值等于每个独立游戏的SG的异或和。
        关于证明并不是特别懂,大致的证明和我们的nim和的证明很类似,相当于任意一个SG异或和为零的状态的所有后继都是必胜态,任意一个必胜态总存在至少一个后继是必败态。前面的这些是一些最基本的理论知识。
        关于博弈的题目,白爷给出了六字真言,“找规律背结论”。

        一些基础的题目类型就是给出一些操作,我们对于整个DAG进行SG值得打表。
        cf上某题,题号不记得,给出一个正方形的边长,现在alice和bob轮流在图中放圆,圆形的半径也已经知道,alice先放,问alice是的胜负。如果alice能够放置第一个圆,那么alice就是必胜,否则必败,因为alice将第一个圆放置在正方形的中间,接下去alice就照着bob放置的放对称的圆就可以。

        hdu 3863
No Gambling永远是先手必胜,因为这个游戏和博弈还是有一点差距,你刚开始先放置一个最自己必定是肯定有优势的,所以如果这样第二个人存在必胜策略的话,先手肯定可以把这个方法拿来用,反证法,说明先手必胜。

        hdu 1525
Euclid's Game这道题很巧妙,刚开始不知道数据范围搞搞看,发现数据其实很大,后来发现如果当大数比小数大于等于两倍的时候,那么假设直接对大数取模是必胜态,那么就直接选,如果是必败态,那么我们就选到大数比小数大又不足两倍的情况,将必败留给对手。所以当大数大于两倍小数就是必胜态,其他情况是唯一后继的情况,直接递推。

        hdu 1527 取石子游戏 直接就是威佐夫博奕,威佐夫博奕指的就是在两堆中,可以有两种操作,一种是在一堆中取走一些石子,另外一种就是在两堆中取走想通数量的石子,那么直接有规律,第K个必败状态就是ai = k*( (1+sqrt(5))/2) 向下取整,bi = ai+k.

       另外一类博弈,在一个无向图当中,我们任选一个起点,然后从这个
起点开始沿着无向边走,走过的点不能重复访问,无法走动的那个判负。在这类博弈中,利用图的匹配来解决,求出这个图的每个联通分量的匹配,如果一个联通分量不是完美匹配,那么我们就选择未盖点作为起点,那么后手必将进入一个新的匹配内,我们就可以行走这个匹配,必胜,否则的话就是存在增广路,和我们的最大匹配不符。
        这个问题适用于一般图,当然也适用于二部图,如果限制了起点,做法稍微需要变通一下,先求出除起点外的最大匹配数,再求出包括的起点的匹配数,如果不等,等价于存在从起点开始的增广路,那么先手必胜,一直走下去,一定能找到一个增广路。


        树上删边的博弈,给一棵树,可以删去一条边,树下面的部分自动脱落,最后一次操作的人获胜,问胜负状态。同样可以用sg函数来解释,定义叶子节点的sg值为0,如果增加一条边,那么sg函数加1,如果一棵树由几个子树组成,那么就是他们的异或值(这里其实跟nim游戏是一样的),所以树的sg值定义为所有孩子的异或值加1的异或值。

        ANTI-SG,跟普通组合游戏的规则相同,唯一不同的是定义无法进行操作的那个人 定义为获胜。解法:定义所有终态的SG值是0,其他求法都和普通的SG求法相同。先手获胜当且仅当(1)游戏的SG值不为0并且游戏中某一单一游戏的SG值大于1。 (2)游戏的SG函数为0并且游戏中没有单一游戏的SG值大于1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值