博弈论详解 2(SG函数 和 SG定理)

news/2024/9/18 14:54:30/ 标签: 博弈论, 笔记, 数学建模

传送门:博弈论详解 1(基本理论定义 和 Nim 游戏)

什么是 SG 函数

接着上次的讲解,我们来了解一个更通用的模型。我们把每一个状态变成一个点(在 Nim 游戏里就代表 a a a 数组),如果可以从一种状态转移到另一种状态,就在它们之间连一条有向边(在 Nim 里就是从 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an a 1 ′ , a 2 , . . . , a n ( a 1 ′ < a 1 ) a_1',a_2,...,a_n(a_1'<a_1) a1,a2,...,an(a1<a1))根据公平博弈游戏的性质(有限步),这张图应当是 DAG(有向无环图)。真的是吗?似乎不是,在一些游戏里,它可能是多个 DAG(当然,你把 Nim 游戏的每个 a i a_i ai 的变化看成独立的一张图也不是不可以,输的条件就是每个 DAG 都走到了最终局面 0 0 0)。不过为了方便,我们先考虑一个 DAG 的情况。

SG 函数的定义与计算

设有向边的集合是 E E E,那么 s g ( x ) = M E X ( s g ( x ′ ) ) ( { x , x ′ } ∈ E ) sg(x)=MEX(sg(x')) (\{x,x'\}\in E) sg(x)=MEX(sg(x))({x,x}E),所以 s g sg sg 函数需要用拓扑序逆序进行计算。

MEX(X) 是指不包含在整数集合 X 中的最小非负整数,如果 X 是空集,MEX(X)=0。

举个简单的例子,下图中每个点旁边的数字式是 s g sg sg 函数值。
在这里插入图片描述

SG 函数与必胜条件 C

最终局面,即出度为 0 0 0 的点(图中标蓝)的 s g sg sg 函数值是 0 0 0,推测必胜条件 C C C s g ( x ) ≠ 0 sg(x)\ne0 sg(x)=0

对于 C C C 需要满足的三个条件进行证明(博弈论详解 1 中加粗的那三条):
第一个条件:从一个 s g ( x ) ≠ 0 sg(x)\ne0 sg(x)=0 的点 x x x,必然能走到一个点 x ′ x' x,使 s g ( x ′ ) = 0 sg(x')=0 sg(x)=0,否则 s g ( x ) = 0 sg(x)=0 sg(x)=0。符合。
第二个条件:从一个 s g ( x ) = 0 sg(x)=0 sg(x)=0 的点 x x x,必然走不到一个点 x ′ x' x,使 s g ( x ′ ) = 0 sg(x')=0 sg(x)=0,否则 s g ( x ) > 0 sg(x)>0 sg(x)>0。符合。
第三个条件:最终局面出度为 0 0 0 x ′ x' x 的集合为空,其 s g sg sg 函数值为 0 0 0。符合。

结论:在一个 DAG 中,某个状态的必胜条件是 s g ( x ) ≠ 0 sg(x)\ne0 sg(x)=0

一个DAG到多个DAG——SG 定理

定理:对于一个由 n n n 个 DAG 组成的游戏,设第 i i i 张图当前状态是 s g 1 , s g 2 , . . . , s g n sg_1,sg_2,...,sg_n sg1,sg2,...,sgn(一开始就是每张图的初始状态),全局的状态就是这些 s g i sg_i sgi 的集合。定义 SG 和, s u m = s g 1 ⊕ s g 2 ⊕ . . . ⊕ s g n sum=sg_1\oplus sg_2\oplus...\oplus sg_n sum=sg1sg2...sgn,必胜条件 C C C s u m ≠ 0 sum\ne0 sum=0

