[笔记]博弈论 & SG 函数

一直没学结果今天被创了。

一些定义:

  • mex{S}:集合 S 中最小的没有出现过的非负整数。
  • :按位异或。也叫做 xor

博弈状态

  • 定义 P-position 为“必胜态”,即 positive-position,简称 P。某个玩家到达该状态则一定胜。
  • 定义 N-position 为“必败态”,即 negative-position,简称 N。某个玩家到达该状态则一定败。
  • 定义某个状态的”后继状态”当前玩家从当前状态进行一次操作能够到达的状态集合。
  • 一个状态为 P,当且仅当其后继状态存在至少一个必败状态。
  • 一个状态为 N,当且仅当其后继状态全部都是必胜状态。

博弈图

  • 将每个状态向其后继状态连边,每条边表示转移,形成一个有向无环图称为博弈图。

SG 函数

  • 定义有向图游戏上的函数 SG(x)。对于 x 的后继状态 S,有 SG(x)=mex{yS:SG(y)}。对于必败态定义其 SG0

  • 在有向图游戏中,SG 是容易递推求出的。

SG 定理

  • 对于有 n 个起点的有向图游戏,设他们的起点分别为 s1,s2sn,则有:当且仅当 inSG(si)0,该游戏先手必胜。
  • 不会定理的证明/ll

尼姆游戏(Nim 游戏)

  • 又称取石子游戏。有 n 堆石子,每一堆有 ai 个。两个人以最优策略轮流取,不能操作的失败。求先手必胜还是必败。
  • 我们将 Nim 游戏转化称有向图游戏。发现每一堆是相互独立的。将每一堆建成有向无环图,节点 x 连向 y 当且仅当 y<x。不难发现 SG(x)=x。根据 SG 定理,先手必胜当且仅当 inai0

SG 函数的应用

  • 例 1:UVA1482 Playing With Stones:仍然是取石子游戏,但是每次取的个数有限制,从每次随便取,变成每次取不超过每堆的一半。

    我们通过打表观察 SG 函数,可以发现一些规律:

    • nmod2=0,则 SG(n)=n/2
    • nmod2=1,则 SG(n)=(n1)/4
    • nmod2=1,则 SG(n)=SG((n1)/2)

将每一堆的 SG 异或起来。复杂度 O(nlogV)

  • 例 2:台阶-Nim 游戏:还是取石子,但是石子放在台阶上,每次可以从上面的台阶上拿下来若干个放到下面的台阶上去。放到地上的不能再动。求先手必胜还是必败。

    可以将该问题等价为奇数位置的石子组成的尼姆游戏。我们考虑,设该游戏的 SG 值为奇数位置的石子个数的亦或和。如果先手下,先手一定可以移动石子使得 SG 变为 0。否则,后手无论怎么移动,先手可以将他移动个数相同多的石子移动到下一级,让 SG=0 的状态转移给后手。

posted @   Link-Cut-Y  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示