[您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (SJ定理,简单的基础模型)
这次,我们来继续学习博弈论的知识。今天我们会学习更多的基础模型,以及SJ定理的应用。
首先,我们来看博弈论在DAG上的应用。首先来看一个小例子:在一个有向无环图中,有一个棋子从某一个点开始一直向它的出点移动,双方轮流操作,无法操作者输,问是否先手必胜。
考虑一下我们之前的Nim游戏,如果我们把后继状态看成后继点的话,不难发现Nim游戏的互相转移也是一个DAG。因此,DAG上出度为0的点的sg值为0,再用上一篇博客提到的mex操作来求每个点的值就可以了(注意,这并不是一个“大”子图,不能拆成子游戏,因此不能异或了!)。在图上的递推操作是O(n)的,按照逆向拓扑序递推即可;如果有向无环图有多个,又怎么办呢?那么显然这个时候就可以异或了,直接计算即可。
接下来,我们来看一种Anti-SG游戏。顾名思义,这种游戏和一般的SG函数游戏不太一样:在这种游戏中,最后不能行动的人反而是赢家。那么现在怎么判断一个状态是N-Position(必胜)还是P-Position(必败)呢?
首先,很显然,如果有奇数个大小为1的石子堆,则先手必败;如果有偶数个,则先手必胜。
接着,我们从最简单的情况开始考虑,石子堆全是1的状态,肯定是由恰好有一个石子堆大于1个的状态走过来的
那么,谁拿到了这个状态,谁就能获胜。因为拿到这个状态的人可以通过控制最大那堆石子剩下的个数(1个或者0个)来使自己必胜
那么我们继续考虑。如果有一个人可以拿到这个先手必胜的状态,他一定是在初始状态是就“先手必胜”了。而初始状态的“先手必胜”和上一条的“先手必胜”意义不同:这里的初始状态先手必胜,指的是他能控制游戏的走向,从而使自己能拿到想要的状态,因此这里的“先手必胜”和Nim游戏一样,要求子游戏异或和大于0即可;而在拿到上述恰好有一个石子堆大于1个的状态之后,他一定是必胜的。
因此,只要初始的石子状态不是全为1,我们仍然可以用Nim的异或和做法来判断;而当状态全是1时,我们直接根据堆数奇偶判断即可。上面这些东西的学名就叫做“SJ定理”。如果不是取石子游戏,而是其他不确定sg计算方法的游戏(有向图游戏,台阶游戏……均可),我们可以先假设不能移动者赢,求出sg函数计算式,再利用SJ定理转化求解。
接下来,我们再来看一种新游戏模型:Muitl-SG游戏。这种游戏允许取走某些东西后,使原游戏呗分成几个新游戏。我们来看一道小例题:有n排石子,每次要从其中的一排中取出相邻的两个石子。无法操作者输。
这种问题如何操作呢?不难发现,在取走这两个石子后,原来的大游戏的后继状态变成了2个(或1个)子游戏。而我们知道,在符合条件时,异或可以对子游戏进行加和操作。所以,这个大游戏的后继状态的sg值,就是这个后继游戏状态中新产生的石子堆sg值的异或和,然后我们对后继状态的sg值再取异或和,就得到了这个大游戏状态的sg函数值。
我们再看一个更加复杂一点的游戏:Every-SG游戏。这种游戏除了是输赢的博弈之外,还是时间的博弈。我们看一道小例题:
有n个同时进行的游戏,每次都必须在还未结束的游戏中进行一步操作,不能在任何游戏里操作的人输。很明显,这个游戏的胜利在于不断在必胜的游戏中续命拖长时间,在必败的游戏里速战速决。那么我们可以在递归搜索时额外加入如下的语句,维护从这个游戏状态开始,最长的持续时间:
对于必胜状态的步数要最大化,必败状态的步数要最小化,双方都是如此。
显然,先手必胜局面的步数一定是奇数,所以所有游戏中,最长步数若是奇数,先手必胜,否则先手必败。
今天我们介绍了4种博弈论的经典模型,并且还引入了SJ定理这一新的工具。下一次,我们会结合不同模型的经典例题来继续了解博弈论这个神奇的知识点。希望我的博文给你带来了帮助~:)
[您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (SJ定理,简单的基础模型)的更多相关文章
- [您有新的未分配科技点]博弈论入门:被博弈论支配的恐惧(Nim游戏,SG函数)
今天初步学习了一下博弈论……感觉真的是好精妙啊……希望这篇博客可以帮助到和我一样刚学习博弈论的同学们. 博弈论,又被称为对策论,被用于考虑游戏中个体的预测行为和实际行为,并研究他们的应用策略.(其实这 ...
- [您有新的未分配科技点] 无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MB Description Input 输入的第1 行包含两个数N 和M(M ≤20 ...
- [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)
今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...
- [您有新的未分配科技点]可,可,可持久化!?------0-1Trie和可持久化Trie普及版讲解
这一次,我们来了解普通Trie树的变种:0-1Trie以及在其基础上产生的可持久化Trie(其实,普通的Trie也可以可持久化,只是不太常见) 先简单介绍一下0-1Trie:一个0-1Trie节点只有 ...
- [您有新的未分配科技点]数位DP:从板子到基础(例题 bzoj1026 windy数 bzoj3131 淘金)
只会统计数位个数或者某种”符合简单规律”的数并不够……我们需要更多的套路和应用 数位dp中常用的思想是“分类讨论”思想.下面我们就看一道典型的分类讨论例题 1026: [SCOI2009]windy数 ...
- [您有新的未分配科技点]数位dp:从懵X到板子(例题:HDU2089 不要62)
数位dp主要用来处理一系列需要数数的问题,一般套路为“求[l,r]区间内满足要求的数/数位的个数” 要求五花八门……比如“不出现某个数字序列”,“某种数的出现次数”等等…… 面对这种数数题,暴力的想法 ...
- [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树
这次我们来搞一个很新奇的知识点:克鲁斯卡尔重构树.它也是一种图,是克鲁斯卡尔算法求最小生成树的升级版首先看下面一个问题:BZOJ3545 Peaks. 在Bytemountains有N座山峰,每座山峰 ...
- Elasticsearch 学习之 分片未分配原因
分片未分配的原因主要有: 1)INDEX_CREATED:由于创建索引的API导致未分配.2)CLUSTER_RECOVERED :由于完全集群恢复导致未分配.3)INDEX_REOPENED :由于 ...
- centos7 挂载未分配的硬盘空间
=============================================== 2019/7/28_第1次修改 ccb_warlock == ...
随机推荐
- 【HNOI2014】世界树
题面 题解 虚树好题(只是细节太多) 构出虚树后,一定要仔细梳理关键点之间的点是上面属于父亲,下面属于儿子. 然后二分出所有的点的所属就可以了 代码 #include<cstdio> #i ...
- Apache入门篇(三)之apache2.4.33的新特性解析与虚拟主机实战
1.http 2.4新特性 新特性: (1) 在编译时可以将多个MPM构建为可加载模块,可以在运行时通过LoadModule指令配置所选的MPM: (2) 2.2版本的event MPM在实验阶段,到 ...
- .NET core 项目部署在windows 服务器方法以及iis 访问报 500.19错误的解决办法
将本地发布的服务本地运行没问题,发布上云windows 服务器就报 500.19 0x8007000d 是因为云服务器没有安装.net core相关的插件,比如.NET CORE sdk等,请按照该文 ...
- equals和==方法比较(二)--Long中equals源码分析
接上篇,分析equals方法在Long包装类中的重写,其他类及我们自定义的类,同样可以根据需要重新equals方法. equals方法定义 equals方法是Object类中的方法,java中所有的对 ...
- 内容安全策略(CSP)
内容安全策略(CSP),其核心思想十分简单:网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的与什么是需要被禁止的.其被誉为专门为解决XSS攻击而生的神器. 1.CSP是什么 CSP指的是 ...
- selenium自动化之元素高亮显示
目的: 在UI自动化的时候,有时候我们需要查看运行的过程.为了更好的显示这个过程,可以进行元素高亮,以显眼的颜色来提示测试人员目前的操作在哪一步. 解决办法: 使用js代码来将元素的背景颜色和边框颜色 ...
- loadrunner11--基础使用
每次开启电脑都需要破解一次Lr,汉化版的有问题,建议使用英文版的.我测试的环境是Windows7+IE8+LR11.(在Windows10上试过,谷歌和IE11都不能正常运行),以下我会具体来操作,最 ...
- 2018-2019-20172321 《Java软件结构与数据结构》第四周学习总结
2018-2019-20172321 <Java软件结构与数据结构>第四周学习总结 教材学习内容总结 第六章 6.1列表集合 列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行 ...
- 按Right-BICEP要求的对任务二的测试用例
测试方法:Right-BICEP 测试计划 1.Right-结果是否正确? 2.B-是否所有的边界条件都是正确的? 3.P-是否满足性能要求? 4.是否有乘除法? 5.是否有括号? 6.是否有真分数? ...
- Pyhont:内建函数enumerate
1.enumerate的中文意思 2.enumerate参数为可遍历的变量,如字符串.列表等,其返回值为enumerate类. 3.enumerate多用在for循环中得到计数 . [注]:若在for ...