这里第一个条件的验证方法和 Nim 游戏的验证方法很像,读者可以尝试自己推算,要注意 MEX 的性质。
第一个条件:假设 s u m ( s u m ≠ 0 ) sum(sum\ne0) sum(sum=0) 最高位的 1 1 1 表示 2 k 2^k 2k,则存在 s g i sg_i sgi 的第 k k k 位是 1 1 1。由于 s u m sum sum 在比 k k k 更高的位置上都是 0 0 0,所以 s g i sg_i sgi 在异或 s u m sum sum 之后第 k k k 位变成 0 0 0,而更高位上的数字不变,得到 s g i ⊕ s u m < s g i sg_i\oplus sum<sg_i sgisum<sgi。根据函数定义,从代表 s g i sg_i sgi 的点连出去的边指向的点中一定有一个点的 s g sg sg 函数值是 s g i ⊕ s u m sg_i\oplus sum sgisum(用了 MEX,只要小于 s g i sg_i sgi 的非负整数一定出现在了相邻的点上)。如果从 s g i sg_i sgi 的点移到 s g i ⊕ s u m sg_i\oplus sum sgisum 的点,那么 s u m 新 = s u m 原 ⊕ s g i ⊕ ( s g i ⊕ s u m 原 ) = 0 sum_{新}=sum_{原}\oplus sg_i\oplus(sg_i\oplus sum_{原})=0 sum=sumsgi(sgisum)=0。可以从满足 C C C 的状态走到不满足 C C C 的状态,符合。
第二个条件:如果此时 s u m = 0 sum=0 sum=0,要使其仍然是 0 0 0,必须找到一个 s g i sg_i sgi,他的边指向的点中有一个点的 s g sg sg 函数值与 s g i sg_i sgi 相等,此时 s u m sum sum 不变。而 MEX 的集合里面如果有一个数 x x x,结果一定不是 x x x。从不满足 C C C 的状态只能走到满足 C C C 的状态,符合。
第三个条件:当所有 s g i sg_i sgi 都是最终局面,无法进行任何操作的时候,所有的 s g i sg_i sgi 都是 0 0 0,此时 s u m = 0 sum=0 sum=0,符合。

结论:对于多个 DAG 的游戏,某个状态的必胜条件是 s u m = s g 1 ⊕ s g 2 ⊕ . . . ⊕ s g n ≠ 0 sum=sg_1\oplus sg_2\oplus...\oplus sg_n\ne0 sum=sg1sg2...sgn=0
基础应用练习题附做法:ABC 368 F

结语

