【学习笔记】SG 函数与 SG 定理
公平组合游戏#
公平组合游戏满足以下条件:
-
两个玩家参与游戏,轮流操作。
-
游戏以某个玩家不能操作未结束,且不能操作的玩家失败,游戏不含平局。
-
游戏的操作与玩家无关,只与当前的状态有关。
-
游戏状态不会重复出现,若将状态设为点,将一次操作对状态的改变设为有向边,将得到有向无环图。
博弈图#
根据公平组合游戏的最后一个条件,定义没有出边的状态必败状态,有连向必败状态出边的状态为必胜状态,没有连向必败状态出边的状态为必败状态。
可以通过搜索在 的复杂度判断每个状态是否必胜或必败。
Nim 游戏#
堆石子,第 堆有 个,轮流操作,每次操作可以任选一堆石子拿走若干,不能不拿,最终不能操作玩家的失败。
结论:当且仅当 时先手必败,否则先手必胜。
根据上面对状态必胜必败的定义,可以证明:
-
最终不能操作时 ,有 ,必败。
-
若 ,设 的二进制最高位 ,那么一定存在一个 满足 在 上为 ,此时一定有 ,令 ,就可以到达一个异或和为 的必败状态,必胜。
-
若 ,不难发现修改任意一个 一定会改变异或和,因此该状态只能到达异或和不为 的状态,必败。
SG 函数#
定义一个状态 的 SG 函数 ,计算方式为:
其中 是 连向的状态, 定义为集合中未出现的最小自然数。
若 ,则 状态是必败状态,否则是必胜状态。
证明依旧类似:
-
终止状态的 ,必败。
-
若 ,说明存在 ,即可以到达一个必败状态,必胜。
-
若 ,说明不存在 ,即无法到达一个必败状态,必败。
我们发现 函数的引入并不突兀,它只是十分契合判断必败必胜的方法。
SG 定理#
定义一个局面 由若干互不影响的子游戏状态 组成,那么 。
证明仍然类似:
-
终止状态所有 均为 ,必败。
-
其他情况我们只关心操作对 的改变,由 定义知 可以移动到的状态 中, 取遍 。也可能存在 ,但由于 可以移动到的状态 中,一定存在 ,相当于没有操作,因此只会向更小的部分移动。这就等价于 Nim 游戏取石子了,直接套用 Nim 游戏的证明。
参考资料#
- OI Wiki
作者:SoyTony
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效