博弈论总结(只会打表,永不证实)(博弈论)

概述

博弈论的研究对象是一类游戏,有特定的模型。html

基础模型——先手必胜仍是后手必胜?

好像有个专门的名词叫作Impartial Combinatorial Games(简称ICG)函数

大概的定义以下:spa

整个游戏能够抽象成一个DAG;.net

每一个点都表明游戏过程当中的某个决策状态(特殊的,出度为0的点是游戏的终止状态);htm

每条边都表示能够从某个状态,通过直接的一次操做,转移到另外一个状态。对象

有两个玩家,从指定的某个状态开始,依次执行操做,谁先由于当前到达了终止状态而没法操做的人输。blog

由于是DAG,因此必定会转移到终止状态的。游戏

问题就是,从某状态开始,先手必胜仍是后手必胜?get


举个栗子——Nim游戏的一个变种博客

有一堆$n$个石子,每次能够取$1-k$个,当前没法操做的人输,问是否先手存在必胜策略?

对于这种问题,对于以每一个状态为起点的状况,咱们都会惟一肯定是先手必胜仍是后手必胜。

这应该是很好想,几乎不用证实的。

能够对每一个点标记两种状态N和P,分别表示先手必胜和后手必胜

首先根据定义,终状态为P

而后,全部能直接到达终状态的状态就为N了

进一步推广,若是某点的出边指向的点的集合中,有至少一个点为P,那么这个点为N;不然就为P。

好比对于上面提到的栗子

对每一个状态都标号为当前剩余石子数

那么$0$是P,$1-k$就都是N,$k+1$是P。。。。。。

接着就能够推出当且仅当$(k+1)\mid a$时a是P。

对于这种基础的问题,枚举状态建好图后DP或者记忆化搜索就能够快速解决了。

模型升级——SG函数与SG定理

博弈论所涉及到的更多的游戏,会把若干ICG拼凑在一块儿,成为一个规模更大的模型。

好比说上面那个Nim游戏变种的升级版——

有$n$堆石子,每堆$a_i$个,每次能够取$1-k$个,当前没法操做的人输,问是否先手存在必胜策略?

这时候,若是仍沿用上面的方法求解,咱们会发现状态维度很大,时间和空间根本承受不了。

这里介绍SG函数与SG定理,详细证实就算了,我太弱了。

strangedbly巨佬的博客给出了十分易懂的证实,我的力荐。

定义运算$mex(S)$(S是一个天然数集合),结果为S中未出现的最小天然数。

定义$SG(i)$(i是一个状态,在图中是一个点)为对全部$i$可直达状态(在图中与i经过有向边链接的全部点)的SG函数值取mex的值,即。

$$SG(i)=mex({j\mid SG(j),(i,j)\in G})$$

定义SG定理:点$i$为P当且仅当$SG(i)=0$

若干ICG(能够不相同)组合在一块儿的游戏,把每一个游戏的SG值异或起来,不为0则先手必胜。


接着对例子分析一下。

能够发现,对于单堆石子来讲,剩零个时$SG$值为$0$,剩一个时为$1$。。。剩$k$个为$k$,剩$k+1$个时由于不能转移到零个,$SG$值又变成了$0$。。。。。。

这能够说明SG函数对于判断状态为N仍是P是很是有效的。

那么对于若干堆石子(即整个升级版游戏)来讲,胜负又会如何呢?只要把这若干个$SG$值都异或起来就彻底OK啦。

#实现

简单的ICG可直接经过递推、DP等方法推导出全部点的状态。固然,若是找到规律,能够直接$O(1)$判断都说很差。

多个ICG的组合游戏,则必定是离不开SG函数的。

但假如点很是多,或者每一个点的后继肯定起来很是麻烦的时候,DP是不能解决问题的。

那怎么办?那确定是有规律啊!一眼看不出规律怎么办?可别忘了打表啊!

固然,打表也是有技巧的。至于如何如何,蒟蒻也说不出什么门道来,仍是多刷题为上上策。

#题目

相关文章
相关标签/搜索