我今天其实也是现学现卖的(做个总结),前几天的 ABC 和 CSP-S 2019 初赛真题 都考到了博弈论,我一脸懵 ε=ε=ε=(#>д<)ノ,所以学了一下。
希望读者能看懂本人的讲解,如果哪里有错,欢迎大佬指正!


http://www.ppmy.cn/news/1516792.html

相关文章

安装Win10操作系统时找不到任何驱动器的解决方法

安装Win10操作系统时找不到任何驱动器的解决方法 有时候在一台新电脑上使用U盘安装系统时提示&#xff1a;我们找不到任何驱动器。 如下图所示&#xff1a; 解决方法&#xff1a; 一、按F12&#xff08;不同电脑进入Bios的按键可能不同&#xff09;将电脑进入Bios画面&#xf…

DataX(Doris同步数据到SelectDB)

背景 由于之前的doris数仓在本地的服务器&#xff0c;当数据量越来越大&#xff0c;服务器的性能达不到要求&#xff0c;查询数据经常超时&#xff0c;故需要把本地的doris数仓部署到云上&#xff0c;本文以阿里云为例&#xff0c;迁移工具使用的阿里开源的datax。 datax官方文…

client网络模块的开发和client与server端的部分联动调试

客户端网络模块的开发 我们需要先了解socket通信的流程 socket通信 server端的流程 client端的流程 对于closesocket()函数来说 closesocket()是用来关闭套接字的,将套接字的描述符从内存清除,并不是删除了那个套接字,只是切断了联系,所以我们如果重复调用,不closesocket()…

20240828 每日AI必读资讯

8岁女孩玩转AI编程&#xff0c;45分钟打造聊天机器人&#xff0c;Karpathy都看呆了 - 新晋顶流AI代码编辑器——Cursor&#xff0c;已经进化到了“0手工代码”阶段。 - 提供了多个AI模型&#xff0c;包括GPT-4、GPT-4o和Claude 3.5 Sonnet等&#xff0c;可以通过跟大模型聊天…

微服务——远程调用

为什么需要远程调用&#xff1f; 在微服务架构中&#xff0c;每个服务都是独立部署和运行的&#xff0c;它们之间需要相互协作以完成复杂的业务逻辑。因此&#xff0c;远程调用成为微服务之间通信的主要方式。通过远程调用&#xff0c;一个服务可以请求另一个服务执行某些操作或…

【Python机器学习】NLP概述——词序和语法

词的顺序很重要&#xff0c;那些在词序列&#xff08;如句子&#xff09;中控制词序的规则被称为语言的语法&#xff08;也被称为文法&#xff09;。这是之前的词袋或词向量例子中所丢弃的信息。在大多数简短的短语甚至许多完整的句子中&#xff0c;上述词向量近似方法都可以奏…

设计模式 7 桥接模式

设计模式 7 创建型模式&#xff08;5&#xff09;&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式&#xff08;7&#xff09;&#xff1a;适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff0…

整合sentinel遇到的小问题

1.运行jar包 &#xff0c;端口为默认8080 正确命令 java -Dserver.port8090 -Dcsp.sentinel.dashboard.server127.0.0.1:8090 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.6.jar -D这些指令要在 -jar前面 在宝塔部署时&#xff0c;直接复制到运行命令后…

vue事件监听

我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件&#xff0c;并在事件触发时执行对应的 1.回车事件&#xff08;点击回车触发&#xff09; confirm 适用uni-app keyup.enter 适用vue3 运用场景&#xff1a;通常在文本框输入的时候使用 2.点击事件&#xff08;鼠标左键…

Cubase操作:如何修改每个音频块的名字 写歌习惯

如何修改每个音频块的名字 我对命名比较注重&#xff0c;之前用Cubase12&#xff0c;导入我手机中编辑过的Cubasis的工程时&#xff0c;发现中文部分有乱码…… 而且好像改名改得很费劲…… 后面通过多方咨询和探索思考&#xff0c;终于找到方法了&#xff01; 可以先把信息…

【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondTopCount

这段代码定义了一个名为 GH_Ex_Ana_CondTopCount 的 Grasshopper 组件。它的主要功能是为 Excel 中的一个范围添加条件格式&#xff0c;具体是根据数值的大小高亮显示前N个&#xff08;或后N个&#xff09;数值。以下是该组件的详细介绍&#xff1a; 功能概述&#xff1a; 组件…

灵办AI搜索引擎和文档总结工具

前言—— 在信息爆炸的时代&#xff0c;如何高效地获取和处理知识成为了每个人面临的挑战。随着人工智能技术的迅猛发展&#xff0c;本文将深入探讨这一创新工具的功能与优势&#xff0c;以及如何在日常生活和工作中充分利用它&#xff0c;开启智能化的信息获取新篇章。 点击…

Part3-DOM学习笔记-操作元素

5.操作多个元素 5.1 排他思想 前面所述均为操作一个元素&#xff0c;给一个元素注册事件&#xff0c;如果是一组元素&#xff0c;就需要用循环的方式给元素注册事件。 我们想要给当前的元素实现某种样式&#xff0c;而其他的元素没有这个样式&#xff0c;这就需要用到排他思…

P2709 小B的询问

*原题链接* 非常简单的莫队板子题&#xff0c;让我们求出区间[l,r]中每个数出现次数的平方和&#xff0c;设枚举到,原来答案是res&#xff0c;如果加上后&#xff0c;则原来的变为&#xff0c;即res相比原来加上&#xff0c;删除同理。知道如何维护一个数的添加和删除后&#…

WIFI 配网

配网:指的是外部向WiFi模块提供SSID和密码&#xff0c;以便Wi-Fi模块可以连接指定的热点 常见的配网方式有:-键配网smart config、SoftAP配网、蓝牙配网、屏幕配网。 1.0 一键配网 2.0 蓝牙配网 一键配网的模式对应的厂加模式 3.0 状态机WIFI模组物联网 4.0 创建枚举结构体 ty…

Vue3.0项目实战(二)——大事件管理系统登录注册功能实现

目录 1. 登录注册页面 [element-plus 表单 & 表单校验] 1.1 注册登录 静态结构 & 基本切换 2. 注册功能 2.1 实现注册校验 2.2 注册前的预校验 2.3 封装 api 实现注册功能 3. 登录功能 3.1 实现登录校验 3.2 登录前的预校验 & 登录成功 1. 登录注册页面 […

Go反射四讲---第三讲:如何使用反射操作函数,获取函数的相关信息?

反射-函数 这是我们反射四讲的第三讲&#xff0c;本次给大家讲解如何使用反射处理函数相关的操作。 在这一部分&#xff0c;向大家展示如何输出方法的信息并执行调用。 输出信息&#xff0c;包含方法名&#xff0c;方法参数&#xff0c;返回值。 最后&#xff0c;如何使用反…

【小趴菜前端实习日记4】

el-table数据更新视图不更新的问题、el-dialog居中展示、el-form表单验证之对象属性验证、vue2过滤器 一、el-table数据更新视图不更新的问题二、el-dialog居中展示三、el-form表单验证之对象属性验证四、vue2过滤器 一、el-table数据更新视图不更新的问题 手动触发元素更新&a…

Linux:Socket网络编程

目录 1. 理解源 IP 地址和目的 IP 地址 2&#xff1a;认识端口号 3&#xff1a;端口号范围划分 4&#xff1a;理解源端口号和目的端口号 5&#xff1a;理解Socket(套接字) 6&#xff1a;两个传输协议 &#xff08;TCP/UDP&#xff09; 6.1&#xff1a;User Datagram Prot…

打卡55天------图论(并查集)

图论这里我学的不是很好&#xff0c;作为一名JavaScript前端开发工程师&#xff0c;我能说我基本上在工作中都没用到过吗&#xff1f; 一、并查集理论基础 这个说句实话&#xff0c;我平常工作很少用到&#xff0c;上学的时候好像也没学过&#xff0c;可能我只是本科生吧&…