[您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (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 == ...
随机推荐
- 解决非controller使用,@Autowired或者@Resource注解注入Mapper接口为null的问题
知识点:在service层中注入其它的service接口或者mapper接口都是可以的 但是在封装的Utils工具类中或者非controller普通类中使用@Autowired@Resource注解注 ...
- CSP201312-3:最大的矩形
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- RyuBook1.0案例三:REST Linkage
REST Linkage 该小结主要介绍如何添加一个REST Link 函数 RYU本身提供了一个类似WSGI的web服务器功能.借助这个功能,我们可以创建一个REST API. 基于创建的REST ...
- 启动sshd时,报“Could not load host key”错
原文发表于cu:2016-05-24 现象:启动sshd服务时,虽看似服务启动成功,但客户端并不能连接上sshd服务器端.如下: [root@aefe8007a17d ~]# /usr/sbin/ss ...
- AndroidArchitecture
title: AndroidArchitecture date: 2016-04-08 23:26:20 tags: [architecture] categories: [Mobile,Androi ...
- 根据Unicode码生成汉字
最近需要一批汉字字符数据,类似数字字符与ASCII码之间的对应关系,汉字字符与Unicode码之间也存在对应关系. 所以可以遍历Unicode码批量生成汉字. 其中,汉字为宽字符,输出时候注意需要修改 ...
- centos上搭建git服务--2
在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.window ...
- Factorials 阶乘(思维)
Description N 的阶乘写作N!表示小于等于N的所有正整数的乘积.阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了.你的任务是 找到阶乘最后面的非零位.举 ...
- Android源码项目目录结构
src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前 ...
- 周总结<7>
这周和3位朋友一起完成了系运动会的视频,感受很多,也学到很多. 周次 学习时间 新编代码行数 博客量 学到知识点 14 20 100 1 Html页面设计:虚拟机:(C语言)最小生成树与最短路径 Ht ...