博弈论之SG函数
参考自《算法竞赛进阶指南》
博弈:
堆物品,第堆物品有个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品的人获胜。假设两人每一步都必然采取最优的策略。问先手是否必胜。
定理:
若先手必赢,那么当且仅当满足:
两个概念:
必败局面:若某一局面无论采取什么行动,都会输掉游戏,则称该局面必败。
必胜局面:若在某一局面下采取某种行动后可以使对手面对必败局面,那么优先采取此行动,那么这种局面叫必胜局面。
证明:
- 如果所有物品被取光,那么即,那么这是一个必败局面,则满足:
- 对于任意一个局面,那么我们应该证明它一定可以采取一定行动来出现的局面(即对手必败局面)。
- 设的二进制表示下最高位的在第位,那么至少存在一堆石子,它的第位是,显然,然后我们便可以从中取走个石子,使这堆石子变为个石子,那么代入式子得:
- 对于任意一个局面,那么我们应该证明无论采取什么行动都不可能出现出现的局面。
- 用反证法证明:假设被取成了,那么此时就应该满足,由于, 那么则出现了得情况,说明,那么这显然不对与题目要求“不能不取石子”矛盾。
Mex运算
设表示一个非负整数集合。定义为求出不属于集合S得最小非负整数的运算,即:
SG函数
有向图中,对于每个节点,设从出发共有条有向边,分别到达节点,定义为的后继节点的函数值构成的集合,再执行运算,即:
整个有向图的函数就是图的起点的,
那么多个有向图的游戏中,行动规则是任选一个有向图,并在中行动一步,那么类比于游戏,如果满足:
那么此时是必胜局面,证明方法与博弈类似
否则必败局面。
理解:
在一个没有出边的节点上,不能进行任何操作,那么它的,此时就是必败局面。
对于一个节点的某一个后继节点的情况,在运算后,该节点,那么等价于当前局面是必胜局面,因为后继界面是必败界面。
对于一个节点的后继节点均不为,在运算后,该节点值为,那么当前就是一个必败界面。
理论部分结束!
后边新学知识我再补上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端